Skip to content
Snippets Groups Projects
hausaufgabe2.ipynb 11 KiB
Newer Older
Michel Schwab's avatar
Michel Schwab committed
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. Hausaufgabe\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "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",
Michel Schwab's avatar
Michel Schwab committed
    "\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "* Geben Sie bitte Ihrem **Notebook einen Namen**, sodass es Ihnen und Ihrem Partner zugeordnet werden kann (z.B. *hausaufgabe2_nachname1_nachname2.ipynb*) \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",
schwabmi's avatar
schwabmi committed
    "    - inline-Kommentare (Code kommentieren): `#` \n",
    "    - Docstrings (Beschreibung der Funktion):  `'''     '''`\n",
schwabmi's avatar
schwabmi committed
    "        \n",
schwabmi's avatar
schwabmi committed
    "* 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",
    "* 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",
schwabmi's avatar
schwabmi committed
    "* 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",
    "* Nutzen Sie Funktionen des turtle-Moduls (siehe https://docs.python.org/3/library/turtle.html).\n",
schwabmi's avatar
schwabmi committed
    "* Bitte geben Sie nur **eine Lösung pro Aufgabe** ab.\n",
Michel Schwab's avatar
Michel Schwab committed
    "\n",
    "\n",
    "Wir wünschen viel Erfolg beim Lösen der Aufgaben!"
   ]
  },
schwabmi's avatar
schwabmi committed
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Hilfsfunktion:"
   ]
  },
schwabmi's avatar
schwabmi committed
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from random import randint \n",
    "\n",
    "def setcolor(): \n",
    "    \"\"\"generiert eine zufällige rgb-Farbe\"\"\"\n",
    "    return (randint(0,255),randint(0,255),randint(0,255)) \n"
   ]
  },
schwabmi's avatar
schwabmi committed
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Beispielcode zur Hilfsfunktion\n",
    "import turtle\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "# wichtig ist es, bei Jupyter Notebook die folgende Codezeile anzugeben,\n",
    "# um mit rgb Farbcodes zu arbeiten.\n",
    "# In der Sandbox bitte die Zeile weglassen.\n",
    "\n",
    "turtle.colormode(255)\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "caro = turtle.Turtle()\n",
schwabmi's avatar
schwabmi committed
    "\n",
schwabmi's avatar
schwabmi committed
    "\n",
schwabmi's avatar
schwabmi committed
    "for i in range(4):\n",
schwabmi's avatar
schwabmi committed
    "    caro.fd(100)\n",
    "    caro.lt(90)\n",
schwabmi's avatar
schwabmi committed
    "    caro.color(setcolor())\n",
Michel Schwab's avatar
Michel Schwab committed
    "\n",
    "turtle.mainloop()\n",
    "turtle.bye()"
   ]
  },
schwabmi's avatar
schwabmi committed
  {
   "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."
   ]
  },
Michel Schwab's avatar
Michel Schwab committed
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Aufgaben\n",
    "\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "### Aufgabe 1\n",
schwabmi's avatar
schwabmi committed
    "\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"
Michel Schwab's avatar
Michel Schwab committed
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import turtle\n",
schwabmi's avatar
schwabmi committed
    "turtle.colormode(255)\n",
schwabmi's avatar
schwabmi committed
    "\n",
schwabmi's avatar
schwabmi committed
    "def triangle(t, l):\n",
    "    pass # löschen Sie diese Zeile, wenn Sie anfangen, die Funktion zu implementieren\n",
Michel Schwab's avatar
Michel Schwab committed
    "\n",
    "\n",
    "\n",
    "\n",
    "otto = turtle.Turtle()\n",
Michel Schwab's avatar
Michel Schwab committed
    "triangle(otto, 100)\n",
    "\n",
    "turtle.mainloop()\n",
    "turtle.bye()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
schwabmi's avatar
schwabmi committed
    "### Aufgabe 2\n",
schwabmi's avatar
schwabmi committed
    "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",
schwabmi's avatar
schwabmi committed
    "\n",
schwabmi's avatar
schwabmi committed
    "- *freiwillig* : Jedes Dreieck soll eine eigene Farbe haben.\n",
schwabmi's avatar
schwabmi committed
    "\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "Eine mögliche Lösung könnte so aussehen (`repeat_triangle(otto, 80, 4)`): \n",
schwabmi's avatar
schwabmi committed
    "\n",
    "![repeat](https://box.hu-berlin.de/f/7ceeb79b004e4e9f8ab5/?dl=1)"
Michel Schwab's avatar
Michel Schwab committed
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import turtle\n",
schwabmi's avatar
schwabmi committed
    "turtle.colormode(255)\n",
Michel Schwab's avatar
Michel Schwab committed
    "\n",
schwabmi's avatar
schwabmi committed
    "# Aufgabe a\n",
schwabmi's avatar
schwabmi committed
    "def repeat_triangle(t, l, n):\n",
    "    pass # löschen Sie diese Zeile, wenn Sie anfangen, die Funktion zu implementieren\n",
schwabmi's avatar
schwabmi committed
    "        \n",
Michel Schwab's avatar
Michel Schwab committed
    "\n",
schwabmi's avatar
schwabmi committed
    "    \n",
    "otto = turtle.Turtle()\n",
schwabmi's avatar
schwabmi committed
    "repeat_triangle(otto, 80, 4)\n",
