From d8f4d5128068f5c3b223c9f807147dd3f31adcf7 Mon Sep 17 00:00:00 2001
From: schwabmi <michel.j.schwab@gmail.com>
Date: Fri, 7 Aug 2020 14:30:34 +0200
Subject: [PATCH] updated seminar01-03 and ha1, mostly added hints and
 explanations

---
 notebooks/hausaufgabe1.ipynb |  74 ++++++++++++++++----
 notebooks/seminar01.ipynb    |  12 +++-
 notebooks/seminar02.ipynb    | 127 +++++++++++++++++++++++++++++++++++
 notebooks/seminar03.ipynb    |  10 +++
 4 files changed, 208 insertions(+), 15 deletions(-)

diff --git a/notebooks/hausaufgabe1.ipynb b/notebooks/hausaufgabe1.ipynb
index 67c8f71..6cd73c1 100644
--- a/notebooks/hausaufgabe1.ipynb
+++ b/notebooks/hausaufgabe1.ipynb
@@ -1,5 +1,13 @@
 {
  "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
+    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Aufgabe-1\" data-toc-modified-id=\"Aufgabe-1-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Aufgabe 1</a></span></li><li><span><a href=\"#Aufgabe-2\" data-toc-modified-id=\"Aufgabe-2-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Aufgabe 2</a></span></li><li><span><a href=\"#Aufgabe-3\" data-toc-modified-id=\"Aufgabe-3-3\"><span class=\"toc-item-num\">3&nbsp;&nbsp;</span>Aufgabe 3</a></span></li></ul></div>"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -10,6 +18,10 @@
     "\n",
     "Bitte ändern Sie den Dateinamen ihrer Hausaufgabe zu: **hausaufgabe1_nachnamePartner1_nachnamePartner2.ipynb**\n",
     "\n",
+    "z.B. hausaufgabe1_schwab_jaeschke.ipynb\n",
+    "\n",
+    "Das können Sie einfach machen, indem Sie **jetzt** oben links auf `hausaufgabe1` klicken und den neuen Namen eingeben.\n",
+    "\n",
     "Nutzen Sie das Wissen aus den bisher bearbeiteten Notebooks (1-3). \n",
     "\n",
     "Wir wünschen viel Erfolg beim Lösen der Aufgaben!\n",
@@ -23,7 +35,11 @@
    "source": [
     "## Aufgabe 1\n",
     "\n",
-    "Was gibt jede der folgenden Anweisungen aus? Erklären Sie jeweils die Ausgabe. "
+    "Was gibt jede der folgenden Anweisungen aus? Erklären Sie jeweils die Ausgabe. \n",
+    "Welche Funktionen werden genutzt und was machen diese Funktionen?\n",
+    "Entweder Sie nutzen Kommentare (mit Hilfe von der Raute #) im Code oder Sie schreiben die Antworten in eine extra Markdown Zeile.\n",
+    "\n",
+    "Falls Sie Kommentare nutzen, nehmen Sie mehrere Zeilen pro Anweisung, damit ihre Antwort in die Breite der Codezelle passt und man nicht hin- und herscrollen muss. (Sie finden heraus, was ich meine, wenn es passiert ;) )\n"
    ]
   },
   {
@@ -50,10 +66,13 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
+    "**Tipp**: Wichtig bei den folgenden Aufgaben ist der Umgang mit Zeichenketten und der `print`-Funktion. Das haben Sie in den seminar-Notebooks schon gelernt. Gehen Sie diese zu Beginn der Hausaufgabe noch einmal durch und achten Sie, mit welchen Operatoren man Zeichenketten zusammenfügen und  manipulieren kann.\n",
+    "\n",
     "## Aufgabe 2\n",
     "\n",
     "Ihre Aufgabe ist es, eine Funktion `boxprint` zu implementieren, die eine als Argument übergegebene Zeichenkette innerhalb einer Box ausgibt. Die horizontalen Linien der Box sollen durch `-` erzeugt werden, die vertikalen Linien durch `|` und die Ecken durch `+`. Zwischen der Zeichenkette und dem linken und rechten Rand der Box soll jeweils genau ein Leerzeichen stehen. \n",
     "\n",
+    "\n",
     "Beispiel: Bei Ãœbergabe des Arguments `Hello World!` soll die Funktion folgende Ausgabe erzeugen:"
    ]
   },
