Skip to content
Snippets Groups Projects
seminar00.ipynb 13.1 KiB
Newer Older
schwabmi's avatar
schwabmi committed
  {
   "cell_type": "markdown",
   "metadata": {},
Miriam Brauer's avatar
Miriam Brauer committed
   "source": [
    "# Seminar Problemorientierte Programmierung\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "Falls Sie im Python Programmierkurs sind und dies ihr erstes geöffnetes Jupyter Notebook ist: \n",
Miriam Brauer's avatar
Miriam Brauer committed
    "\n",
    "**Herzlichen Glückwunsch! Sie haben die erste Hürde gemeistert. :)**\n",
    "\n",
    "Diese Notebooks sind im Wesentlichen eine Übersetzung der 2. Ausgabe des Buches [Think Python](http://greenteapress.com/wp/think-python-2e/) von Allen B. Downey.\n"
Miriam Brauer's avatar
Miriam Brauer committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
schwabmi's avatar
schwabmi committed
   "source": [
schwabmi's avatar
schwabmi committed
    "<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
Miriam Brauer's avatar
Miriam Brauer committed
    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Lernziele-und-Ablauf-diese-Seminars\" data-toc-modified-id=\"Lernziele-und-Ablauf-diese-Seminars-1\"><span class=\"toc-item-num\">1&nbsp;&nbsp;</span>Lernziele und Ablauf diese Seminars</a></span></li><li><span><a href=\"#Tipps\" data-toc-modified-id=\"Tipps-2\"><span class=\"toc-item-num\">2&nbsp;&nbsp;</span>Tipps</a></span></li><li><span><a href=\"#Wiederkehrende-Abschnitte\" data-toc-modified-id=\"Wiederkehrende-Abschnitte-3\"><span class=\"toc-item-num\">3&nbsp;&nbsp;</span>Wiederkehrende Abschnitte</a></span></li><li><span><a href=\"#Hinweise-zur-Benutzung-von-Jupyter\" data-toc-modified-id=\"Hinweise-zur-Benutzung-von-Jupyter-4\"><span class=\"toc-item-num\">4&nbsp;&nbsp;</span>Hinweise zur Benutzung von Jupyter</a></span><ul class=\"toc-item\"><li><span><a href=\"#Jupyter-Notebook-Grundlagen-und-Informationen\" data-toc-modified-id=\"Jupyter-Notebook-Grundlagen-und-Informationen-4.1\"><span class=\"toc-item-num\">4.1&nbsp;&nbsp;</span>Jupyter Notebook Grundlagen und Informationen</a></span></li><li><span><a href=\"#Standardbrowser\" data-toc-modified-id=\"Standardbrowser-4.2\"><span class=\"toc-item-num\">4.2&nbsp;&nbsp;</span>Standardbrowser</a></span><ul class=\"toc-item\"><li><span><a href=\"#Anleitungen\" data-toc-modified-id=\"Anleitungen-4.2.1\"><span class=\"toc-item-num\">4.2.1&nbsp;&nbsp;</span>Anleitungen</a></span></li></ul></li><li><span><a href=\"#Shortcuts\" data-toc-modified-id=\"Shortcuts-4.3\"><span class=\"toc-item-num\">4.3&nbsp;&nbsp;</span>Shortcuts</a></span><ul class=\"toc-item\"><li><span><a href=\"#Beispiel:-Markdown-Zelle-vs.-Code-Zelle\" data-toc-modified-id=\"Beispiel:-Markdown-Zelle-vs.-Code-Zelle-4.3.1\"><span class=\"toc-item-num\">4.3.1&nbsp;&nbsp;</span>Beispiel: Markdown Zelle vs. Code Zelle</a></span></li></ul></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:-5\"><span class=\"toc-item-num\">5&nbsp;&nbsp;</span>Exkurs: Was mir an Python gefällt:</a></span></li></ul></div>"
schwabmi's avatar
schwabmi committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "## Lernziele und Ablauf diese Seminars\n",
Miriam Brauer's avatar
Miriam Brauer committed
    "Unser Lernziel ist, dass Sie Programmieren lernen (mit Python :-)). Bis dahin ist es ein weiter Weg. Der beste Tipp ist: üben, üben, üben.\n",
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "Das Seminar wird wie folgt ablaufen:\n",
    "\n",
    "1. Sie arbeiten als Pair-Programming-Team diese Jupyter-Notebooks durch. \n",
schwabmi's avatar
schwabmi committed
    "    - Währenddessen bin ich für Sie da, um Fragen zu beantworten und Probleme zu lösen\n",
    "    - Nutzen Sie gerne auch das [gemeinsame Etherpad](https://etherpad.gwdg.de/p/Pro2P), um Probleme, Fragen oder fehlerhaften Code zu posten.  \n",
    "2. Alle ca. 15 Minuten unterbrechen wir das Programmieren und Sie wechseln die Rollen (NavigatorIn <--> FahrerIn)\n",
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "3. Die Schritte 1. und 2. wiederholen wir bis zum Ende des Seminars\n",
    "4. Zuhause arbeiten Sie gemeinsam das durch, was Sie im Seminar nicht geschafft haben. Dies gilt besonders für die Aufgaben \n",
    "    - Wir werden im Seminar entscheiden, bis zu welchem Notebook Sie kommen sollten.\n",
    "    \n",
    "## Tipps\n",
    "\n",
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    " - Arbeiten Sie die Notebooks selbständig im Team durch und probieren Sie möglichst viel aus. Seien Sie kreativ, neugierig und manchmal auch destruktiv. Denn auch durch Fehler lernen Sie.\n",
    " - Sie können alles in Ihrem Notebook bearbeiten ... nutzen Sie diese Möglichkeit. Ergänzen Sie also Text, löschen Sie, was Sie überflüssig finden, fügen Sie Ihre eigenen Notizen oder Programme hinzu. Dieses Notebook kann Ihr \"Portfolio\" werden: eine Demonstration dessen, was Sie schon können.\n",
    " - Denken Sie daran, alle Code-Blöcke auszuführen. \"Unbekannter\" Code führt in Jupyter häufig zu leicht vermeidbaren Fehlern.\n",
    " - Falls Sie mal nicht weiterkommen: helfen Sie sich gegenseitig und versuchen Sie verschiedene Dinge. Schreiben Sie Ihr Problem z.B. einfach mal ganz genau hier im Notebook auf. Oft hilft das Aufschreiben eines Problems schon bei der Lösung eines Problems.\n",
Miriam Brauer's avatar
Miriam Brauer committed
    "## Wiederkehrende Abschnitte\n",
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    " - **Exkurse** sind Material, welches Sie sich nur anschauen brauchen, falls es Sie interessiert. Bitte schauen Sie sich die Exkurse eher zu Hause an, als während des Seminars, damit Sie vorwärts kommen. Die Inhalte der Exkurse sind nicht notwendig, um vorwärts zu kommen, aber hilfreich, um mehr zu lernen.\n",
    " - **Debugging-Abschnitte** erklären, wie Sie Fehler finden und beheben können.\n",
    " - **Glossar-Abschnitte** listen die Begriffe auf, die im Kapitel vermittelt wurden. Es ist eine gute Übung für zu Hause, jeden Begriff dort noch einmal in eigenen Worten zu definieren.\n",
Miriam Brauer's avatar
Miriam Brauer committed
    " - Schließlich gibt es **Übungen**, diese sollten Sie unbedingt durchführen und erst fortfahren, wenn Sie die Aufgaben lösen konnten und verstanden haben."
schwabmi's avatar
schwabmi committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    " \n",
    "## Hinweise zur Benutzung von Jupyter\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "### Jupyter Notebook Grundlagen und Informationen\n",
    "\n",
    "- open-source, browserbasiertes Tool für verschiedene Programmiersprachen (wir benutzen Python)\n",
    "- **Vorteil**: Code, Visualisierungen und Text / Erklärungen in einem Dokument\n",
    "- Notebook besteht aus Blöcken bzw. Zellen\n",
    "- Unter der Zelle wird der Rückgabewert des letzten Statements ausgegeben\n",
    "- Quellcode kann auf mehrere Blöcke aufgeteilt werden (Variablen behalten ihre Gültigkeit/Sichtbarkeit)\n",
    "- Es gibt zwei Arten von Blöcken: \"Code\" ist für Python-Code, \"Markdown\" ist für Texte, die Sie mit Hilfe der [Markdown-Syntax](https://de.wikipedia.org/wiki/Markdown#Auszeichnungsbeispiele) formatieren können.\n",
    "- Sie können auf Text doppelt klicken, um sich den Markdown-Quellcode anzuzeigen. Probieren Sie es mit diesem Text aus.\n",
    "- durch die Tastenkombination \"Strg\" und \"Enter\"  oder durch Drücken von dem \"Run\" Button oben im Menü kommen Sie wieder in den Lesemodus \n",
    "- Wenn Sie mal etwas \"kaputtgespielt\" haben, hilft es evtl., im \"Kernel\"-Menü den \"Restart\"-Eintrag auszuwählen.\n",
    "\n",
Miriam Brauer's avatar
Miriam Brauer committed
    "### Standardbrowser\n",
    "\n",
    "Bitte verwenden Sie **nicht** Safari oder Internet Explorer. Auch mit Windows Edge gab es in der Vergangenheit Probleme. Wir empfehlen die Verwendung von Firefox, aber auch Google Chrome lief in der Vergangenheit problemlos. Wenn Sie unsicher sind, was ihr aktueller Standardbrowser ist, folgen Sie einfach der folgenden Anleitung zum Ändern des Standardbrowsers und gehen Sie sicher, dass der richtige Standardbrowser ausgewählt ist.\n",
    "\n",
    "#### Anleitungen\n",
    "\n",
    "**Änderung des Standardbrowsers in...**   \n",
    "\n",
    "*macOS:*  \n",
    "1. Öffnen sie die Systemeinstellungen.\n",
    "2. Klicken Sie auf „Allgemein“.\n",
    "3. Wählen Sie unter „Standard-Webbrowser“ den gewünschten Browser aus.\n",
    "\n",
    "*Ubuntu Linux:*  \n",
    "1. Öffnen Sie die System Settings.\n",
    "2. Klicken Sie auf „Applications“.\n",
    "3. Wählen Sie in der linken Spalte „Default Applications“ aus.\n",
    "4. Klicken Sie in der Spalte rechts davon auf „Web Browser“.\n",
    "5. Wählen Sie „in the following browser:“ aus.\n",
    "6. Wählen Sie den gewünschten Browser aus.\n",
    "\n",
    "*Windows:*  \n",
    "1. Öffnen Sie die Systemsteuerung.\n",
    "2. Klicken Sie auf „Standardprogramme“.\n",
    "3. Klicken Sie auf „Standardprogramme festlegen“.\n",
    "4. Klicken Sie in der Liste auf den gewünschten Browser.\n",
    "5. Klicken Sie dann auf „Dieses Programm als Standard festlegen“.\n",
    "\n",
    "\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "### Shortcuts\n",
    "\n",
    "**Bitte probieren Sie alle unten stehenden Befehle und verstehen Sie, was gemacht wird. Das ist die Basis, die Sie für das Arbeiten mit Jupyter Notebooks brauchen.**\n",
    "\n",
    "Übersicht: *Menü Help -> Keyboard Shortcuts*\n",
    "\n",
    "Wichtigste Shortcuts: \n",
    "\n",
    "- *Enter*: Editiermodus für selektierte Zelle (grün umrandet)\n",
    "- *Esc*: Editiermodus verlassen/Kommandomodus (blau umrandet)\n",
    "- *Strg + Enter*: Selektierte Zelle ausführen\n",
    "- *Shift + Enter*: Selektierte Zelle ausführen und in nächste Zelle springen\n",
    "\n",
    "Im Editiermodus:\n",
    "- *Tab*: Autocomplete oder Einrücken\n",
    "- *Shift + Tab*: Einrücken rückwärts\n",
    "\n",
    "Im Kommando-/Lesemodus:\n",
    "- *B*: Zelle darunter einfügen\n",
    "- *A*: Zelle darüber einfügen\n",
    "- *DD*: Zelle löschen\n",
    "- *M*: Zelltyp Markdown (für formatierte beschreibende Texte, zB diese Zelle)\n",
    "- *Y*: Zelltyp Code (Default)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
Miriam Brauer's avatar
Miriam Brauer committed
    "#### Beispiel: Markdown Zelle vs. Code Zelle"
schwabmi's avatar
schwabmi committed
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Dies ist eine **Markdown Zelle**. Hier kann jeglicher Text geschrieben werden. Durch Strg+Enter wird er in den Lesemodus gebracht, durch ein einfach Enter (oder Doppelklick) in den Editiermodus.\n",
    "\n",
    "Hier werden keine Rechnungen ausgeführt, siehe:\n",
    "\n",
    "5+3\n",
    "\n",
    "In diesen Feldern werden Erklärungen, Aufgabenstellungen und schriftliche Antworten von euch stehen."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Das ist eine **Code Zelle**, bei Strg+Enter wird die folgende Rechnung ausgeführt und darunter angezeigt\n",
    "# Mit Enter kommt man in den Editiermodus, mit Strg+Enter wird der Code ausgeführt.\n",
    "# Der Text kann hier nur stehen, da eine Raute am Anfang der Zeile steht. \n",
    "# Dadurch werden diese Zeilen nicht ausgeführt.\n",
    "\n",
    "31+11\n",
schwabmi's avatar
schwabmi committed
    "# In diesen Zellen wird der Python Code geschrieben, manchmal müssen Sie ihn schreiben, \n",
    "# manchmal steht der Code schon dort und muss von Ihnen nur ausgeführt werden."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "## Exkurs: Was mir an Python gefällt:\n",
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "In dieser Rubrik, die normalerweise am Anfang eines Kapitels steht, möchte ich Ihnen zeigen, wofür ich Python nutze und warum ich es mag. Sie werden vielleicht noch nicht verstehen, was ich genau mache, aber Sie sehen damit schon einmal die Möglichkeiten von Python und können später darauf zurückgreifen. Da dies ein Exkurs ist, können Sie diese Rubrik gerne auch erst einmal überspringen.\n",
Miriam Brauer's avatar
Miriam Brauer committed
    "**Hier müssen Sie den Code NIE verändern. Einfach Ausführen durch: *Strg+Enter* oder im Menü unter *> Run*.**   \n",
    "*Sollten Sie den Code doch einmal versehentlich verändert haben, sodass der Exkurs nicht mehr korrekt funktioniert, können Sie das Jupyter-Notebook erneut in Gitlab herunterladen*\n",
    "\n",
Michel Schwab's avatar
Michel Schwab committed
    "\n",
    "Ich finde toll, dass ich mit Python ganz einfach Zufallsexperimente durchtesten kann. Das hilft mir, Stochastik besser zu verstehen. Z.B. das Würfeln mit zwei Würfeln:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import random # Zufallszahlen, siehe https://docs.python.org/3/library/random.html\n",
    "\n",
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
    "# Werte initialisieren, größter möglicher Wert bei zwei Würfeln: 6+6=12 \n",
    "haeufigkeiten = [0 for i in range(13)]\n",
    "\n",
Michel Schwab's avatar
Michel Schwab committed
    "wuerfe = 1000\n",
    "for i in range(wuerfe):\n",
    "    # Würfelsumme für zwei Würfel zählen\n",
    "    haeufigkeiten[random.randrange(1,7) + random.randrange(1,7)] += 1\n",
    "\n",
    "# Ergebnis als Tabelle ausgeben\n",
    "print(\"Wir würfeln wiederholt mit zwei sechsseitigen Würfeln und addieren die Augenzahlen zusammen:\")\n",
    "print(\"Summe Augenzahlen:\", \"\\t\".join([str(i) for i in range(2,13)]), sep='\\t')\n",
    "print(\"Anzahl der Würfe:\", \"\\t\".join([str(i) for i in haeufigkeiten[2:]]), sep='\\t')\n",
    "print(\"Wahrscheinlichkeit:\", \"\\t\".join([\"{:2.3f}\".format(i/wuerfe) for i in haeufigkeiten[2:]]), sep='\\t')"
   ]
  },
Prof. Dr. Robert Jäschke's avatar
Prof. Dr. Robert Jäschke committed
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![RFC 1149.5 specifies 4 as the standard IEEE-vetted random number.](https://imgs.xkcd.com/comics/random_number.png)\n",
    "([Random Number](https://xkcd.com/221/), Randall Munroe)"
   ]
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python",
   "pygments_lexer": "ipython3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}