"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 (hausaufgabe2_nachname1_nachname2.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 (hausaufgabe2_nachname1_nachname2.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",
"\n",
"\n",
"\n",
"* Geben Sie bitte Ihrem **Notebook einen Namen**, sodass es Ihnen und Ihrem Partner zugeordnet werden kann (z.B. *hausaufgabe2_nachname1_nachname2.ipynb*)\n",
"* Geben Sie bitte Ihrem **Notebook einen Namen**, sodass es Ihnen und Ihrem Partner zugeordnet werden kann (z.B. *hausaufgabe2_nachname1_nachname2.ipynb*) \n",
"* Für das Aufwärmen sind in den Seminar-Notebooks schon Musterlösungen gegeben, die nur geringfügig angepasst werden müssen. Falls Sie eine davon nutzen, **ändern Sie zumindest die Namen der Argument und Variablen.** \n",
"* Fügen Sie außerdem **Kommentare** zu ihrem Code hinzu, mit denen Sie erklären, was die Funktion macht. Dies kann man durch zwei Varianten machen:\n",
"* Fügen Sie außerdem **Kommentare** zu ihrem Code hinzu, mit denen Sie erklären, was die Funktion macht (Schleife, Bedingungen, etc. beschreiben). Dies kann man durch zwei Varianten machen:\n",
"* Schauen Sie sich das notebook **[FAQ.ipynb](FAQ.ipynb)** an, hier sind turtle-Methoden beschrieben, die Sie in dieser Hausaufgabe nutzen können. \n",
"* In jedem Codeblock steht ein **Funktionsaufruf**, der die von Ihnen definierte Funktion aufruft. Dies sollte funktionieren (dort kann man auch direkt ablesen, wieviele und welche Argumente benötigt werden). Anfangs können Sie den Aufruf gerne auskommentieren, damit nicht ständig eine Fehlermeldung angezeigt wird.\n",
"* In jedem Codeblock steht eine **Testfunktion**, die am Ende die von Ihnen definierte Funktion aufruft. Dies sollte funktionieren (dort kann man auch direkt ablesen, wieviele und welche Argumente gebraucht werden). Anfangs können Sie den Aufruf gerne auskommentieren, damit nicht immer eine Fehlermeldung angezeigt wird (danach wieder Kommentare entfernen).\n",
"* Schreiben Sie bitte zu jeder definierten Funktion **einen Funktionsaufruf mit eigens definierten *turtle-Objekten* und Parametern**.\n",
"* Schreiben Sie bitte zu jeder definierten Funktion einen **Funktionsaufruf mit eigens definierten *turtle-Objekten* und Parametern**.\n",
"* Nutzen Sie **Schleifen** in allen Aufgaben, in denen Sie geometrische Figuren zeichnen müssen (Sie haben diese in den Seminaren kennengelernt)!\n",
"* Nutzen Sie **Schleifen** in allen Aufgaben, in denen Sie geometrische Figuren zeichnen müssen (Sie haben diese in den Seminaren kennengelernt)!\n",
"* Verwenden Sie die von Ihnen **geschriebenen Funktionen aus vorherigen Aufgabenteilen in den Folgeaufgaben**, um Code zu sparen und Fehler zu vermeiden (zum Beispiel die Nutzung der Funktion triangle in den Aufgaben 2-5).\n",
"* Verwenden Sie die von Ihnen **geschriebenen Funktionen aus vorherigen Aufgabenteilen in den Folgeaufgaben**, um Code zu sparen und Fehler zu vermeiden (zum Beispiel die Nutzung der Funktion `triangle` aus Aufgabe 1 in den Aufgaben 2-5).\n",
"* Sie dürfen natürlich auch andere Funktionen des turtle-Moduls nutzen (siehe https://docs.python.org/3/library/turtle.html).\n",
"* Nutzen Sie Funktionen des turtle-Moduls (siehe https://docs.python.org/3/library/turtle.html).\n",
"* Bitte geben Sie nur **eine Lösung pro Aufgabe** ab.\n",
"* Bitte geben Sie nur **eine Lösung pro Aufgabe** ab.\n",
"* **Zusatz** = freiwillig\n",
"\n",
"\n",
"\n",
"\n",
"Wir wünschen viel Erfolg beim Lösen der Aufgaben!"
"Wir wünschen viel Erfolg beim Lösen der Aufgaben!"
...
@@ -58,19 +55,32 @@
...
@@ -58,19 +55,32 @@
"import turtle\n",
"import turtle\n",
"\n",
"\n",
"caro = turtle.Turtle()\n",
"caro = turtle.Turtle()\n",
"turtle.colormode(255)\n",
"\n",
"\n",
"\n",
"for i in range(4):\n",
"for i in range(4):\n",
" caro.fd(100)\n",
" caro.fd(100)\n",
" caro.lt(90)\n",
" caro.lt(90)\n",
" # Aufruf am Ende des Schleifendurchlaufs, \n",
" #um im nächsten Schleifendurchlauf die Linie und die turtle neu zu färben\n",
" caro.color(setcolor())\n",
" caro.color(setcolor())\n",
"\n",
"\n",
"turtle.mainloop()\n",
"turtle.mainloop()\n",
"turtle.bye()"
"turtle.bye()"
]
]
},
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Tipps für die folgenden Aufgaben:\n",
"Nutzen Sie die python-Dokumention von `turtle`: https://docs.python.org/3/library/turtle.html. Dort finden Sie alle Funktionen, die Sie anwenden können. Wichtig für die Hausaufgabe sind (neben denen, die Sie schon kennengelernt haben):\n",
"- `t.shape('turtle')`: ändert die Gestalt der \"Schildkröte\" in eine Schildkröte.\n",
"- Die Farbe der Schildkröte und der Färbung der Muster wählt man mit `t.color()`.\n",
"- ```t.begin_fill() \n",
" ... \n",
" t.end_fill()```: Färbt das Muster, was die Schildkröte zwischen den beiden Anweisungen gezeichnet hat, ein.\n",
"- `t.stamp()`: Platziert bei Aufruf eine Schildkröte an der Stelle, an der die Schildkröte sich zu diesem Zeitpunkt befindet.\n",
"- Mit `t.speed()` können Sie der turtle verschiedene Geschwindigkeiten geben."
]
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {},
...
@@ -79,7 +89,17 @@
...
@@ -79,7 +89,17 @@
"\n",
"\n",
"\n",
"\n",
"### Aufgabe 1\n",
"### Aufgabe 1\n",
"Schreiben Sie eine Funktion `triangle`, die zwei Parameter `t` und `l` erwartet. `t` ist eine Schildkröte, `l` eine Ganzzahl. Die Funktion soll die Schildkröte nutzen, um ein gleichseitiges Dreieck mit Seitenlänge `l` zu zeichnen. Schreiben Sie einen Funktionsaufruf, der `otto` und `40` an `triangle` übergibt und rufen Sie ihr Programm auf."
"\n",
"Schreiben Sie eine Funktion `triangle`, die zwei Parameter `t` und `l` erwartet. `t` ist ein turtle-Objekt, `l` eine Ganzzahl. Die Funktion soll die Schildkröte nutzen, um ein gleichseitiges Dreieck mit Seitenlänge `l` zu zeichnen. Schreiben Sie einen Funktionsaufruf, der `otto` und `40` an `triangle` übergibt und rufen Sie ihr Programm auf.\n",
"\n",
"Vervollständigen Sie ihren Code:\n",
"\n",
"- Färben Sie die Schildkröte in einer Farbe Ihrer Wahl.\n",
"\n",
"- Färben Sie Ihr Dreieck in einer Farbe Ihrer Wahl.\n",
"\n",
"- Platzieren Sie an jeder Ecke Ihres Dreiecks eine Schildkröte.\n",
"\n"
]
]
},
},
{
{
...
@@ -89,10 +109,10 @@
...
@@ -89,10 +109,10 @@
"outputs": [],
"outputs": [],
"source": [
"source": [
"import turtle\n",
"import turtle\n",
"turtle.colormode(255)\n",
"\n",
"\n",
"\n",
"def triangle(t, l):\n",
"def triangle(t, length):\n",
" pass # löschen Sie diese Zeile, wenn Sie anfangen, die Funktion zu implementieren\n",
" pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
...
@@ -104,47 +124,17 @@
...
@@ -104,47 +124,17 @@
"turtle.bye()"
"turtle.bye()"
]
]
},
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### eingebaute turtle-Methoden:\n",
"- Dokumention von python: https://docs.python.org/3/library/turtle.html\n",
" - Dort finden Sie alle Funktionen, die Sie auf Ihre Schildkröte anwenden können. Wichtig für die Hausaufgabe sind (neben denen, die Sie schon kennengelernt haben):\n",
"- `t.shape('turtle')`: ändert die Gestalt der \"Schildkröte\" in eine Schildkröte.\n",
"- Die Farbe der Schildkröte und der Färbung der Muster wählt man mit `t.color(c)`, wobei `c` eine Zeichenkette ist (z.B. 'red', 'green', etc.) \n",
"- `t.begin_fill()` ... `t.end_fill()`: Färbt das Muster, was die Schildkröte zwischen den beiden Anweisungen gezeichnet hat, ein.\n",
"- `t.stamp()`: Platziert bei Aufruf eine Schildkröte an der Stelle, an der die Schildkröte sich zu diesem Zeitpunkt befindet.\n",
"- Mit `t.speed(x)` können Sie der turtle verschiedene Geschwindigkeiten geben (`x` ist eine Zahl zwischen 1 und 100)"
]
},
{
{
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {},
"source": [
"source": [
"### Aufgabe 2\n",
"### Aufgabe 2\n",
"#### a\n",
"Schreiben Sie eine Funktion `repeat_triangle`, die `n` gleichseitige Dreiecke nebeneinander zeichnet. Sie soll drei Argumente `t`, `n` und `l` erhalten. `t` ist ein turtle-Objekt, `l` gibt die Seitenlänge der Dreiecke an und `n` die Anzahl der Dreiecke. Die Farbe der Dreiecke soll nicht schwarz sein. In der Funktion `repeat_triangle` soll die Funktion `triangle` aus Aufgabe 1 genutzt werden. <br>\n",
"Nutzen Sie die Funktionen, um die Schildkröte in einer Farbe Ihrer Wahl zu färben. Dies können Sie direkt in Ihren Code aus Aufgabe 2 einbauen. Sie können aber auch einen neuen Codeblock erstellen.\n",
"#### b\n",
"Nutzen Sie die Funktionen, um Ihr Dreieck in einer Farbe Ihrer Wahl zu färben.\n",
"#### c\n",
"Nutzen Sie die Funktionen, um an jeder Ecke Ihres Dreiecks eine Schildkröte zu platzieren."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Aufgabe 3\n",
"a) Schreiben Sie eine Funktion `repeat_triangle`, die **vier Dreiecke nebeneinander** zeichnet. Sie soll zwei Argumente `t` und `l` erhalten. `t` ist eine Schildkröte, `l` eine Ganzzahl. Die Funktion soll die Schildkröte nutzen, um die gleichseitigen Dreiecke mit Seitenlänge `l` zu zeichnen. Die Farbe der Dreiecke soll nicht schwarz sein. In der Funktion `repeat_triangle` soll die Funktion `triangle` aus Aufgabe 2 aufgerufen werden. <br>\n",
"\n",
"b) Verändern Sie die Funktion so, dass sie eine variable Anzahl von Dreiecken zeichnen kann, die als Argument übergeben wird.\n",
"\n",
"\n",
"\n",
"- *Zusatz* : Jedes Dreieck soll eine eigene Farbe haben.\n",
"- *freiwillig* : Jedes Dreieck soll eine eigene Farbe haben.\n",
"\n",
"\n",
"\n",
"\n",
"Eine mögliche Lösung könnte so aussehen:\n",
"Eine mögliche Lösung könnte so aussehen (`repeat_triangle(otto, 80, 4)`): \n",
" pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren\n",
" pass # löschen Sie diese Zeile, wenn Sie anfangen, die Funktion zu implementieren\n",
" \n",
"\n",
" \n",
"otto = turtle.Turtle()\n",
"repeat_triangle(otto, 80)\n",
"\n",
"turtle.mainloop()\n",
"turtle.bye()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import turtle\n",
"\n",
"# Aufgabe b\n",
"def repeat_triangle(t, length, number):\n",
" pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren\n",
" \n",
" \n",
"\n",
"\n",
" \n",
" \n",
"otto = turtle.Turtle()\n",
"otto = turtle.Turtle()\n",
"repeat_triangle(otto, 100, 6)\n",
"repeat_triangle(otto, 80, 4)\n",
"\n",
"\n",
"turtle.mainloop()\n",
"turtle.mainloop()\n",
"turtle.bye()"
"turtle.bye()"
...
@@ -194,18 +164,16 @@
...
@@ -194,18 +164,16 @@
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {},
"source": [
"source": [
"### Aufgabe 4\n",
"### Aufgabe 3\n",
"a) Schreiben Sie eine Funktion `pile_triangle`, die **vier Dreiecke übereinander** zeichnet. Sie soll zwei Argumente `t` und `l` erhalten. `t` ist eine Schildkröte, `l` eine Ganzzahl. Die Funktion soll die Schildkröte nutzen, um die gleichseitigen Dreiecke mit Seitenlänge `l` zu zeichnen. Die Farbe der Dreiecke soll nicht schwarz sein. In der Funktion `pile_triangle` soll die Funktion `triangle` aus Aufgabe 2 aufgerufen werden. \n",
"Schreiben Sie eine Funktion `pile_triangle`, die `m` gleichseitige Dreiecke übereinander zeichnet. Sie soll drei Argumente `t`, `l` und `m` erhalten. `t` ist ein turtle-Objekt, `l` gibt die Seitenlänge der Dreiecke an und `m` die Anzahl der Dreiecke. Die Farbe der Dreiecke soll nicht schwarz sein. In der Funktion `pile_triangle` soll die Funktion `triangle` aus Aufgabe 1 genutzt werden. \n",
"\n",
"\n",
"b) Verändern Sie die Funktion so, dass sie eine variable Anzahl von Dreiecken zeichnen kann, die als Argument übergeben wird.\n",
"\n",
"\n",
"**Achtung**: Im gleichseitigen Dreieck ist die Höhe des Dreiecks gleich die halbe Seitenlänge multipliziert mit der Wurzel aus Drei.\n",
"\n",
"\n",
"- *Zusatz* : Jedes Dreieck soll eine eigene Farbe haben.\n",
"- *frewillig* : Jedes Dreieck soll eine eigene Farbe haben.\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"Eine mögliche Lösung könnte so aussehen: \n",
"Eine mögliche Lösung könnte so aussehen (`pile_triangle(otto, 80, 4)`): \n",
" pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren\n",
" pass # löschen Sie diese Zeile, wenn Sie anfangen, die Funktion zu implementieren\n",
"\n",
"\n",
"\n",
"\n",
"otto = turtle.Turtle()\n",
"pile_triangle(otto, 80)\n",
"\n",
"turtle.mainloop()\n",
"turtle.bye()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import turtle\n",
"\n",
"\n",
"# Aufgabe b\n",
"def pile_triangle(t, length, number):\n",
" pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"otto = turtle.Turtle()\n",
"otto = turtle.Turtle()\n",
"pile_triangle(otto, 100, 2)\n",
"pile_triangle(otto, 80, 4)\n",
"\n",
"\n",
"turtle.mainloop()\n",
"turtle.mainloop()\n",
"turtle.bye()"
"turtle.bye()"
...
@@ -256,13 +204,13 @@
...
@@ -256,13 +204,13 @@
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {},
"source": [
"source": [
"### Aufgabe 5\n",
"### Aufgabe 4\n",
"Schreiben Sie eine Funktion `tiled_triangle`, die **drei Dreiecke übereinander und drei Dreiecke nebeneinander** zeichnet. Sie soll zwei Argumente `t` und `l` erhalten. `t` ist eine Schildkröte, `l` eine Ganzzahl. Die Funktion soll die Schildkröte nutzen, um die gleichseitigen Dreiecke mit Seitenlänge `l` zu zeichnen. Die Farbe der Dreiecke soll nicht schwarz sein. Nutzen Sie dafür Ihre Lösung aus Aufgabe 2 und Aufgabe 3 oder Aufgabe 4. <br>\n",
"Schreiben Sie eine Funktion `tiled_triangle`, die `n` gleicheitige Dreiecke nebeneinander und `m` gleichseitige Dreiecke übereinander zeichnet. Sie soll vier Argumente `t`, `l`, `n` und `m` erhalten. `t` ist ein turtle-Objekt, `l` gibt die Seitenlänge der Dreiecke an, `n` die Anzahl der nebeneinanderliegenden Dreiecke und `m` die Anzahl der übereinanderliegenden Dreiecke. Die Farbe der Dreiecke soll nicht schwarz sein. Nutzen Sie dafür Ihre Lösung aus Aufgabe Aufgabe 3 **oder** Aufgabe 4. <br>\n",
"- *Zusatz* : Jedes Dreieck soll eine eigene Farbe haben.\n",
"- *freiwillig* : Jedes Dreieck soll eine eigene Farbe haben.\n",
"- *Zusatz* : Färben Sie auch die Zwischenräume, die hier entstehen\n",
"- *freiwillig* : Färben Sie auch die Zwischenräume, die hier entstehen\n",
" \n",
" \n",
"\n",
"\n",
"- Eine mögliche Lösung könnte so aussehen:\n",
"- Eine mögliche Lösung könnte so aussehen (`tiled_triangle(otto, 80, 3, 3)`):\n",
" pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren\n",
" pass # löschen Sie diese Zeile, wenn Sie anfangen, die Funktion zu implementieren\n",
"\n",
"\n",
"\n",
"otto = turtle.Turtle()\n",
"tiled_triangle(otto, 80)\n",
"\n",
"turtle.mainloop()\n",
"turtle.bye()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Aufgabe 6\n",
"Schreiben Sie eine Funktion `tiled_triangle`, die **n Dreiecke übereinander und m Dreiecke nebeneinander** zeichnet. Sie soll vier Argumente `t`, `l`, `n` und `m` erhalten. `t` ist eine Schildkröte, `l`, `n` und `m` Ganzzahlen. Die Funktion soll die Schildkröte nutzen, um `n` gleichseitige Dreiecke mit Seitenlänge `l` übereinander und `m` gleichseitige Dreiecke mit Seitenlänge `l` nebeneinander zu zeichnen. <br>"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import turtle\n",
"\n",
"\n",
"def tiled_triangle(t, length, m, n):\n",
" pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"otto = turtle.Turtle()\n",
"otto = turtle.Turtle()\n",
"tiled_triangle(otto, 80,4,6)\n",
"tiled_triangle(otto, 80, 3, 3)\n",
"\n",
"\n",
"\n",
"turtle.mainloop()\n",
"turtle.mainloop()\n",
"turtle.bye()"
"turtle.bye()"
...
@@ -320,9 +239,8 @@
...
@@ -320,9 +239,8 @@
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {},
"source": [
"source": [
"### Aufgabe 7\n",
"### Aufgabe 5\n",
"Stellen Sie sich vor, sie müssen `tiled_triangle` so verändern, dass die Funktion ein zusätzliches Argument erhält, nämlich die Anzahl der Ecken. (`tiled_triangle(t,l,m,n,ecken)`) Die geometrische Form (bis jetzt das Dreieck) soll also in Zukunft verallgemeinert werden. Die Funktion selbst müssen Sie nicht schreiben. An welchen Stellen könnte es aber Schwierigkeiten in Ihrer jetzigen Funktion geben?\n",
"Stellen Sie sich vor, sie müssen `tiled_triangle` so verändern, dass die Funktion ein zusätzliches Argument erhält, nämlich die Anzahl der Ecken. (`tiled_triangle(t,l,n,m,ecken)`) Die geometrische Form (bis jetzt das Dreieck) soll also in Zukunft verallgemeinert werden. **Die Funktion selbst müssen Sie nicht schreiben.** An welchen Stellen könnte es aber Schwierigkeiten in Ihrer jetzigen Funktion geben?"
"- *Freiwillig*: Versuchen Sie, eine solche Funktion zu implementieren (VORSICHT: Es gibt hierzu noch keine \"schöne\" Lösung!)."
]
]
},
},
{
{
...
@@ -339,17 +257,17 @@
...
@@ -339,17 +257,17 @@
"cell_type": "markdown",
"cell_type": "markdown",
"metadata": {},
"metadata": {},
"source": [
"source": [
"### Aufgabe 8\n",
"### Aufgabe 6\n",
"Überraschen Sie mich. Seien Sie **kreativ** und malen Sie mit turtle, auf was Sie Lust haben :) \n",
"Überraschen Sie mich. Seien Sie **kreativ** und malen Sie mit `turtle`, auf was Sie Lust haben :) \n",
"\n",
"\n",
"Es gibt einige Vorgaben, die im Code enthalten sein müssen:\n",
"Es gibt einige Vorgaben, die im Code enthalten sein müssen:\n",
"- mindestens eine **Schleife**\n",
"- entweder eine **Schleife** oder eine **Rekursion**\n",
"- mindestens eine **if/else-Anweisung**\n",
"- mindestens eine **if/elif/else-Bedingung**\n",
"- der Code muss in mindestens zwei **Funktionen** verkapselt sein. \n",
"- der Code muss in mindestens zwei **Funktionen** verkapselt sein. \n",
"\n",
"\n",
"Kommentieren Sie Ihren Code. Beschreiben Sie, was die Schleifen, if-Anweisungen und Funktionen machen.\n",
"Kommentieren Sie Ihren Code.\n",
"\n",
"\n",
"PS: Entweder schauen Sie in den Notebooks nach, um sich Ideen zu holen, Google kann auch inspieren: \"google python turtle drawings\"."
"PS: Entweder schauen Sie in den Notebooks nach oder Sie nutzen Google, um sich zu inspirieren: `google python turtle drawings`."
]
]
},
},
{
{
...
...
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
# 2. Hausaufgabe
# 2. Hausaufgabe
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 (hausaufgabe2_nachname1_nachname2.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.
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 (hausaufgabe2_nachname1_nachname2.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.
* Geben Sie bitte Ihrem **Notebook einen Namen**, sodass es Ihnen und Ihrem Partner zugeordnet werden kann (z.B. *hausaufgabe2_nachname1_nachname2.ipynb*)
* Geben Sie bitte Ihrem **Notebook einen Namen**, sodass es Ihnen und Ihrem Partner zugeordnet werden kann (z.B. *hausaufgabe2_nachname1_nachname2.ipynb*)
* Für das Aufwärmen sind in den Seminar-Notebooks schon Musterlösungen gegeben, die nur geringfügig angepasst werden müssen. Falls Sie eine davon nutzen, **ändern Sie zumindest die Namen der Argument und Variablen.**
* Fügen Sie außerdem **Kommentare** zu ihrem Code hinzu, mit denen Sie erklären, was die Funktion macht. Dies kann man durch zwei Varianten machen:
* Fügen Sie außerdem **Kommentare** zu ihrem Code hinzu, mit denen Sie erklären, was die Funktion macht (Schleife, Bedingungen, etc. beschreiben). Dies kann man durch zwei Varianten machen:
-`#` --> inline-Kommentare zum Code selbst
-\# --> inline-Kommentare zum Code selbst
-`''' '''` --> Docstrings: Funktionsbeschreibung
- ''' ''' --> Docstrings: Funktionsbeschreibung
* In jedem Codeblock steht ein **Funktionsaufruf**, der die von Ihnen definierte Funktion aufruft. Dies sollte funktionieren (dort kann man auch direkt ablesen, wieviele und welche Argumente benötigt werden). Anfangs können Sie den Aufruf gerne auskommentieren, damit nicht ständig eine Fehlermeldung angezeigt wird.
* Schauen Sie sich das notebook **[FAQ.ipynb](FAQ.ipynb)** an, hier sind turtle-Methoden beschrieben, die Sie in dieser Hausaufgabe nutzen können.
* Schreiben Sie bitte zu jeder definierten Funktion **einen Funktionsaufruf mit eigens definierten *turtle-Objekten* und Parametern**.
* In jedem Codeblock steht eine **Testfunktion**, die am Ende die von Ihnen definierte Funktion aufruft. Dies sollte funktionieren (dort kann man auch direkt ablesen, wieviele und welche Argumente gebraucht werden). Anfangs können Sie den Aufruf gerne auskommentieren, damit nicht immer eine Fehlermeldung angezeigt wird (danach wieder Kommentare entfernen).
* Schreiben Sie bitte zu jeder definierten Funktion einen **Funktionsaufruf mit eigens definierten *turtle-Objekten* und Parametern**.
* Nutzen Sie **Schleifen** in allen Aufgaben, in denen Sie geometrische Figuren zeichnen müssen (Sie haben diese in den Seminaren kennengelernt)!
* Nutzen Sie **Schleifen** in allen Aufgaben, in denen Sie geometrische Figuren zeichnen müssen (Sie haben diese in den Seminaren kennengelernt)!
* Verwenden Sie die von Ihnen **geschriebenen Funktionen aus vorherigen Aufgabenteilen in den Folgeaufgaben**, um Code zu sparen und Fehler zu vermeiden (zum Beispiel die Nutzung der Funktion triangle in den Aufgaben 2-5).
* Verwenden Sie die von Ihnen **geschriebenen Funktionen aus vorherigen Aufgabenteilen in den Folgeaufgaben**, um Code zu sparen und Fehler zu vermeiden (zum Beispiel die Nutzung der Funktion `triangle` aus Aufgabe 1 in den Aufgaben 2-5).
*Sie dürfen natürlich auch andere Funktionen des turtle-Moduls nutzen (siehe https://docs.python.org/3/library/turtle.html).
*Nutzen Sie Funktionen des turtle-Moduls (siehe https://docs.python.org/3/library/turtle.html).
* Bitte geben Sie nur **eine Lösung pro Aufgabe** ab.
* Bitte geben Sie nur **eine Lösung pro Aufgabe** ab.
#um im nächsten Schleifendurchlauf die Linie und die turtle neu zu färben
caro.color(setcolor())
caro.color(setcolor())
turtle.mainloop()
turtle.mainloop()
turtle.bye()
turtle.bye()
```
```
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
### Tipps für die folgenden Aufgaben:
Nutzen Sie die python-Dokumention von `turtle`: https://docs.python.org/3/library/turtle.html. Dort finden Sie alle Funktionen, die Sie anwenden können. Wichtig für die Hausaufgabe sind (neben denen, die Sie schon kennengelernt haben):
-`t.shape('turtle')`: ändert die Gestalt der "Schildkröte" in eine Schildkröte.
- Die Farbe der Schildkröte und der Färbung der Muster wählt man mit `t.color()`.
-```t.begin_fill()
...
t.end_fill()```: Färbt das Muster, was die Schildkröte zwischen den beiden Anweisungen gezeichnet hat, ein.
-`t.stamp()`: Platziert bei Aufruf eine Schildkröte an der Stelle, an der die Schildkröte sich zu diesem Zeitpunkt befindet.
- Mit `t.speed()` können Sie der turtle verschiedene Geschwindigkeiten geben.
%% Cell type:markdown id: tags:
## Aufgaben
## Aufgaben
### Aufgabe 1
### Aufgabe 1
Schreiben Sie eine Funktion `triangle`, die zwei Parameter `t` und `l` erwartet. `t` ist eine Schildkröte, `l` eine Ganzzahl. Die Funktion soll die Schildkröte nutzen, um ein gleichseitiges Dreieck mit Seitenlänge `l` zu zeichnen. Schreiben Sie einen Funktionsaufruf, der `otto` und `40` an `triangle` übergibt und rufen Sie ihr Programm auf.
Schreiben Sie eine Funktion `triangle`, die zwei Parameter `t` und `l` erwartet. `t` ist ein turtle-Objekt, `l` eine Ganzzahl. Die Funktion soll die Schildkröte nutzen, um ein gleichseitiges Dreieck mit Seitenlänge `l` zu zeichnen. Schreiben Sie einen Funktionsaufruf, der `otto` und `40` an `triangle` übergibt und rufen Sie ihr Programm auf.
Vervollständigen Sie ihren Code:
- Färben Sie die Schildkröte in einer Farbe Ihrer Wahl.
- Färben Sie Ihr Dreieck in einer Farbe Ihrer Wahl.
- Platzieren Sie an jeder Ecke Ihres Dreiecks eine Schildkröte.
%% Cell type:code id: tags:
%% Cell type:code id: tags:
```
```
import turtle
import turtle
turtle.colormode(255)
def triangle(t, l):
def triangle(t, length):
pass # löschen Sie diese Zeile, wenn Sie anfangen, die Funktion zu implementieren
pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren
otto = turtle.Turtle()
otto = turtle.Turtle()
triangle(otto, 100)
triangle(otto, 100)
turtle.mainloop()
turtle.mainloop()
turtle.bye()
turtle.bye()
```
```
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
### eingebaute turtle-Methoden:
- Dokumention von python: https://docs.python.org/3/library/turtle.html
- Dort finden Sie alle Funktionen, die Sie auf Ihre Schildkröte anwenden können. Wichtig für die Hausaufgabe sind (neben denen, die Sie schon kennengelernt haben):
-`t.shape('turtle')`: ändert die Gestalt der "Schildkröte" in eine Schildkröte.
- Die Farbe der Schildkröte und der Färbung der Muster wählt man mit `t.color(c)`, wobei `c` eine Zeichenkette ist (z.B. 'red', 'green', etc.)
-`t.begin_fill()` ... `t.end_fill()`: Färbt das Muster, was die Schildkröte zwischen den beiden Anweisungen gezeichnet hat, ein.
-`t.stamp()`: Platziert bei Aufruf eine Schildkröte an der Stelle, an der die Schildkröte sich zu diesem Zeitpunkt befindet.
- Mit `t.speed(x)` können Sie der turtle verschiedene Geschwindigkeiten geben (`x` ist eine Zahl zwischen 1 und 100)
%% Cell type:markdown id: tags:
### Aufgabe 2
### Aufgabe 2
#### a
Schreiben Sie eine Funktion `repeat_triangle`, die `n` gleichseitige Dreiecke nebeneinander zeichnet. Sie soll drei Argumente `t`, `n` und `l` erhalten. `t` ist ein turtle-Objekt, `l` gibt die Seitenlänge der Dreiecke an und `n` die Anzahl der Dreiecke. Die Farbe der Dreiecke soll nicht schwarz sein. In der Funktion `repeat_triangle` soll die Funktion `triangle` aus Aufgabe 1 genutzt werden. <br>
Nutzen Sie die Funktionen, um die Schildkröte in einer Farbe Ihrer Wahl zu färben. Dies können Sie direkt in Ihren Code aus Aufgabe 2 einbauen. Sie können aber auch einen neuen Codeblock erstellen.
#### b
Nutzen Sie die Funktionen, um Ihr Dreieck in einer Farbe Ihrer Wahl zu färben.
#### c
Nutzen Sie die Funktionen, um an jeder Ecke Ihres Dreiecks eine Schildkröte zu platzieren.
%% Cell type:markdown id: tags:
-*freiwillig* : Jedes Dreieck soll eine eigene Farbe haben.
### Aufgabe 3
a) Schreiben Sie eine Funktion `repeat_triangle`, die **vier Dreiecke nebeneinander** zeichnet. Sie soll zwei Argumente `t` und `l` erhalten. `t` ist eine Schildkröte, `l` eine Ganzzahl. Die Funktion soll die Schildkröte nutzen, um die gleichseitigen Dreiecke mit Seitenlänge `l` zu zeichnen. Die Farbe der Dreiecke soll nicht schwarz sein. In der Funktion `repeat_triangle` soll die Funktion `triangle` aus Aufgabe 2 aufgerufen werden. <br>
b) Verändern Sie die Funktion so, dass sie eine variable Anzahl von Dreiecken zeichnen kann, die als Argument übergeben wird.
-*Zusatz* : Jedes Dreieck soll eine eigene Farbe haben.
Eine mögliche Lösung könnte so aussehen (`repeat_triangle(otto, 80, 4)`):
pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren
pass # löschen Sie diese Zeile, wenn Sie anfangen, die Funktion zu implementieren
otto = turtle.Turtle()
otto = turtle.Turtle()
repeat_triangle(otto, 80)
repeat_triangle(otto, 80, 4)
turtle.mainloop()
turtle.bye()
```
%% Cell type:code id: tags:
```
import turtle
# Aufgabe b
def repeat_triangle(t, length, number):
pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren
otto = turtle.Turtle()
repeat_triangle(otto, 100, 6)
turtle.mainloop()
turtle.mainloop()
turtle.bye()
turtle.bye()
```
```
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
### Aufgabe 4
### Aufgabe 3
a) Schreiben Sie eine Funktion `pile_triangle`, die **vier Dreiecke übereinander** zeichnet. Sie soll zwei Argumente `t` und `l` erhalten. `t` ist eine Schildkröte, `l` eine Ganzzahl. Die Funktion soll die Schildkröte nutzen, um die gleichseitigen Dreiecke mit Seitenlänge `l` zu zeichnen. Die Farbe der Dreiecke soll nicht schwarz sein. In der Funktion `pile_triangle` soll die Funktion `triangle` aus Aufgabe 2 aufgerufen werden.
Schreiben Sie eine Funktion `pile_triangle`, die `m` gleichseitige Dreiecke übereinander zeichnet. Sie soll drei Argumente `t`, `l` und `m` erhalten. `t` ist ein turtle-Objekt, `l` gibt die Seitenlänge der Dreiecke an und `m` die Anzahl der Dreiecke. Die Farbe der Dreiecke soll nicht schwarz sein. In der Funktion `pile_triangle` soll die Funktion `triangle` aus Aufgabe 1 genutzt werden.
b) Verändern Sie die Funktion so, dass sie eine variable Anzahl von Dreiecken zeichnen kann, die als Argument übergeben wird.
**Achtung**: Im gleichseitigen Dreieck ist die Höhe des Dreiecks gleich die halbe Seitenlänge multipliziert mit der Wurzel aus Drei.
-*Zusatz* : Jedes Dreieck soll eine eigene Farbe haben.
-*frewillig* : Jedes Dreieck soll eine eigene Farbe haben.
Eine mögliche Lösung könnte so aussehen:
Eine mögliche Lösung könnte so aussehen (`pile_triangle(otto, 80, 4)`):
pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren
pass # löschen Sie diese Zeile, wenn Sie anfangen, die Funktion zu implementieren
otto = turtle.Turtle()
pile_triangle(otto, 80)
turtle.mainloop()
turtle.bye()
```
%% Cell type:code id: tags:
```
import turtle
# Aufgabe b
def pile_triangle(t, length, number):
pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren
otto = turtle.Turtle()
otto = turtle.Turtle()
pile_triangle(otto, 100, 2)
pile_triangle(otto, 80, 4)
turtle.mainloop()
turtle.mainloop()
turtle.bye()
turtle.bye()
```
```
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
### Aufgabe 5
### Aufgabe 4
Schreiben Sie eine Funktion `tiled_triangle`, die **drei Dreiecke übereinander und drei Dreiecke nebeneinander** zeichnet. Sie soll zwei Argumente `t` und `l` erhalten. `t` ist eine Schildkröte, `l` eine Ganzzahl. Die Funktion soll die Schildkröte nutzen, um die gleichseitigen Dreiecke mit Seitenlänge `l` zu zeichnen. Die Farbe der Dreiecke soll nicht schwarz sein. Nutzen Sie dafür Ihre Lösung aus Aufgabe 2 und Aufgabe 3 oder Aufgabe 4. <br>
Schreiben Sie eine Funktion `tiled_triangle`, die `n` gleicheitige Dreiecke nebeneinander und `m` gleichseitige Dreiecke übereinander zeichnet. Sie soll vier Argumente `t`, `l`, `n` und `m` erhalten. `t` ist ein turtle-Objekt, `l` gibt die Seitenlänge der Dreiecke an, `n` die Anzahl der nebeneinanderliegenden Dreiecke und `m` die Anzahl der übereinanderliegenden Dreiecke. Die Farbe der Dreiecke soll nicht schwarz sein. Nutzen Sie dafür Ihre Lösung aus Aufgabe Aufgabe 3 **oder** Aufgabe 4. <br>
-*Zusatz* : Jedes Dreieck soll eine eigene Farbe haben.
-*freiwillig* : Jedes Dreieck soll eine eigene Farbe haben.
-*Zusatz* : Färben Sie auch die Zwischenräume, die hier entstehen
-*freiwillig* : Färben Sie auch die Zwischenräume, die hier entstehen
- Eine mögliche Lösung könnte so aussehen:
- Eine mögliche Lösung könnte so aussehen (`tiled_triangle(otto, 80, 3, 3)`):
pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren
pass # löschen Sie diese Zeile, wenn Sie anfangen, die Funktion zu implementieren
otto = turtle.Turtle()
tiled_triangle(otto, 80)
turtle.mainloop()
turtle.bye()
```
%% Cell type:markdown id: tags:
### Aufgabe 6
Schreiben Sie eine Funktion `tiled_triangle`, die **n Dreiecke übereinander und m Dreiecke nebeneinander** zeichnet. Sie soll vier Argumente `t`, `l`, `n` und `m` erhalten. `t` ist eine Schildkröte, `l`, `n` und `m` Ganzzahlen. Die Funktion soll die Schildkröte nutzen, um `n` gleichseitige Dreiecke mit Seitenlänge `l` übereinander und `m` gleichseitige Dreiecke mit Seitenlänge `l` nebeneinander zu zeichnen. <br>
%% Cell type:code id: tags:
```
import turtle
def tiled_triangle(t, length, m, n):
pass # löschen Sie diese Anweisung, wenn Sie anfangen, die Funktion zu implementieren
otto = turtle.Turtle()
otto = turtle.Turtle()
tiled_triangle(otto, 80,4,6)
tiled_triangle(otto, 80, 3, 3)
turtle.mainloop()
turtle.mainloop()
turtle.bye()
turtle.bye()
```
```
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
### Aufgabe 7
### Aufgabe 5
Stellen Sie sich vor, sie müssen `tiled_triangle` so verändern, dass die Funktion ein zusätzliches Argument erhält, nämlich die Anzahl der Ecken. (`tiled_triangle(t,l,m,n,ecken)`) Die geometrische Form (bis jetzt das Dreieck) soll also in Zukunft verallgemeinert werden. Die Funktion selbst müssen Sie nicht schreiben. An welchen Stellen könnte es aber Schwierigkeiten in Ihrer jetzigen Funktion geben?
Stellen Sie sich vor, sie müssen `tiled_triangle` so verändern, dass die Funktion ein zusätzliches Argument erhält, nämlich die Anzahl der Ecken. (`tiled_triangle(t,l,n,m,ecken)`) Die geometrische Form (bis jetzt das Dreieck) soll also in Zukunft verallgemeinert werden. **Die Funktion selbst müssen Sie nicht schreiben.** An welchen Stellen könnte es aber Schwierigkeiten in Ihrer jetzigen Funktion geben?
-*Freiwillig*: Versuchen Sie, eine solche Funktion zu implementieren (VORSICHT: Es gibt hierzu noch keine "schöne" Lösung!).
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
-
-
-
-
-
-
-
-
%% Cell type:markdown id: tags:
%% Cell type:markdown id: tags:
### Aufgabe 8
### Aufgabe 6
Überraschen Sie mich. Seien Sie **kreativ** und malen Sie mit turtle, auf was Sie Lust haben :)
Überraschen Sie mich. Seien Sie **kreativ** und malen Sie mit `turtle`, auf was Sie Lust haben :)
Es gibt einige Vorgaben, die im Code enthalten sein müssen:
Es gibt einige Vorgaben, die im Code enthalten sein müssen:
-mindestens eine **Schleife**
-entweder eine **Schleife** oder eine **Rekursion**
- mindestens eine **if/else-Anweisung**
- mindestens eine **if/elif/else-Bedingung**
- der Code muss in mindestens zwei **Funktionen** verkapselt sein.
- der Code muss in mindestens zwei **Funktionen** verkapselt sein.
Kommentieren Sie Ihren Code. Beschreiben Sie, was die Schleifen, if-Anweisungen und Funktionen machen.
Kommentieren Sie Ihren Code.
PS: Entweder schauen Sie in den Notebooks nach, um sich Ideen zu holen, Google kann auch inspieren: "google python turtle drawings".
PS: Entweder schauen Sie in den Notebooks nach oder Sie nutzen Google, um sich zu inspirieren: `google python turtle drawings`.