@@ -76,7 +95,8 @@
     "\n",
     "- \n",
     "- \n",
-    "- \n"
+    "- \n",
+    "\n"
    ]
   },
   {
@@ -85,8 +105,9 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# Implementieren Sie hier ihre Funktion boxprint\n",
-    "    \n"
+    "def boxprint(zeichenkette):\n",
+    "    '''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen.\n",
+    "    '''    \n"
    ]
   },
   {
@@ -142,6 +163,8 @@
     "\n",
     "Nutzen Sie dazu Ihre bei der Programmierung von `boxprint` gesammelte Erfahrung. Auch hier soll das Argument eine variable Länge aufweisen können, die \"Sprechbox\" soll sich anpassen.\n",
     "\n",
+    "Tipp: Man kann den Stegosaurus im Editiermodus kopieren, Sie müssen nicht jedes Zeichen selbst abtippen.\n",
+    "\n",
     "\n",
     "Freiwillige Erweiterung für Fortgeschrittene: Erweitern Sie die Funktion um ein Argument, mit dem eine maximale Breite (Anzahl Zeichen) übergeben werden kann, so dass die ausgegebene Box nicht breiter ist. Implementieren Sie dann die Behandlung von Zeichenketten, die länger als die vorgegebene Breite sind. Sie haben zwei Möglichkeiten: a) die Zeichenkette abschneiden, b) die Zeichenkette umbrechen. Entscheiden Sie sich für eine der beiden Varianten. Hinweis: auf die ersten `k` Zeichen einer  Zeichenkette `s` können Sie mittels `s[0:k]` zugreifen. Analog können Sie auf das 2. bis 4. Zeichen mittels `s[1:4]` zugreifen, usw."
    ]
@@ -152,7 +175,10 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# Implementieren Sie hier ihre Funktion stegosay\n",
+    "def stegosay():\n",
+    "    '''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen. \n",
+    "    Das/Die Argument/e müssen Sie sich dieses Mal selbst überlegen.\n",
+    "    '''    \n",
     "\n"
    ]
   },
@@ -211,7 +237,7 @@
     "         *\n",
     "```\n",
     "Hinweise:\n",
-    "- Sie können die Aufgabe auch ohne eine Schleife lösen, aber schöner ist es mit einer Schleife. Sie kennen die Syntax und Semantik der `while`-Schleife schon aus der Vorlesung. Sie funktioniert in Python genau so, wie sie für den Pseudocode definiert wurde. \n",
+    "- Sie können die Aufgabe auch ohne eine Schleife lösen, aber **schöner ist es mit einer Schleife**. Sie kennen die Syntax und Semantik der `while`-Schleife schon aus der Vorlesung. Sie funktioniert in Python genau so, wie sie für den Pseudocode definiert wurde. \n",
     "- Sie müssen selbst entscheiden, wieviele Werte Sie im verlangten Intervall berechnen. Die Kurve oben wurde mit einem Rasterabstand von 0.2 berechnet (d.h., für die Werte 0, 0.2, 0.4, 0.6, ..., 6.2). \n",
     "- Denken Sie daran, dass Sie mit der `int`-Funktion eine Gleitkommazahl in eine ganze Zahl umwandeln können (der Dezimalanteil wird abgeschnitten).\n",
     "- Damit Sie die Funktion `math.sin` nutzen können, müssen Sie anfangs das `math`-Modul importieren."