Michel Schwab's avatar
Michel Schwab committed
    "\n",
    "turtle.mainloop()\n",
    "turtle.bye()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
schwabmi's avatar
schwabmi committed
    "### Aufgabe 3\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",
schwabmi's avatar
schwabmi committed
    "\n",
schwabmi's avatar
schwabmi committed
    "**Achtung**: Im gleichseitigen Dreieck ist die Höhe des Dreiecks gleich die halbe Seitenlänge multipliziert mit der Wurzel aus Drei.\n",
schwabmi's avatar
schwabmi committed
    "\n",
schwabmi's avatar
schwabmi committed
    "- *frewillig* : Jedes Dreieck soll eine eigene Farbe haben.\n",
Michel Schwab's avatar
Michel Schwab committed
    "\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "\n",
schwabmi's avatar
schwabmi committed
    "Eine mögliche Lösung könnte so aussehen (`pile_triangle(otto, 80, 4)`):    \n",
Michel Schwab's avatar
Michel Schwab committed
    "![pile](https://box.hu-berlin.de/f/d6c490e2f4f640349f42/?dl=1)"
Michel Schwab's avatar
Michel Schwab committed
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import turtle\n",
schwabmi's avatar
schwabmi committed
    "turtle.colormode(255)\n",
Michel Schwab's avatar
Michel Schwab committed
    "\n",
schwabmi's avatar
schwabmi committed
    "# Aufgabe a\n",
schwabmi's avatar
schwabmi committed
    "def pile_triangle(t, l, m):\n",
    "    pass # löschen Sie diese Zeile, wenn Sie anfangen, die Funktion zu implementieren\n",
schwabmi's avatar
schwabmi committed
    "\n",
    "\n",
    "\n",
    "\n",
    "otto = turtle.Turtle()\n",
schwabmi's avatar
schwabmi committed
    "pile_triangle(otto, 80, 4)\n",
Michel Schwab's avatar
Michel Schwab committed
    "\n",
    "turtle.mainloop()\n",
    "turtle.bye()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
schwabmi's avatar
schwabmi committed
    "### Aufgabe 4\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. Rufen Sie entweder die Funktion `repeat_triangle` aus Aufgabe 2 oder `pile_triangle` in Ihrer Funktion `tiled_triangle` auf.   <br>\n",
schwabmi's avatar
schwabmi committed
    "- *freiwillig* : Jedes Dreieck soll eine eigene Farbe haben.\n",
    "- *freiwillig* : Färben Sie auch die Zwischenräume, die hier entstehen\n",
Michel Schwab's avatar
Michel Schwab committed
    "    \n",
    "\n",
schwabmi's avatar
schwabmi committed
    "Eine mögliche Lösung könnte so aussehen (`tiled_triangle(otto, 80, 3, 3)`):\n",
    "\n",
    "![tiled](https://box.hu-berlin.de/f/811e98f587e040098a83/?dl=1)"
Michel Schwab's avatar
Michel Schwab committed
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import turtle\n",
schwabmi's avatar
schwabmi committed
    "turtle.colormode(255)\n",
Michel Schwab's avatar
Michel Schwab committed
    "\n",
schwabmi's avatar
schwabmi committed
    "def tiled_triangle(t, l, n, m):\n",
    "    pass # löschen Sie diese Zeile, wenn Sie anfangen, die Funktion zu implementieren\n",
Michel Schwab's avatar
Michel Schwab committed
    "\n",
    "\n",
    "\n",
    "otto = turtle.Turtle()\n",
schwabmi's avatar
schwabmi committed
    "tiled_triangle(otto, 80, 3, 3)\n",
Michel Schwab's avatar
Michel Schwab committed
    "\n",
    "turtle.mainloop()\n",
    "turtle.bye()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
schwabmi's avatar
schwabmi committed
    "### 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,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?"
Michel Schwab's avatar
Michel Schwab committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- \n",
    "- \n",
    "- \n",
schwabmi's avatar
schwabmi committed
    " \n"
Michel Schwab's avatar
Michel Schwab committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
schwabmi's avatar
schwabmi committed
    "### Aufgabe 6\n",
    "Überraschen Sie mich. Seien Sie **kreativ** und malen Sie mit `turtle`, auf was Sie Lust haben :) \n",
schwabmi's avatar
schwabmi committed
    "\n",
    "Es gibt einige Vorgaben, die im Code enthalten sein müssen:\n",
schwabmi's avatar
schwabmi committed
    "- entweder eine **Schleife** oder eine **Rekursion**\n",
    "- mindestens eine **if/elif/else-Bedingung**\n",
schwabmi's avatar
schwabmi committed
    "- der Code muss in mindestens zwei **Funktionen** verkapselt sein. \n",
schwabmi's avatar
schwabmi committed
    "\n",
schwabmi's avatar
schwabmi committed
    "Kommentieren Sie Ihren Code.\n",
schwabmi's avatar
schwabmi committed
    "\n",
schwabmi's avatar
schwabmi committed
    "PS: Entweder schauen Sie in den Notebooks nach oder Sie nutzen Google, um sich zu inspirieren: `google python turtle drawings`."
schwabmi's avatar
schwabmi committed
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Hier soll ihr Code stehen"
Michel Schwab's avatar
Michel Schwab committed
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python",
   "pygments_lexer": "ipython3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}