diff --git a/notebooks/hausaufgabe1.ipynb b/notebooks/hausaufgabe1.ipynb index 03ae7ad611ba33f98ae5b7b71d30275c2ca97334..f0c3541e7dd53c19da7eba2f630cfc7b8fd793fa 100644 --- a/notebooks/hausaufgabe1.ipynb +++ b/notebooks/hausaufgabe1.ipynb @@ -14,7 +14,7 @@ "source": [ "# 1. Hausaufgabe\n", "\n", - "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", + "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 (#), um ihr Programm zu kommentieren.\n", "\n", "Bitte ändern Sie den Dateinamen ihrer Hausaufgabe zu: **hausaufgabe1_nachnamePartner1_nachnamePartner2.ipynb**\n", "\n", @@ -48,17 +48,29 @@ "metadata": {}, "outputs": [], "source": [ + "# Beispiel:\n", + "print(\"a\"+\"b\") \n", + "#zwei Zeichenketten werden durch den Operator \"+\" verkettet \n", + "# und durch die print()-Funktion ausgegeben.\n", + "\n", + "\n", + "\n", "# Hier könnte Ihre Erklärung zur ersten Codezeile stehen.\n", + "# Hier könnte die zweite Zeile der Erklärung zur ersten Codezeile stehen\n", "print(2 + 3)\n", "print(2.2 + 3.3)\n", "print('2' + '3')\n", "print('2.2' + '3.3')\n", + "\n", "print(str(2) + str(3))\n", "print(str(2.2) + str(3.3))\n", + "\n", "print(int('2') + int('3'))\n", "print(int('2' + '3'))\n", + "\n", "print(float('2') + float('3'))\n", "print(float('2' + '3'))\n", + "\n", "print(int(2.6 + 2.6))\n", "print(int(2.6) + int(2.6))" ] @@ -67,9 +79,12 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "**Tipp**: Wichtig bei den folgenden Aufgaben ist der Umgang mit Zeichenketten und der `print`-Funktion. Das haben Sie in den seminar-Notebooks schon gelernt. Gehen Sie diese zu Beginn der Hausaufgabe noch einmal durch und achten Sie, mit welchen Operatoren man Zeichenketten zusammenfügen und manipulieren kann.\n", "\n", "## Aufgabe 2\n", + "### Aufgabe 2a\n", + "\n", + "**Tipp**: Wichtig bei den folgenden Aufgaben ist der Umgang mit Zeichenketten und der `print`-Funktion. Das haben Sie in den seminar-Notebooks schon gelernt. Gehen Sie diese zu Beginn der Hausaufgabe noch einmal durch und achten Sie, mit welchen **Operatoren** man Zeichenketten zusammenfügen und manipulieren kann.\n", + "\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", @@ -121,13 +136,15 @@ "# 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.\")\n", - "boxprint(\"und dieser Text auch..................................................... !\")" + "boxprint(\"Das Reh springt hoch, das Reh springt weit. Warum auch nicht, es hat ja Zeit.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "### Aufgabe 2b\n", + "\n", "Mit dem Linux-Programm [cowsay](https://en.wikipedia.org/wiki/Cowsay) kann man verschiedene Tiere \"Sprüche klopfen\" lassen:\n", "\n", "```\n", @@ -165,7 +182,7 @@ "\n", "Nutzen Sie dazu Ihre bei der Programmierung von `boxprint` gesammelte Erfahrung. Auch hier soll das Argument eine variable Länge aufweisen können, die \"Sprechbox\" soll sich anpassen.\n", "\n", - "Tipp: Man kann den Stegosaurus im Editiermodus kopieren, Sie müssen nicht jedes Zeichen selbst abtippen.\n", + "**Tipp**: Man kann den Stegosaurus im Editiermodus kopieren, Sie müssen nicht jedes Zeichen selbst abtippen.\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." @@ -192,8 +209,8 @@ "source": [ "# Testen Sie hier ihre Funktion; fügen Sie auch eigene Tests hinzu\n", "stegosay(\"Wo bleibt mein Frühstück?\")\n", - "stegosay(\"Dieser Text muss auch in die Box passen.\")\n", - "stegosay(\"und dieser Text auch..................................................... !\")" + "\n", + "stegosay(\"Auf einem Baum, da saß ein Specht. Der Baum war hoch, dem Specht war schlecht.\")" ] }, { @@ -201,6 +218,7 @@ "metadata": {}, "source": [ "## Aufgabe 3\n", + "### Aufgabe 3a\n", "\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", @@ -239,10 +257,11 @@ " *\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", + "- Lösen Sie diese Aufgabe mit Hilfe 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 Gleitkommazahl 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." + "- Damit Sie die Funktion `math.sin` nutzen können, müssen Sie anfangs das `math`-Modul importieren.\n", + "- Falls Sie das Problem nicht lösen können, fragen Sie im Seminar nach. Dort können Sie wertvolle Tipps erhalten." ] }, { @@ -251,6 +270,7 @@ "metadata": {}, "outputs": [], "source": [ + "\n", "def sinprint():\n", " '''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen. \n", " Diese Funktion kann man ohne Argument implementieren. Wenn es für Sie einfacher ist, \n", @@ -267,13 +287,15 @@ "metadata": {}, "outputs": [], "source": [ - "# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit verschiedenen Argumenten aufzurufen." + "# Bitte nutzen Sie diese Zelle, um Ihre Funktion aufzurufen." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "### Aufgabe 3b\n", + "\n", "Ä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", @@ -304,13 +326,15 @@ "metadata": {}, "outputs": [], "source": [ - "# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit verschiedenen Argumenten aufzurufen." + "# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit unterschiedlichen Argumenten aufzurufen." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "### Aufgabe 3c\n", + "\n", "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", @@ -338,7 +362,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit verschiedenen Argumenten aufzurufen." + "# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit unterschiedlichen Argumenten aufzurufen." ] }, {