@@ -224,7 +250,12 @@
    "outputs": [],
    "source": [
     "def sinprint():\n",
-    "    # Implementieren Sie hier die Funktion sinprint\n",
+    "    '''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen. \n",
+    "    Diese Funktion kann man ohne Argument implementieren. Wenn es für Sie einfacher ist, \n",
+    "    können Sie gerne eins hinzufügen.\n",
+    "    '''    \n",
+    "\n",
+    "\n",
     "\n"
    ]
   },
@@ -234,8 +265,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "\n",
-    "sinprint() # Testaufruf"
+    "# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit verschiedenen Argumenten aufzurufen."
    ]
   },
   {
@@ -257,7 +287,12 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# Implementieren Sie hier die Funktion funcprint\n",
+    "def funcprint():\n",
+    "    '''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen. \n",
+    "    Das/Die Argument/e müssen Sie sich dieses Mal selbst überlegen.\n",
+    "    '''    \n",
+    "\n",
+    "\n",
     "\n"
    ]
   },
@@ -267,8 +302,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "# Testen Sie hier die Funktion funcprint\n",
-    "funcprint(math.erf)"
+    "# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit verschiedenen Argumenten aufzurufen."
    ]
   },
   {
@@ -289,7 +323,21 @@
    "execution_count": null,
    "metadata": {},
    "outputs": [],
-   "source": []
+   "source": [
+    "def funcprint_advanced():\n",
+    "    '''Implementieren Sie hier ihre Funktion. Dieses Kommentar können Sie löschen. \n",
+    "    Das/Die Argument/e müssen Sie sich dieses Mal selbst überlegen.\n",
+    "    '''    "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "# Bitte nutzen Sie diese Zelle, um Ihre Funktion zweimal mit verschiedenen Argumenten aufzurufen."
+   ]
   },
   {
    "cell_type": "markdown",
diff --git a/notebooks/seminar01.ipynb b/notebooks/seminar01.ipynb
index e3268d0..c7a50cf 100644
--- a/notebooks/seminar01.ipynb
+++ b/notebooks/seminar01.ipynb
@@ -1,5 +1,13 @@
 {
  "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
+    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Kapitel-1:-Die-Ersten-Programme\" data-toc-modified-id=\"Kapitel-1:-Die-Ersten-Programme-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Kapitel 1: Die Ersten Programme</a></span><ul class=\"toc-item\"><li><span><a href=\"#Ihre-Lernziele:\" data-toc-modified-id=\"Ihre-Lernziele:-1.1\"><span class=\"toc-item-num\">1.1&nbsp;&nbsp;</span>Ihre Lernziele:</a></span></li></ul></li><li><span><a href=\"#Exkurs:-Was-mir-an-Python-gefällt:\" data-toc-modified-id=\"Exkurs:-Was-mir-an-Python-gefällt:-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Exkurs: Was mir an Python gefällt:</a></span><ul class=\"toc-item\"><li><span><a href=\"#Standardbrowser\" data-toc-modified-id=\"Standardbrowser-2.1\"><span class=\"toc-item-num\">2.1&nbsp;&nbsp;</span>Standardbrowser</a></span><ul class=\"toc-item\"><li><span><a href=\"#Anleitungen\" data-toc-modified-id=\"Anleitungen-2.1.1\"><span class=\"toc-item-num\">2.1.1&nbsp;&nbsp;</span>Anleitungen</a></span></li></ul></li><li><span><a href=\"#Programme\" data-toc-modified-id=\"Programme-2.2\"><span class=\"toc-item-num\">2.2&nbsp;&nbsp;</span>Programme</a></span></li><li><span><a href=\"#Eine-erste-Anweisung\" data-toc-modified-id=\"Eine-erste-Anweisung-2.3\"><span class=\"toc-item-num\">2.3&nbsp;&nbsp;</span>Eine erste Anweisung</a></span></li><li><span><a href=\"#Python-Programme-starten\" data-toc-modified-id=\"Python-Programme-starten-2.4\"><span class=\"toc-item-num\">2.4&nbsp;&nbsp;</span>Python-Programme starten</a></span></li><li><span><a href=\"#Arithmetik\" data-toc-modified-id=\"Arithmetik-2.5\"><span class=\"toc-item-num\">2.5&nbsp;&nbsp;</span>Arithmetik</a></span></li><li><span><a href=\"#Werte-und-Datentypen\" data-toc-modified-id=\"Werte-und-Datentypen-2.6\"><span class=\"toc-item-num\">2.6&nbsp;&nbsp;</span>Werte und Datentypen</a></span></li><li><span><a href=\"#Formale-und-natürliche-Sprachen\" data-toc-modified-id=\"Formale-und-natürliche-Sprachen-2.7\"><span class=\"toc-item-num\">2.7&nbsp;&nbsp;</span>Formale und natürliche Sprachen</a></span></li><li><span><a href=\"#Exkurs:-Programmierer\" data-toc-modified-id=\"Exkurs:-Programmierer-2.8\"><span class=\"toc-item-num\">2.8&nbsp;&nbsp;</span>Exkurs: Programmierer</a></span></li><li><span><a href=\"#Debugging\" data-toc-modified-id=\"Debugging-2.9\"><span class=\"toc-item-num\">2.9&nbsp;&nbsp;</span>Debugging</a></span></li><li><span><a href=\"#Glossar\" data-toc-modified-id=\"Glossar-2.10\"><span class=\"toc-item-num\">2.10&nbsp;&nbsp;</span>Glossar</a></span></li><li><span><a href=\"#Übung\" data-toc-modified-id=\"Übung-2.11\"><span class=\"toc-item-num\">2.11&nbsp;&nbsp;</span>Übung</a></span><ul class=\"toc-item\"><li><span><a href=\"#Aufgabe-1\" data-toc-modified-id=\"Aufgabe-1-2.11.1\"><span class=\"toc-item-num\">2.11.1&nbsp;&nbsp;</span>Aufgabe 1</a></span></li><li><span><a href=\"#Aufgabe-2\" data-toc-modified-id=\"Aufgabe-2-2.11.2\"><span class=\"toc-item-num\">2.11.2&nbsp;&nbsp;</span>Aufgabe 2</a></span><ul class=\"toc-item\"><li><span><a href=\"#Ergebnisse\" data-toc-modified-id=\"Ergebnisse-2.11.2.1\"><span class=\"toc-item-num\">2.11.2.1&nbsp;&nbsp;</span>Ergebnisse</a></span></li></ul></li></ul></li></ul></li></ul></div>"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -131,7 +139,7 @@
     "\n",
     "![Funktionsaufruf](https://amor.cms.hu-berlin.de/~jaeschkr/teaching/spp/funktionsaufruf.png)\n",
     "\n",
-    "Das Ergebnis dieses Funktionsaufrufs ist, dass die Zeichenkette auf dem Bildschirm ausgegeben wird.\n",
+    "Das Ergebnis dieses Funktionsaufrufs ist, dass die Zeichenkette auf dem Bildschirm ausgegeben wird. \n",
     "\n",
     "Probieren Sie es nun selber und geben Sie eine Zeichenkette Ihrer Wahl aus, indem Sie die Zeichenkette in Gänsefüßchen der `print`-Funktion als **Argument** übergeben: "
    ]
@@ -391,7 +399,7 @@
     "\n",
     "- Anweisung: \n",
     "- Programm: \n",
-    "- `print`-Funktion:\n",
+    "- **`print`-Funktion**:\n",
     "- Argument:\n",
     "- Operator:\n",
     "- Wert: \n",
diff --git a/notebooks/seminar02.ipynb b/notebooks/seminar02.ipynb
index fc1b24a..69d5c38 100644
--- a/notebooks/seminar02.ipynb
+++ b/notebooks/seminar02.ipynb
@@ -1,11 +1,23 @@
 {
  "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
+    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Kapitel-2:-Variablen,-Ausdrücke-und-Anweisungen\" data-toc-modified-id=\"Kapitel-2:-Variablen,-Ausdrücke-und-Anweisungen-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Kapitel 2: Variablen, Ausdrücke und Anweisungen</a></span><ul class=\"toc-item\"><li><span><a href=\"#Ihre-Lernziele\" data-toc-modified-id=\"Ihre-Lernziele-1.1\"><span class=\"toc-item-num\">1.1&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-1.2\"><span class=\"toc-item-num\">1.2&nbsp;&nbsp;</span>Exkurs: Was mir an Python gefällt</a></span></li><li><span><a href=\"#Zuweisung\" data-toc-modified-id=\"Zuweisung-1.3\"><span class=\"toc-item-num\">1.3&nbsp;&nbsp;</span>Zuweisung</a></span></li><li><span><a href=\"#(Variablen)Namen\" data-toc-modified-id=\"(Variablen)Namen-1.4\"><span class=\"toc-item-num\">1.4&nbsp;&nbsp;</span>(Variablen)Namen</a></span></li><li><span><a href=\"#Ausdrücke-und-Anweisungen\" data-toc-modified-id=\"Ausdrücke-und-Anweisungen-1.5\"><span class=\"toc-item-num\">1.5&nbsp;&nbsp;</span>Ausdrücke und Anweisungen</a></span></li><li><span><a href=\"#Reihenfolge-von-Operatoren\" data-toc-modified-id=\"Reihenfolge-von-Operatoren-1.6\"><span class=\"toc-item-num\">1.6&nbsp;&nbsp;</span>Reihenfolge von Operatoren</a></span></li><li><span><a href=\"#Operatoren-für-Zeichenketten\" data-toc-modified-id=\"Operatoren-für-Zeichenketten-1.7\"><span class=\"toc-item-num\">1.7&nbsp;&nbsp;</span>Operatoren für Zeichenketten</a></span></li></ul></li><li><span><a href=\"#Kommentare\" data-toc-modified-id=\"Kommentare-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Kommentare</a></span><ul class=\"toc-item\"><li><span><a href=\"#Debugging\" data-toc-modified-id=\"Debugging-2.1\"><span class=\"toc-item-num\">2.1&nbsp;&nbsp;</span>Debugging</a></span></li><li><span><a href=\"#Glossar\" data-toc-modified-id=\"Glossar-2.2\"><span class=\"toc-item-num\">2.2&nbsp;&nbsp;</span>Glossar</a></span></li><li><span><a href=\"#Übung\" data-toc-modified-id=\"Übung-2.3\"><span class=\"toc-item-num\">2.3&nbsp;&nbsp;</span>Übung</a></span><ul class=\"toc-item\"><li><span><a href=\"#Aufgabe-1\" data-toc-modified-id=\"Aufgabe-1-2.3.1\"><span class=\"toc-item-num\">2.3.1&nbsp;&nbsp;</span>Aufgabe 1</a></span></li><li><span><a href=\"#Aufgabe-2\" data-toc-modified-id=\"Aufgabe-2-2.3.2\"><span class=\"toc-item-num\">2.3.2&nbsp;&nbsp;</span>Aufgabe 2</a></span></li><li><span><a href=\"#Ergebnisse\" data-toc-modified-id=\"Ergebnisse-2.3.3\"><span class=\"toc-item-num\">2.3.3&nbsp;&nbsp;</span>Ergebnisse</a></span></li></ul></li><li><span><a href=\"#print-Tutorial\" data-toc-modified-id=\"print-Tutorial-2.4\"><span class=\"toc-item-num\">2.4&nbsp;&nbsp;</span><code>print</code> Tutorial</a></span></li></ul></li></ul></div>"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
     "# Seminar Problemorientierte Programmierung\n",
     "\n",
+    "**Bevor Sie mit diesem Notebook starten, gehen Sie zurück in das vorherige Notebook und schauen Sie sich mindestens das Glossar an, um zu wiederholen, was Sie letztes Notebook gelernt haben.**\n",
+    "\n",
+    "\n",
+    "\n",
     "## Kapitel 2: Variablen, Ausdrücke und Anweisungen\n",
     "[Chapter 2:  Variables, expressions and statements](http://greenteapress.com/thinkpython2/html/thinkpython2003.html).\n",
     "\n",
@@ -634,6 +646,7 @@
     "- Syntaxfehler:\n",
     "- Laufzeitfehler:\n",
     "- semantischer Fehler:\n",
+    "- `print`-Funktion:\n",
     "\n",
     "Ergänzen Sie die Liste in eigenen Worten. Das ist eine gute Erinnerungs- und Übungsmöglichkeit.\n",
     "\n"
@@ -752,6 +765,120 @@
     "Volumen 523.599; Die gesamte Bestellung würde 1126,89€ kosten; Ankunft ist 7:30 Uhr und 6 Sekunden"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "### `print` Tutorial \n",
+    "\n",
+    "Hier lernen Sie einige Tricks kennen, um mit der `print`-Funktion ihre Ausgabe formatieren können.\n",
+    "Bis jetzt haben Sie gelernt, dass man sich mit Hilfe der `print`-Funktion Zeichenketten, Zahlen, Variablen. etc. ausgeben lassen kann. \n",
+    "Zeichenketten müssen dabei immer in Anführungszeichen stehen. "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print(\"Hallo Welt!\")\n",
+    "\n",
+    "print(42)\n",
+    "print(52-10)\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Man kann auch mehrere Argumente übergeben, diese müssen durch ein Komma getrennt werden.\n",
+    "Die Ausgabe erfolgt mit einem Leerzeichen getrennt."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print(42, 35.32-9.0, \"Hallo Welt\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "und natürlich können Sie sich auch Variablen ausgeben lassen:\n",
+    "    "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "a = 42\n",
+    "b = \"Die Antwort lautet:\"\n",
+    "    \n",
+    "print(b,a)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Um längere Ausgaben, mehrere Variablen ,etc. schöner zu formatieren, gibt es einige Tricks.\n",
+    "Einmal kann man der Funktionen einen extra Parameter übergeben, der einstellt, durch welches Zeichen die verschiedenen Argumente getrennt werden sollen.\n",
+    "\n",
+    "Standardmäßig und wie oben gesehen, wird die Ausgabe mehrerer Argumente jeweils durch ein Leerzeichen getrennt.\n",
+    "Durch Hinzufügen des Parameter `print(b,a ,sep=\" \")` (MERKE: `sep` steht für `separator`) können Sie spezifizieren, welches Zeichen als Trennzeichen genommen wird. Schauen wir uns einige Beispiele an:\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "a = 42\n",
+    "b = \"Die Antwort lautet:\"\n",
+    "\n",
+    "# wenn `sep` nicht angegeben ist, wird standardmäßig ein Leerzeichen zwischen den Argumenten in `print` verwendet\n",
+    "print(b,a)\n",
+    "# Jetzt geben wir explizit an, dass der separator ein Leerzeichen sein soll, d.h., die Ausgabe ändert sich nicht.\n",
+    "print(b,a, sep = \" \")\n",
+    "# Jetzt soll der separator zwei Leerzeichen sein:\n",
+    "print(b,a, sep = \"  \")\n",
+    "# und jetzt soll der separator ein `tab` (4 Leerzeichen) sein, das wird durch `\\t`angegeben\n",
+    "print(b,a, sep = \"\\t\")\n",
+    "# nun soll der separator ein Zeilenumbruch sein, das wird durch `\\n`angegeben\n",
+    "print(b,a, sep = \"\\n\")\n",
+    "# zum schluss kann man noch triple quotes (drei Anführungszeichen am Anfang und drei am Ende) nutzen,\n",
+    "# um Text in mehreren Zeilen zu schreiben: ''' '''\n",
+    "print(''' \n",
+    "Erste Zeile\n",
+    "Zweite Zeile\n",
+    "''')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Die Befehle `\\t`und `\\n` funktionieren auch innerhalb einer Zeichenkette:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "print(\"Hallo \\t Welt,\\n die Antwort lautet\\n42\")"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
diff --git a/notebooks/seminar03.ipynb b/notebooks/seminar03.ipynb
index a8e6b29..01379e0 100644
--- a/notebooks/seminar03.ipynb
+++ b/notebooks/seminar03.ipynb
@@ -1,11 +1,21 @@
 {
  "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
+    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Kapitel-3:-Funktionen\" data-toc-modified-id=\"Kapitel-3:-Funktionen-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Kapitel 3: Funktionen</a></span><ul class=\"toc-item\"><li><span><a href=\"#Ihre-Lernziele\" data-toc-modified-id=\"Ihre-Lernziele-1.1\"><span class=\"toc-item-num\">1.1&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-1.2\"><span class=\"toc-item-num\">1.2&nbsp;&nbsp;</span>Exkurs: Was mir an Python gefällt</a></span></li><li><span><a href=\"#Warum?\" data-toc-modified-id=\"Warum?-1.3\"><span class=\"toc-item-num\">1.3&nbsp;&nbsp;</span>Warum?</a></span></li><li><span><a href=\"#3.1-Funktionsaufrufe\" data-toc-modified-id=\"3.1-Funktionsaufrufe-1.4\"><span class=\"toc-item-num\">1.4&nbsp;&nbsp;</span>3.1 Funktionsaufrufe</a></span></li><li><span><a href=\"#3.2-Mathematische-Funktionen\" data-toc-modified-id=\"3.2-Mathematische-Funktionen-1.5\"><span class=\"toc-item-num\">1.5&nbsp;&nbsp;</span>3.2 Mathematische Funktionen</a></span></li><li><span><a href=\"#3.3-Verknüpfung\" data-toc-modified-id=\"3.3-Verknüpfung-1.6\"><span class=\"toc-item-num\">1.6&nbsp;&nbsp;</span>3.3 Verknüpfung</a></span></li><li><span><a href=\"#3.4-Neue-Funktionen-hinzufügen\" data-toc-modified-id=\"3.4-Neue-Funktionen-hinzufügen-1.7\"><span class=\"toc-item-num\">1.7&nbsp;&nbsp;</span>3.4 Neue Funktionen hinzufügen</a></span></li><li><span><a href=\"#3.5-Definition-von-Funktionen-und-deren-Aufruf\" data-toc-modified-id=\"3.5-Definition-von-Funktionen-und-deren-Aufruf-1.8\"><span class=\"toc-item-num\">1.8&nbsp;&nbsp;</span>3.5 Definition von Funktionen und deren Aufruf</a></span></li><li><span><a href=\"#3.6-Kontrollfluss\" data-toc-modified-id=\"3.6-Kontrollfluss-1.9\"><span class=\"toc-item-num\">1.9&nbsp;&nbsp;</span>3.6 Kontrollfluss</a></span></li><li><span><a href=\"#3.7-Parameter-und-Argumente\" data-toc-modified-id=\"3.7-Parameter-und-Argumente-1.10\"><span class=\"toc-item-num\">1.10&nbsp;&nbsp;</span>3.7 Parameter und Argumente</a></span></li><li><span><a href=\"#3.8-Variablen-und-Parameter-sind-lokal\" data-toc-modified-id=\"3.8-Variablen-und-Parameter-sind-lokal-1.11\"><span class=\"toc-item-num\">1.11&nbsp;&nbsp;</span>3.8 Variablen und Parameter sind lokal</a></span></li><li><span><a href=\"#3.9-Stapel-Diagramme\" data-toc-modified-id=\"3.9-Stapel-Diagramme-1.12\"><span class=\"toc-item-num\">1.12&nbsp;&nbsp;</span>3.9 Stapel-Diagramme</a></span></li><li><span><a href=\"#3.10-Funktionen-mit-Rückgabewert\" data-toc-modified-id=\"3.10-Funktionen-mit-Rückgabewert-1.13\"><span class=\"toc-item-num\">1.13&nbsp;&nbsp;</span>3.10 Funktionen mit Rückgabewert</a></span></li><li><span><a href=\"#3.11-Exkurs:-Eigene-Funktionen-mit-Rückgabewert\" data-toc-modified-id=\"3.11-Exkurs:-Eigene-Funktionen-mit-Rückgabewert-1.14\"><span class=\"toc-item-num\">1.14&nbsp;&nbsp;</span>3.11 Exkurs: Eigene Funktionen mit Rückgabewert</a></span></li><li><span><a href=\"#3.12-Debugging\" data-toc-modified-id=\"3.12-Debugging-1.15\"><span class=\"toc-item-num\">1.15&nbsp;&nbsp;</span>3.12 Debugging</a></span></li><li><span><a href=\"#3.13-Glossar\" data-toc-modified-id=\"3.13-Glossar-1.16\"><span class=\"toc-item-num\">1.16&nbsp;&nbsp;</span>3.13 Glossar</a></span></li></ul></li><li><span><a href=\"#3.14-Übung\" data-toc-modified-id=\"3.14-Übung-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>3.14 Übung</a></span><ul class=\"toc-item\"><li><span><a href=\"#Aufgabe-1\" data-toc-modified-id=\"Aufgabe-1-2.1\"><span class=\"toc-item-num\">2.1&nbsp;&nbsp;</span>Aufgabe 1</a></span><ul class=\"toc-item\"><li><span><a href=\"#Aufgabe-1a\" data-toc-modified-id=\"Aufgabe-1a-2.1.1\"><span class=\"toc-item-num\">2.1.1&nbsp;&nbsp;</span>Aufgabe 1a</a></span><ul class=\"toc-item\"><li><span><a href=\"#Lückentext\" data-toc-modified-id=\"Lückentext-2.1.1.1\"><span class=\"toc-item-num\">2.1.1.1&nbsp;&nbsp;</span>Lückentext</a></span></li></ul></li><li><span><a href=\"#Aufgabe-1b\" data-toc-modified-id=\"Aufgabe-1b-2.1.2\"><span class=\"toc-item-num\">2.1.2&nbsp;&nbsp;</span>Aufgabe 1b</a></span></li><li><span><a href=\"#Aufgabe-2\" data-toc-modified-id=\"Aufgabe-2-2.1.3\"><span class=\"toc-item-num\">2.1.3&nbsp;&nbsp;</span>Aufgabe 2</a></span></li><li><span><a href=\"#Aufgabe-3\" data-toc-modified-id=\"Aufgabe-3-2.1.4\"><span class=\"toc-item-num\">2.1.4&nbsp;&nbsp;</span>Aufgabe 3</a></span><ul class=\"toc-item\"><li><span><a href=\"#1.\" data-toc-modified-id=\"1.-2.1.4.1\"><span class=\"toc-item-num\">2.1.4.1&nbsp;&nbsp;</span>1.</a></span></li><li><span><a href=\"#2.\" data-toc-modified-id=\"2.-2.1.4.2\"><span class=\"toc-item-num\">2.1.4.2&nbsp;&nbsp;</span>2.</a></span></li></ul></li><li><span><a href=\"#Bonusaufgabe\" data-toc-modified-id=\"Bonusaufgabe-2.1.5\"><span class=\"toc-item-num\">2.1.5&nbsp;&nbsp;</span>Bonusaufgabe</a></span></li></ul></li></ul></li></ul></div>"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
     "# Seminar Problemorientierte Programmierung\n",
     "\n",
+    "**Bevor Sie mit diesem Notebook starten, gehen Sie zurück in das vorherige Notebook und schauen Sie sich mindestens das Glossar an, um zu wiederholen, was Sie letztes Notebook gelernt haben.**\n",
+    "\n",
     "## Kapitel 3: Funktionen\n",
     "[Chapter 3: Functions](http://greenteapress.com/thinkpython2/html/thinkpython2004.html)\n",
     "\n",
-- 
GitLab