From 1cb55b12bfc56738356f5f2a6b8ba5fe8f0447b9 Mon Sep 17 00:00:00 2001
From: schwabmi <michel.j.schwab@gmail.com>
Date: Fri, 22 Oct 2021 14:52:21 +0200
Subject: [PATCH] added mb changes

---
 notebooks/seminar07.ipynb | 425 ++++++++++++++++++++++++++++++--------
 1 file changed, 335 insertions(+), 90 deletions(-)

diff --git a/notebooks/seminar07.ipynb b/notebooks/seminar07.ipynb
index 13fde6b..f5a98f4 100644
--- a/notebooks/seminar07.ipynb
+++ b/notebooks/seminar07.ipynb
@@ -4,17 +4,26 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# Seminar Problemorientierte Programmierung\n",
-    "\n",
-    "## 7 Iteration\n",
+    "# 7 Iteration\n",
     "\n",
     "[Chapter 7: Iteration](http://greenteapress.com/thinkpython2/html/thinkpython2008.html) \n",
     "\n",
-    "import socket\n",
-    "\n",
-    "Dieses Kapitel handelt von der Iteration - der Möglichkeit, eine Folge von Anweisungen zu wiederholen. Wir haben eine Art der Iteration unter Verwendung der Rekursion schon im [Abschnitt 5.8](seminar05.ipynb#5.8-Rekursion) gesehen und eine andere Art, mit Hilfe der `for`-Schleife, in [Abschnitt 4.2](seminar04.ipynb#4.2-Einfache-Wiederholung). In diesem Kapitel lernen wir eine weitere Variante unter Verwendung der `while`-Anweisung kennen. Aber vorher schauen wir uns noch einmal die Zuweisung eines Wertes an eine Variable an. \n",
-    "\n",
-    "### Ihre Lernziele:\n",
+    "Dieses Kapitel handelt von der Iteration - der Möglichkeit, eine Folge von Anweisungen zu wiederholen. Wir haben eine Art der Iteration unter Verwendung der Rekursion schon im [Abschnitt 5.8](seminar05.ipynb#5.8-Rekursion) gesehen und eine andere Art, mit Hilfe der `for`-Schleife, in [Abschnitt 4.2](seminar04.ipynb#4.2-Einfache-Wiederholung). In diesem Kapitel lernen wir eine weitere Variante unter Verwendung der `while`-Anweisung kennen. Aber vorher schauen wir uns noch einmal die Zuweisung eines Wertes an eine Variable an. "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<h1>Inhaltsverzeichnis<span class=\"tocSkip\"></span></h1>\n",
+    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#7-Iteration\" data-toc-modified-id=\"7-Iteration-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>7 Iteration</a></span></li><li><span><a href=\"#Ihre-Lernziele:\" data-toc-modified-id=\"Ihre-Lernziele:-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Ihre Lernziele:</a></span></li><li><span><a href=\"#Exkurs:-Was-mir-an-Python-gefällt\" data-toc-modified-id=\"Exkurs:-Was-mir-an-Python-gefällt-3\"><span class=\"toc-item-num\">3&nbsp;&nbsp;</span>Exkurs: Was mir an Python gefällt</a></span></li><li><span><a href=\"#Neuzuweisung\" data-toc-modified-id=\"Neuzuweisung-4\"><span class=\"toc-item-num\">4&nbsp;&nbsp;</span>Neuzuweisung</a></span></li><li><span><a href=\"#Variablen-aktualisieren\" data-toc-modified-id=\"Variablen-aktualisieren-5\"><span class=\"toc-item-num\">5&nbsp;&nbsp;</span>Variablen aktualisieren</a></span></li><li><span><a href=\"#Die-while-Anweisung\" data-toc-modified-id=\"Die-while-Anweisung-6\"><span class=\"toc-item-num\">6&nbsp;&nbsp;</span>Die <code>while</code>-Anweisung</a></span></li><li><span><a href=\"#break\" data-toc-modified-id=\"break-7\"><span class=\"toc-item-num\">7&nbsp;&nbsp;</span><code>break</code></a></span></li><li><span><a href=\"#Quadratwurzeln\" data-toc-modified-id=\"Quadratwurzeln-8\"><span class=\"toc-item-num\">8&nbsp;&nbsp;</span>Quadratwurzeln</a></span></li><li><span><a href=\"#Algorithmen\" data-toc-modified-id=\"Algorithmen-9\"><span class=\"toc-item-num\">9&nbsp;&nbsp;</span>Algorithmen</a></span></li><li><span><a href=\"#Debugging\" data-toc-modified-id=\"Debugging-10\"><span class=\"toc-item-num\">10&nbsp;&nbsp;</span>Debugging</a></span></li><li><span><a href=\"#Glossar\" data-toc-modified-id=\"Glossar-11\"><span class=\"toc-item-num\">11&nbsp;&nbsp;</span>Glossar</a></span></li><li><span><a href=\"#7.9-Übung\" data-toc-modified-id=\"7.9-Übung-12\"><span class=\"toc-item-num\">12&nbsp;&nbsp;</span>7.9 Übung</a></span><ul class=\"toc-item\"><li><span><a href=\"#Aufgabe-1\" data-toc-modified-id=\"Aufgabe-1-12.1\"><span class=\"toc-item-num\">12.1&nbsp;&nbsp;</span>Aufgabe 1</a></span></li><li><span><a href=\"#Aufgabe-2\" data-toc-modified-id=\"Aufgabe-2-12.2\"><span class=\"toc-item-num\">12.2&nbsp;&nbsp;</span>Aufgabe 2</a></span></li><li><span><a href=\"#Aufgabe-3\" data-toc-modified-id=\"Aufgabe-3-12.3\"><span class=\"toc-item-num\">12.3&nbsp;&nbsp;</span>Aufgabe 3</a></span></li></ul></li></ul></div>"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Ihre Lernziele:\n",
     "\n",
     "Beschreiben Sie in 2-3 Stichpunkten kurz was Sie im Seminar heute lernen wollen. Klicken Sie dazu doppelt auf diesen Text und bearbeiten Sie dann den Text:\n",
     "\n",
