Newer
Older
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Geben Sie diese Hausaufgabe gemeinsam mit Ihrem/r Partner/in ab. Füllen Sie dazu dieses Notebook aus und speichern Sie es ab (Disketten-Icon oben links). Laden Sie dann die Datei (hausaufgabe1.ipynb) in Moodle hoch. Verwenden Sie Kommentare im Python-Quellcode und Markdown-Textboxen im Jupyter-Notebook ([Syntax-Beispiele](https://de.wikipedia.org/wiki/Markdown#Auszeichnungsbeispiele)) um ihr Programm zu kommentieren.\n",
"\n",
"Wir wünschen viel Erfolg beim Lösen der Aufgaben!\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Was gibt jede der folgenden Anweisungen aus? Erklären Sie jeweils die Ausgabe."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(2 + 3)\n",
"print(2.2 + 3.3)\n",
"print('2' + '3')\n",
"print('2.2' + '3.3')\n",
"print(str(2) + str(3))\n",
"print(str(2.2) + str(3.3))\n",
"print(int('2') + int('3'))\n",
"print(int('2' + '3'))\n",
"print(float('2') + float('3'))\n",
"print(float('2' + '3'))\n",
"print(int(2.6 + 2.6))\n",
"print(int(2.6) + int(2.6))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Aufgabe 2\n",
"\n",
"Ihre Aufgabe ist es, eine Funktion `boxprint` zu implementieren, die eine als Argument übergegebene Zeichenkette innerhalb einer Box ausgibt. Die horizontalen Linien der Box sollen durch `-` erzeugt werden, die vertikalen Linien durch `|` und die Ecken durch `+`. Zwischen der Zeichenkette und dem linken und rechten Rand der Box soll jeweils genau ein Leerzeichen stehen. \n",
"\n",
"Beispiel: Bei Übergabe des Arguments `Hello World!` soll die Funktion folgende Ausgabe erzeugen:"
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```\n",
"+--------------+\n",
"| Hello World! |\n",
"+--------------+\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Überlegen Sie zunächst, wie Sie das Problem lösen könnten und beschreiben Sie hier kurz ihre Überlegungen bzw. ihr Vorgehen:\n",
"\n",
"- \n",
"- \n",
"- \n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Implementieren Sie hier ihre Funktion\n",
"\n",
"# Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu\n",
"boxprint(\"Hello World!\")\n",
"boxprint(\"Dieser Text muss auch in die Box passen.\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Mit dem Linux-Programm [cowsay](https://en.wikipedia.org/wiki/Cowsay) kann man verschiedene Tiere \"Sprüche klopfen\" lassen:\n",
"\n",
"```\n",
" ________\n",
"< Muuuh! >\n",
" --------\n",
" \\ ^__^\n",
" \\ (oo)\\_______\n",
" (__)\\ )\\/\\\n",
" ||----w |\n",
" || ||\n",
"```\n",
"\n",
"Schreiben Sie eine Funktion `stegosay`, die einen als Argument übergebenen Text folgendermaßen ausgibt:\n",
"\n",
"```\n",
" ___________________________\n",
"( Wo bleibt mein Frühstück? )\n",
" ---------------------------\n",
"o . .\n",
" o .---. < > < > .---.\n",
" o | \\ \\ - ~ ~ - / / |\n",
" _____ ..-~ ~-..-~\n",
" | | \\~~~\\.' `./~~~/\n",
" --------- \\__/ \\__/\n",
" (_____, `._.' | } \\/~~~/\n",
" `----. / } | / \\__/\n",
" `-. | / | / `. ,~~|\n",
" ~-.__| /_ - ~ ^| /- _ `..-' \n",
" | / | / ~-. `-. _ _ _\n",
" |_____| |_____| ~ - . _ _ _ _ _>\n",
"```\n",
"\n",
"Nutzen Sie dazu Ihre bei der Programmierung von `boxprint` gesammelte Erfahrung.\n",
"\n",
"\n",
"Freiwillige Erweiterung für Fortgeschrittene: Erweitern Sie die Funktion um ein Argument, mit dem eine maximale Breite (Anzahl Zeichen) übergeben werden kann, so dass die ausgegebene Box nicht breiter ist. Implementieren Sie dann die Behandlung von Zeichenketten, die länger als die vorgegebene Breite sind. Sie haben zwei Möglichkeiten: a) die Zeichenkette abschneiden, b) die Zeichenkette umbrechen. Entscheiden Sie sich für eine der beiden Varianten. Hinweis: auf die ersten `k` Zeichen einer Zeichenkette `s` können Sie mittels `s[0:k]` zugreifen. Analog können Sie auf das 2. bis 4. Zeichen mittels `s[1:4]` zugreifen, usw."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
"\n",
"Schreiben Sie eine Funktion `sinprint`, die die Sinusfunktion (`math.sin`) im Bereich zwischen 0 und 2π um 90° gedreht ausgibt, also ungefähr so:\n",
"\n",
"```\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
"*\n",
"*\n",
"*\n",
"*\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
" *\n",
"```\n",
"Hinweise:\n",
"- Sie können die Aufgabe auch ohne eine Schleife lösen, aber schöner ist es mit einer Schleife. Sie kennen die Syntax und Semantik der `while`-Schleife schon aus der Vorlesung. Sie funktioniert in Python genau so, wie sie für den Pseudocode definiert wurde. \n",
"- Sie müssen selbst entscheiden, wieviele Werte Sie im verlangten Intervall berechnen. Die Kurve oben wurde mit einem Rasterabstand von 0.2 berechnet (d.h., für die Werte 0, 0.2, 0.4, 0.6, ..., 6.2). \n",
"- Denken Sie daran, dass Sie mit der `int`-Funktion eine Fließkommazahl in eine ganze Zahl umwandeln können (der Dezimalanteil wird abgeschnitten).\n",
"- Damit Sie die Funktion `math.sin` nutzen können, müssen Sie anfangs das `math`-Modul importieren."
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def sinprint():\n",
" # Implementieren Sie hier die Funktion sinprint\n",
"\n",
"\n",
"sinprint() # Testaufruf"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ändern Sie die Funktion `sinprint`, so dass eine beliebige Funktion gezeichnet werden kann. Diese Funktion sollte als Argument übergeben werden können. Also beispielsweise so:\n",
"\n",
"```python\n",
"funcprint(math.sin)\n",
"```\n",
"\n",
"Ändern Sie gleich auch den Namen der Funktion zu `funcprint`, da sie ja jetzt nicht nur die Sinusfunktion ausgeben kann. (In der 2. Aufgabe des 3. Jupyter-Notebooks haben wir die Funktion `do_twice` kennengelernt - dort sehen Sie, wie Sie Funktionen als Argumente übergeben und verwenden können.)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Implementieren Sie hier die Funktion funcprint\n",
"\n",
"# Testen Sie hier die Funktion funcprint\n",
"funcprint(math.erf)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Wenn alles geklappt hat, enthält Ihre Funktion jetzt einige Werte, die als Literale angegeben sind, z.B.\n",
"- den Anfangs- und Endwert des Intervalls, in dem die Funktion gezeichnet werden soll\n",
"- die Schrittweite\n",
"- die Skalierung (Vergrößerung)\n",
"- die Verschiebung des Nullpunkts\n",
"\n",
"Ändern Sie die Funktion `funcprint`, so dass alle diese Werte als Argumente übergeben werden können. Testen Sie die Funktion dann mit der Funktion `math.log` als Argument. Dafür müssen Sie den Anfangswert so ändern, dass 0 nicht enthalten ist (da der Logarithmus von 0 nicht definiert ist)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]