diff --git a/notebooks/seminar04.ipynb b/notebooks/seminar04.ipynb index e1bd8dd1522eb94934bd836367cc765561ae871e..29f2910b43babb28adc3bc39d3c0659f0e568745 100644 --- a/notebooks/seminar04.ipynb +++ b/notebooks/seminar04.ipynb @@ -89,6 +89,9 @@ "Manchmal vergisst Jupyter Notebooks auch, dass bereits eine Schildkröte existiert, in diesem Fall initialisieren Sie diese bitte einfach am Anfang des gewünschten Code-Blocks. \n", "\n", "\n", + "[diese Webseite](https://www.pythonsandbox.com/turtle) funktioniert für das turtle Modul gegebenenfalls besser als die Jupyter Notebooks, die bei Fehlern teilweise abstürzen. Sie können also dort programmieren und erst am Ende den Code hier ins Notebook einfügen.\n", + "\n", + "\n", "Probieren Sie nun Folgendes (kopieren Sie den Code in den folgenden Block):" ] }, @@ -229,8 +232,9 @@ "\n", "<font color = green>for</font> <font color = black>Variable</font> <font color = green>in</font> <font color = purple>Sequenz</font>:\n", "```\t\n", - " Anweisung1\n", - "\tAnweisung2\n", + " Anweisung_1\n", + " ...\n", + "\tAnweisung_n\n", "```\n", "\n", "Die Schleife durchläuft nun die Liste mit jedem Schleifendurchlauf und die Variable `Variable` nimmt in jedem Durchlauf den nächsten Wert in der Liste an. Der Schleifenkörper besteht aus einer beliebig großen Anzahl von Anweisungen, die **eingerückt** (vier Leerzeichen bzw. einmal die tabulator-Taste) sein müssen.\n", @@ -270,8 +274,7 @@ "\n", "`for i in range(10):` durchläuft die Schleife zehnmal.\n", "\n", - "Die Zahl in `range()` gibt also an, wie häufig der Code wiederholt wird.\n", - "Hier macht es keinen Unterschied, was während des Schleifendurchlaufs passiert.\n", + "Die Zahl in `range()` kann also so interpretiert werden, wie häufig der Code wiederholt wird.\n", "\n", "*Beispiele:* " ] @@ -292,9 +295,10 @@ "metadata": {}, "outputs": [], "source": [ - "for k in range(4):\n", + "for too_long_variable_name in range(4):\n", " print(\"H\")\n", - " print(\"a\")" + " print(\"a\")\n", + " print(\"\\n\")" ] }, { @@ -1238,7 +1242,201 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Aufgabe 2\n", + "Aufgabe 2\n", + "\n", + "Zeichnen Sie die olympischen Ringe (die Verschlungenheit und die Farbe der Ringe müssen NICHT dargestellt werden). \n", + "\n", + "Falls Sie die Farben darstellen müssen, fragen Sie nach oder schauen Sie in der Lösung nach. \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "<details>\n", + " <summary type=\"button\" class=\"btn btn-primary\">1. Hinweis</summary>\n", + " <div class=\"alert alert-info\" role=\"alert\">\n", + "\n", + "Nutzen Sie die Funktion `circle()` aus den obigen Aufgaben.\n", + " \n", + " </div> \n", + "</details>\n", + "\n", + "<details>\n", + " <summary type=\"button\" class=\"btn btn-primary\">2. Hinweis</summary>\n", + " <div class=\"alert alert-info\" role=\"alert\">\n", + "\n", + "Nutzen Sie [die turtle Dokumention](https://docs.python.org/3/library/turtle.html), um alle benötigten Funktionen herauszusuchen und anzuwenden.\n", + " \n", + " </div> \n", + "</details>\n", + "\n", + "\n", + "<details>\n", + " <summary type=\"button\" class=\"btn btn-primary\">3. Hinweis</summary>\n", + " <div class=\"alert alert-info\" role=\"alert\">\n", + "\n", + "Nützliche Funktionen sind:\n", + " - penup() / pendown()\n", + " - color()\n", + " - width()\n", + " - goto()\n", + " \n", + " \n", + " </div> \n", + "</details>\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Eine mögliche Lösung könnte so aussehen:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import turtle\n", + "\n", + "zoe = turtle.Turtle()\n", + "zoe.speed(10)\n", + "\n", + "def ring(t, length, radius, k):\n", + " t.color(colors[k])\n", + " t.up()\n", + " t.forward(length)\n", + " t.down()\n", + " t.circle(radius)\n", + " \n", + "\n", + "\n", + "def rings(t, length, radius):\n", + " t.width(10)\n", + " k = 0\n", + " for i in range(3):\n", + " ring(t, length, radius, k)\n", + " k += 1\n", + " t.penup()\n", + " t.goto(radius,-radius)\n", + " t.pendown()\n", + " for i in range(2):\n", + " ring(t, length, radius, k)\n", + " k += 1\n", + "\n", + " \n", + "colors = [\"blue\", \"black\", \"red\", \"yellow\", \"green\"]\n", + "\n", + "rings(zoe, 125, 50)\n", + "\n", + "\n", + "\n", + " \n", + "turtle.mainloop()\n", + "turtle.bye()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Aufgabe 3\n", + "\n", + "Zeichnen Sie eine rechteckige Spirale (siehe Abbildung, die gestrichelten Linien dürfen gerne durchgezogen sein). \n", + "\n", + "a) Die Spirale hat eine fest angegebene Größe.\n", + "\n", + "b) Die Spirale kann durch einen Parameter in Ihrer Funktion variabel gestaltet werden.\n", + "\n", + " _________________\n", + " | ____________\n", + " | | ________ |\n", + " | | | ____ | |\n", + " | | | | _ | | |\n", + " | | | |__| | | |\n", + " | | |______| | |\n", + " | |__________| |\n", + " |______________|\n", + "\n", + "\n", + "<details>\n", + " <summary type=\"button\" class=\"btn btn-primary\">1. Hinweis</summary>\n", + " <div class=\"alert alert-info\" role=\"alert\">\n", + "\n", + "Wenn Sie sich die Spirale anschauen, sehen Sie, dass Sie einem Quadrat sehr ähnlich sieht. Was ist der Unterschied?\n", + "\n", + " </div> \n", + "</details>\n", + "\n", + "<details>\n", + " <summary type=\"button\" class=\"btn btn-primary\">2. Hinweis</summary>\n", + " <div class=\"alert alert-info\" role=\"alert\">\n", + "\n", + "Der Unterschied, ist, dass die Seiten nach jeder Ecke länger werden. Wie kann man das abbilden?\n", + "\n", + " </div> \n", + "</details>\n", + "\n", + "<details>\n", + " <summary type=\"button\" class=\"btn btn-primary\">3. Hinweis</summary>\n", + " <div class=\"alert alert-info\" role=\"alert\">\n", + "\n", + "Nutzen Sie einen Parameter, z.B. `length`, der innerhalb der Schleife erhöht wird, damit die turtle in jedem Schleifendurchgang ein Stück länger geradeaus läuft. \n", + " \n", + " </div> \n", + "</details>\n", + "\n", + "<details>\n", + " <summary type=\"button\" class=\"btn btn-primary\">4. Hinweis</summary>\n", + " <div class=\"alert alert-info\" role=\"alert\">\n", + "\n", + "Die Größe der Spirale lässt sich durch die Anzahl an Schleifendurchläufen angeben.\n", + " \n", + " </div> \n", + "</details>\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hier ist eine mögliche Lösung:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "\n", + "import math\n", + "import turtle\n", + "eve = turtle.Turtle()\n", + "eve.speed(10)\n", + "\n", + "def rect_spiral(t, length, size):\n", + " while length < size:\n", + " t.forward(length)\n", + " t.right(90)\n", + " length = length + 2\n", + "\n", + "rect_spiral(eve, 1, 100)\n", + "\n", + " \n", + "turtle.mainloop()\n", + "turtle.bye()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Aufgabe 4\n", "\n", "\n", "\n", @@ -1249,7 +1447,7 @@ " <summary type=\"button\" class=\"btn btn-info\">Hinweis</summary>\n", " <div class=\"alert alert-info\" role=\"alert\">\n", " \n", - "Die Lösung benötigt auch [polygon.py](http://thinkpython2.com/code/polygon.py). \n", + "Die Lösung benötigt auch [polygon.py](http://thinkpython2.com/code/polygon.py) bzw. die Funktion `arc()` aus den obigen Übungen. \n", " \n", " </div> \n", "</details>\n", @@ -1417,7 +1615,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Aufgabe 3\n", + "### Aufgabe 5\n", "\n", "\n", "\n", @@ -1574,7 +1772,7 @@ " \n", " \n", "bob=turtle.Turtle() \n", - "kuchen(bob, 5, 100)\n", + "kuchen(bob, 15, 150)\n", "\n", "turtle.mainloop() \n", "turtle.bye()" @@ -1584,7 +1782,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Aufgabe 4\n", + "### Aufgabe 6\n", "\n", "\n", "Lesen Sie etwas zu Spiralen auf [Wikipedia](https://de.wikipedia.org/wiki/Spirale). Schreiben Sie dann ein Programm, welches eine [Archimedische Spirale](https://de.wikipedia.org/wiki/Archimedische_Spirale) (oder eine andere) zeichnet.\n", @@ -1670,6 +1868,8 @@ "metadata": {}, "outputs": [], "source": [ + "import turtle\n", + "\n", "def spirale(t,n):\n", " '''In dieser Spirale bestimmt der Nutzer, wie viele Segmente gezeichnet werden, die Windung der Spirale ist\n", " in der Funktion festgelegt.\n", @@ -1684,7 +1884,7 @@ " t.lt(dtheta)\n", " theta = theta + dtheta\n", "\n", - "import turtle\n", + "\n", "bob=turtle.Turtle() \n", "spirale(bob,1000)\n", "turtle.mainloop()\n", @@ -1696,7 +1896,7 @@ "metadata": {}, "source": [ "\n", - "### Aufgabe 5\n", + "### Aufgabe 7\n", "\n", "*(Hinweis: Dies ist eher eine Fleiß- und Zusatzaufgabe.)*\n", "\n",