@@ -75,14 +84,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "[Und noch viele weitere schöne Beispiele](https://codegolf.stackexchange.com/questions/15860/)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "### 7.1 Neuzuweisung\n",
+    "## Neuzuweisung\n",
     "\n",
     "Wie Sie vielleicht schon herausgefunden haben, ist es erlaubt, mehr als nur eine Zuweisung an die selbe Variable durchzuführen. Durch eine neue Zuweisung verweist eine existierende Variable auf einen neuen Wert (und nicht mehr auf den alten Wert)."
    ]
@@ -141,7 +143,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### 7.2 Variablen aktualisieren\n",
+    "## Variablen aktualisieren\n",
     "\n",
     "Eine übliche Art der Neuzuweisung ist eine **Aktualisierung** (*update*), bei der der neue Wert vom alten Wert abhängt:\n",
     "\n",
@@ -188,14 +190,14 @@
     "\n",
     "![Every time you read this mouseover, toggle between interpreting nested footnotes as footnotes on footnotes and interpreting them as exponents (minus one, modulo 6, plus 1).](https://imgs.xkcd.com/comics/footnote_labyrinths_2x.png)\n",
     "\n",
-    "[Footnote Labyrinths](https://xkcd.com/1208/), Randall Munroe"
+    "([Footnote Labyrinths](https://xkcd.com/1208/), Randall Munroe) [Erklärung des Comics](https://www.explainxkcd.com/wiki/index.php/1208:_Footnote_Labyrinths) falls Sie mehr wissen möchten."
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### 7.3 Die `while`-Anweisung\n",
+    "## Die `while`-Anweisung\n",
     "\n",
     "Computer werden häufig zur Automatisierung sich wiederholender Aufgaben genutzt. Identische oder ähnliche Aufgaben zu wiederholen ohne dabei Fehler zu machen, ist etwas was Computer sehr gut können und Menschen eher schlecht. In einem Computerprogramm wird die Wiederholung auch als **Iteration** bezeichnet. \n",
     "\n",
@@ -289,9 +291,9 @@
     "\n",
     "![The Strong Collatz Conjecture states that this holds for any set of obsessively-hand-applied rules.](https://imgs.xkcd.com/comics/collatz_conjecture.png)\n",
     "\n",
-    "[Collatz Conjecture](https://xkcd.com/710/), Randall Munroe\n",
+    "([Collatz Conjecture](https://xkcd.com/710/), Randall Munroe) [Erklärung des Comics](https://www.explainxkcd.com/wiki/index.php/710:_Collatz_Conjecture) falls Sie mehr wissen möchten.\n",
     "\n",
-    "Schreiben Sie als Ãœbung die Funktion `print_n` aus  [Abschnitt 5.8](seminar05.ipynb#5.8-Rekursion) so um, dass eine Schleife statt der Rekursion verwendet wird:"
+    "Schreiben Sie als Ãœbung die Funktion `print_n` aus  [Abschnitt 5.11](seminar05.ipynb#5.11-Rekursion) so um, dass eine Schleife statt der Rekursion verwendet wird:"
    ]
   },
   {
@@ -312,7 +314,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### 7.4 `break`\n",
+    "## `break`\n",
     "\n",
     "Manchmal wissen wir nicht, dass es Zeit wird eine Schleife zu beenden, bis wir den Schleifenrumpf bereits zur Hälfte ausgeführt haben. In einem solchen Fall können wir die `break`-Anweisung nutzen, um eine Schleife zu verlassen.\n",
     "\n",
@@ -349,11 +351,11 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### 7.5 Quadratwurzeln\n",
+    "## Quadratwurzeln\n",
     "\n",
     "![They could say \"the connection is probably lost,\" but it's more fun to do naive time-averaging to give you hope that if you wait around for 1,163 hours, it will finally finish.](https://imgs.xkcd.com/comics/estimation.png)\n",
     "\n",
-    "[Estimation](https://xkcd.com/612/), Randall Munroe\n",
+    "([Estimation](https://xkcd.com/612/), Randall Munroe) [Erklärung des Comics](explainxkcd.com/wiki/index.php/612:_Estimation) falls Sie mehr wissen möchten.\n",
     "\n",
     "Schleifen werden häufig in Programmen genutzt, die numerische Werte berechnen, indem sie mit einem Näherungswert beginnen und diesen iterativ verbessern. \n",
     "\n",
@@ -498,11 +500,11 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### 7.6 Algorithmen\n",
+    "## Algorithmen\n",
     "\n",
     "![There was a schism in 2007, when a sect advocating OpenOffice created a fork of Sunday.xlsx and maintained it independently for several months. The efforts to reconcile the conflicting schedules led to the reinvention, within the cells of the spreadsheet, of modern version control.](https://imgs.xkcd.com/comics/algorithms.png)\n",
     "\n",
-    "[Algorithms](https://xkcd.com/1667/), Randall Munroe\n",
+    "([Algorithms](https://xkcd.com/1667/), Randall Munroe) [Erklärung des Comics](https://www.explainxkcd.com/wiki/index.php/1667:_Algorithms) falls Sie mehr wissen möchten.\n",
     "\n",
     "Das Newton-Verfahren ist ein klassisches Beispiel für einen **Algorithmus**: ein Prozess zur Lösung einer bestimmten Problemklasse (in diesem Fall die Berechnung von Quadratwurzeln). \n",
     "\n",
@@ -521,7 +523,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### 7.7 Debugging\n",
+    "## Debugging\n",
     "\n",
     "Sobald Sie größere Programme schreiben werden Sie bemerken, dass Sie mehr Zeit mit Debuggen verbringen. Mehr Programmcode bedeutet halt auch, dass es mehr Möglichkeiten gibt, einen Fehler zu machen und mehr Stellen, an denen sich \"Bugs\" verstecken können.\n",
     "\n",
@@ -540,7 +542,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### 7.8 Glossar\n",
+    "## Glossar\n",
     "\n",
     "Legen wir uns eine Liste mit den wichtigsten Begriffen an, die wir im Kapitel 7 gelernt haben:\n",
     "\n",
@@ -560,11 +562,65 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "### 7.9 Ãœbung\n",
-    "\n",
-    "#### Aufgabe 1\n",
-    "\n",
-    "Kopieren Sie die Schleife aus [Abschnitt 7.5](#7.5-Quadratwurzeln) und verkapseln Sie sie in eine Funktion `mysqrt` die einen Parameter `a` erwartet, einen sinnvollen Wert für `x` wählt und eine Näherung für die Quadratwurzel von `a` zurückliefert."
+    "## 7.9 Ãœbung\n",
+    "\n",
+    "### Aufgabe 1\n",
+    "\n",
+    "Kopieren Sie die Schleife aus [Abschnitt 7.8](#7.8-Quadratwurzeln) und verkapseln Sie sie in eine Funktion `mysqrt` die einen Parameter `a` erwartet, einen sinnvollen Wert für `x` wählt und eine Näherung für die Quadratwurzel von `a` zurückliefert.\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",
+    "Schreiben Sie den Kopf der Funktion, überlegen Sie welche Argumente der Funktion übergeben müssen.\n",
+    "  \n",
+    "  </div>       \n",
+    "</details>   \n",
+    "   \n",
+    "  \n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">2. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "      \n",
+    "Kopieren Sie, wie oben bereits erwähnt die Funktion. \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",
+    "Wenn Sie das Notebook aufmerksam gelesen haben, werden Sie sich an einige Verbesserungen erinnern, die wir vornehmen müssen.\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 bedeutet, dass Sie den Betrag der Differenz zwischen `x` und `y` berechnen müssen. Anschließend vergleichen Sie, ob dieser Wert kleiner als `epsilon` ist. Nutzen Sie dazu die Betragsfunktion `abs()`. Lösung: $abs(x-y)<epsilon$ wobei Sie einen passenden Wert für `epsilon` wählen müssen (z.B. 0.001). Fügen Sie diese Änderungen in Ihren Code ein.     \n",
+    "  </div>       \n",
+    "</details>\n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">5. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "      \n",
+    "Wählen Sie einen geeigneten Wert für `x` in Abhängigkeit von `a`. Dies können Sie durch Ausprobieren ermitteln. Stellen Sie sicher, dass `x` ungleich null ist.      \n",
+    "\n",
+    "    </div>       \n",
+    "</details>\n",
+    "\n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">6. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "      \n",
+    "Vergessen Sie nicht Ihre Funktion mit Werten zu testen, die Sie überprüfen können.\n",
+    "      \n",
+    "  </div>       \n",
+    "</details>\n"
    ]
   },
   {
@@ -601,7 +657,80 @@
     "9.0 3.0           3.0           0.0\n",
     "```\n",
     "\n",
-    "Dabei ist die erste Spalte eine Zahl, `a`; die zweite Spalte ist die Quadratwurzel von `a` die mit `mysqrt` berechnet wurde; die dritte Spalte ist die Quadratwurzel, die mittels `math.sqrt` berechnet wurde; und die vierte Spalte ist der Absolutbetrag des Unterschieds zwischen den beiden Werten."
+    "Dabei ist die erste Spalte eine Zahl, `a`; die zweite Spalte ist die Quadratwurzel von `a` die mit `mysqrt` berechnet wurde; die dritte Spalte ist die Quadratwurzel, die mittels `math.sqrt` berechnet wurde; und die vierte Spalte ist der Absolutbetrag des Unterschieds zwischen den beiden Werten.   \n",
+    "\n",
+    "Wenn ihre Funktion funktiniert, können Sie anfange, die Tabelle zu implementieren. Dazu können Sie folgendermaßen anfangen:\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",
+    "Der Kopf der Funktion ist bereits gegeben, aber Sie können bereits den Tabellenkopf schreiben. Dafür schreiben Sie eine `print`-Anweisung für jede Zeile des Tabellenkopfs.\n",
+    "      \n",
+    "  </div>       \n",
+    "</details>   \n",
+    "   \n",
+    "  \n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">2. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "      \n",
+    "Als nächstes müssen Sie entscheiden ob Sie die Tabelle von oben ausgeben wollen, dann muss `a` die Werte 1 bis 9 annehmen - Sie brauchen eine Schleife - oder ob Sie die Tabelle für ein beliebiges `a` berechnen wollen, dann müssen Sie User-Input einrichten.\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",
+    "Wir planen für die Schleife, für diesen Fall können Sie eine `While` oder eine `For` Schleife verwenden. \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",
+    "Prüfen Sie zunächst, ob beide Funktionen (`mysqrt()` und `math.sqrt()` Werte zurückgeben. Trifft dies auf Ihre Funktion zu? Wenn nicht, nutzen Sie die return-Anweisung an der richtigen Stelle in `mysqrt()`.  \n",
+    "      \n",
+    "  </div>       \n",
+    "</details>\n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">5. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "      \n",
+    "Die Ergebnisse der Funktionen müssen in Variablen gespeichert werden.\n",
+    "      \n",
+    "  </div>       \n",
+    "</details>\n",
+    "\n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">6. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "      \n",
+    "Berechnen Sie die Differenz zwischen `mysqrt()` und `math.sqrt()` und speichern Sie diese in einer neuen Variablen.\n",
+    "  </div>       \n",
+    "</details>\n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">7. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "\n",
+    "\n",
+    "Fügen Sie die `print`-Anweisung hinzu, die die einzelnen Tabellenzeilen ausgibt.\n",
+    "\n",
+    "  </div>       \n",
+    "</details>\n",
+    "\n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">8. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "      \n",
+    "Vergessen Sie nicht den Wert für `a` bei jedem Schleifendurchlauf zu erhöhen. \n",
+    "  </div>       \n",
+    "</details>"
    ]
   },
   {
@@ -622,21 +751,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "![If only we&#39;d chosen 1944-12-02 08:45:52 as the Unix epoch, we could&#39;ve combined two doomsday scenarios into one and added a really boring scene to that Roland Emmerich movie.](https://imgs.xkcd.com/comics/2038.png)\n",
-    "\n",
-    "([2038](https://xkcd.com/607/), Randall Munroe)\n",
-    "\n",
-    "\n",
     "![Spoiler Alert](https://imgs.xkcd.com/comics/spoiler_alert.png)\n",
-    "([Spoiler Alert](https://xkcd.com/109/), Randall Munroe)\n",
-    "\n",
     "\n",
-    "1. Schreiben Sie den Kopf der Funktion, überlegen Sie welche Argumente der Funktion übergeben müssen.\n",
-    "2. Kopieren Sie, wie oben bereits erwähnt die Funktion. \n",
-    "3. Wenn Sie das Notebook aufmerksam gelesen haben, werden Sie sich an einige Verbesserungen erinnern, die wir vornehmen müssen. \n",
-    "4. Vor allem heißt das x und y mit der `abs()`-Funktion zu vergleichen, also zu schreiben `abs(x-y)<epsilon` wobei Sie einen Wert für epsilon wählen müssen, der klein genug ist. Fügen Sie diese Änderungen in Ihren Code ein.\n",
-    "5. Wählen Sie einen geeigneten Wert für x in Abhängigkeit von a. Da fast jeder Wert funktioniert, können Sie ihn frei wählen, sie müssen lediglich sicherstellen, dass x ungleich null ist.\n",
-    "6. Vergessen Sie nicht Ihre Funktion mit Werten zu testen, die Sie überprüfen können. \n"
+    "([Spoiler Alert](https://xkcd.com/109/), Randall Munroe) [Erklärung des Comics](https://www.explainxkcd.com/wiki/index.php/109:_Spoiler_Alert) falls Sie mehr erfahren wollen.\n"
    ]
   },
   {
@@ -663,24 +780,6 @@
     "mysqrt(25)"
    ]
   },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Wenn die von Ihnen geschriebene Funktion richtig funktiniert, können Sie an der gewünschten Vergleichstabelle arbeiten. Dazu können Sie folgendermaßen ansetzen:\n",
-    "\n",
-    "\n",
-    "1. Der Kopf der Funktion ist bereits gegeben, aber Sie können bereits den Tabellenkopf schreiben. Dafür schreiben Sie eine `print`-Anweisung für jede Zeile des Tabellenkopfs.\n",
-    "2. Als nächstes müssen Sie entscheiden ob Sie die Tabelle von oben ausgeben wollen, dann muss a die Werte 1 bis 9 annehmen - Sie brauchen eine Schleife - oder ob Sie die Tabelle für ein beliebiges a berechnen wollen, dann müssen Sie User-Input einrichten.\n",
-    "3. Wir planen für die Schleife, für diesen Fall können Sie eine `While` oder eine `For` Schleife verwenden.  \n",
-    "4. Prüfen Sie zunächst ob beide Funktionen Werte zurückgeben. Dies ist für die Pythonfunktion der Fall, trifft es auch auf Ihre Funktion zu? Wenn nicht ergänzen Sie die `return`-Anweisung an geeigneter Stelle.\n",
-    "5. Weißen Sie die beiden Funktionen und damit ihre Rückgabewerte neuen Funktionen zu. \n",
-    "6. Berechnen Sie die Differenz zwischen `mysqrt()` und `math.sqrt()` und speichern Sie diese in einer neuen Variablen\n",
-    "7. Für ein nachvollziehbares `a` testen Sie jetzt einmal die 3 Ausgaben. \n",
-    "8. Fügen Sie die `print` Anweisung hinzu, die die einzelnen Tabellenzeilen ausgibt. \n",
-    "9. Vergessen Sie nicht den Wert für a bei jedem Schleifendurchlauf zu erhöhen. \n"
-   ]
-  },
   {
    "cell_type": "code",
    "execution_count": null,
@@ -751,7 +850,70 @@
    "source": [
     "Schreiben Sie eine Funktion `eval_loop`, die den Nutzer iterativ bittet etwas einzugeben, die eingegebene Zeichenkette mittels `eval` ausführt und schließlich das Ergebnis ausgibt. \n",
     "\n",
-    "Die Funktion sollte so lange laufen, bis der Nutzer `fertig` eingibt und dann sollte der Rückgabewert des letzten ausgeführten Ausdrucks ausgegeben werden."
+    "Die Funktion sollte so lange laufen, bis der Nutzer `fertig` eingibt und dann sollte der Rückgabewert des letzten ausgeführten Ausdrucks ausgegeben werden.\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",
+    "Schreiben Sie den Funktionskopf.\n",
+    "      \n",
+    "  </div>       \n",
+    "</details>   \n",
+    "   \n",
+    "  \n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">2. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "      \n",
+    "Richten Sie die Nutzereingabe ein und weisen Sie diese einer Variablen zu, damit wir den Input weiter verwenden können.\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",
+    "Da der Nutzer mehrfach eine Eingabe machen soll, muss diese Zuweisung innerhalb einer Schleife stattfinden.      \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",
+    "Überlegen Sie, welche Schleife Sie verwenden müssen, was ist hier die Abbruchbedingung? Ist Sie positiv oder negativ?\n",
+    "      \n",
+    "  </div>       \n",
+    "</details>\n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">5. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "      \n",
+    "Wenn `fertig` eingegeben wird, soll der letzte berechnete Wert zurückgegeben werden, daher muss dieser in einer Variablen temporär gespeichert werden.\n",
+    "      \n",
+    "  </div>       \n",
+    "</details>\n",
+    "\n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">6. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "      \n",
+    "Wenn nicht `fertig` eingegeben wird, wird der neue Ausdruck evaluiert und die temporären Variable wird mit dem neuen Ergebnis überschrieben.\n",
+    "      \n",
+    "  </div>       \n",
+    "</details>\n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">7. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "\n",
+    "Vergessen Sie nicht, dass die temporäre Variable initialisiert werden muss, bevor wir sie zum Speichern von Werten verwenden können.\n",
+    "      \n",
+    "  </div>       \n",
+    "</details>"
    ]
   },
   {
@@ -768,15 +930,8 @@
    "metadata": {},
    "source": [
     "![Spoiler Alert](https://imgs.xkcd.com/comics/spoiler_alert.png)\n",
-    "([Spoiler Alert](https://xkcd.com/109/), Randall Munroe)\n",
     "\n",
-    "1. Schreiben Sie den Funktionskopf\n",
-    "2. Richten Sie die Nutzereingabe ein und weißen Sie diese einer Variablen zu, damit wir den Input weiter verwenden können. \n",
-    "3. Da der Nutzer mehrfach eine Eingabe machen soll, muss diese Zuweißung innerhalb einer Schleife stattfinden.\n",
-    "4. Überlegen Sie welche Schleife Sie verwenden müssen, was ist hier Ihre Abbruchbedingung? Ist Sie positiv oder negativ?\n",
-    "5. Wenn `fertig` eingegeben wird, soll der letzte berechnete Wert zurückgegeben werden, daher muss dieser in einer Variablen temporär gespeichert werden.\n",
-    "6. Wenn nicht `fertig` eingegeben wird, wird der neue Ausdruck evaluiert und der Wert der zuvor in der temporären Variablen gespeichert war überschrieben. \n",
-    "7. Vergessen Sie nicht, dass die temporäre Variable initialisiert werden muss, bevor wir sie zum Speichern von Werten verwenden können. \n"
+    "([Spoiler Alert](https://xkcd.com/109/), Randall Munroe) [Erklärung des Comics](https://www.explainxkcd.com/wiki/index.php/109:_Spoiler_Alert) falls Sie mehr erfahren wollen."
    ]
   },
   {
@@ -815,7 +970,107 @@
     "\n",
     "(Eventuell ist die Formel [in der Original-Aufgabenstellung](http://greenteapress.com/thinkpython2/html/thinkpython2008.html#hevea_default541) besser zu lesen.)\n",
     "\n",
-    "Schreiben Sie eine Funktion `estimate_pi` die diese Formel nutzt, um einen Näherungswert für $\\pi$ zu berechnen und zurückzugeben. Sie sollten eine `while`-Schleife nutzen, um die Terme der Summe zu solange berechnen, bis der letzte Term kleiner ist als `1e-15` (was die Python-Notation für $10^{-15}$ ist). Sie können Ihr Ergebnis prüfen, indem Sie es mit `math.pi` vergleichen.\n"
+    "Schreiben Sie eine Funktion `estimate_pi` die diese Formel nutzt, um einen Näherungswert für $\\pi$ zu berechnen und zurückzugeben. Sie sollten eine `while`-Schleife nutzen, um die Terme der Summe zu solange berechnen, bis der letzte Term kleiner ist als `1e-15` (was die Python-Notation für $10^{-15}$ ist). Sie können Ihr Ergebnis prüfen, indem Sie es mit `math.pi` vergleichen.\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",
+    "     Auf den ersten Blick sieht diese Formel sehr überwältigend aus. Machen Sie sich keine Sorgen, wir können die Formel in ihre einzelnen Bestandteile aufteilen und diese einzeln berechnen.\n",
+    "      \n",
+    "  </div>       \n",
+    "</details>   \n",
+    "   \n",
+    "  \n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">2. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "      \n",
+    "Wie Sie sehen können wird in der Formel zweimal eine Fakultät berechnet. Dafür können Sie die Funktion, die Sie in Seminar 6 geschrieben haben, verwenden.\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",
+    "Berechnen Sie zuerst die Konstante vor dem Summenzeichen und speichern Sie den Wert in einer Variablen. In unserer Lösung wird diese Variable `faktor` genannt.\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 while-Schleife ersetzt das Summenzeichen. Überlegen Sie sich wie Sie die Bedingung formulieren müssen. Die Abbruchbedingung lautet $abs(term)<1e-15$\n",
+    "     \n",
+    "  </div>       \n",
+    "</details>\n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">5. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "      \n",
+    "Das Summenzeichen berechnet und addiert Werte von `k=0` bis unendlich. `k` muss also in jedem Schleifendurchlauf um 1 erhöht werden.   \n",
+    "  </div>       \n",
+    "</details>\n",
+    "\n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">6. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "      \n",
+    "Alles was hinter dem Summenzeichen steht, wird in der Schleife berechnet.\n",
+    "      \n",
+    "  </div>       \n",
+    "</details>\n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">7. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "\n",
+    "In jedem Durchgang der Schleife werden Zähler (hier `num`) und Nenner (hier `den`) einzeln berechnet und je einer Variablen zugewiesen.\n",
+    "      \n",
+    "  </div>       \n",
+    "</details>\n",
+    "\n",
+    "\n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">8. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "     \n",
+    "Anschließend wird der Wert des Terms im aktuellen Schleifendurchlauf berechnet, indem die Konstante vor dem Summenzeichen mit dem Bruch hinter dem Summenzeichen multipliziert wird.\n",
+    "      \n",
+    "  </div>       \n",
+    "</details>   \n",
+    "   \n",
+    "  \n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">9. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "      \n",
+    "Dieser Wert wird in jedem Schleifendurchlauf auf das Gesamtergebnis hinzuaddiert.\n",
+    "      \n",
+    "  </div>       \n",
+    "</details>  \n",
+    "  \n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">10. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "      \n",
+    "Danach wird geprüft, ob die Abbruchbedingung erfüllt ist.\n",
+    "      \n",
+    "  </div>       \n",
+    "</details>\n",
+    "\n",
+    "<details>\n",
+    "    <summary type=\"button\" class=\"btn btn-primary\">11. Hinweis</summary>\n",
+    "  <div class=\"alert alert-info\" role=\"alert\">\n",
+    "     \n",
+    "Da diese Formel 1/$\\pi$ berechnet, muss 1/ergebnis gerechnet werden um $\\pi$ zu erhalten. \n",
+    "      \n",
+    "  </div>       \n",
+    "</details>"
    ]
   },
   {
@@ -823,27 +1078,17 @@
    "execution_count": null,
    "metadata": {},
    "outputs": [],
-   "source": []
+   "source": [
+    "# Implementieren Sie hier die Funktion estimate_pi"
+   ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
     "![Spoiler Alert](https://imgs.xkcd.com/comics/spoiler_alert.png)\n",
-    "([Spoiler Alert](https://xkcd.com/109/), Randall Munroe)\n",
-    "\n",
-    "1. Auf den ersten Blick sieht diese Formel sehr überwältigend aus. Machen Sie sich keine Sorgen, wir können die Formel in ihre einzelnen Bestandteile aufsplitten und diese einzeln berechnen.\n",
-    "2. Wie Sie sehen können wird in der Formel zweimal eine Fakultät berechnet. Dafür können Sie die Funktion, die Sie in Seminar 6 geschrieben verwenden. \n",
-    "3. Berechnen Sie zuerst die Konstante vor dem Summenzeichen und speichern Sie den Wert in einer Variablen. In unserer Lösung wird diesè Variable `faktor` genannt. \n",
-    "4. Die `while`-Schleife ersetzt das Summenzeichen. Überlegen Sie sich wie Sie die Bedingung formulieren müssen. Die Abbruchbedingung ist `abs(term)<1e-15` \n",
-    "5. Das Summenzeichen berechnet Werte für k=0 aufwärts (unedlich anstrebend), also muss die Schleife k hochzählen. \n",
-    "6. Alles was hinter dem Summenzeichen steht wird in der Schleife berechnet.\n",
-    "7. In jedem Durchgang der Schleife werden Zähler (hier `num`) und Nenner (hier `den`) einzeln berechnet und je einer Variablen zugewiesen\n",
-    "8. Anschließend wird der Wert des Terms im aktuellen Schleifendurchlauf berechnet, indem die Konstante vor dem Summenzeichen  mit dem Bruch hinter dem Summenzeichen multipliziert wird. \n",
-    "9. Dieser Wert wird in jedem Schleifendurchlauf auf das Gesamtergebnis addiert\n",
-    "10. Danach wird geprüft ob die Abbruchbedingung erfüllt ist. \n",
-    "11. Da diese Formel 1/$\\pi$ berechnet, muss 1/ergebnis gerechnet werden um $\\pi$ zu erhalten. \n",
-    "\n"
+    "\n",
+    "([Spoiler Alert](https://xkcd.com/109/), Randall Munroe) [Erklärung des Comics](https://www.explainxkcd.com/wiki/index.php/109:_Spoiler_Alert) falls Sie mehr erfahren wollen."
    ]
   },
   {
-- 
GitLab