Skip to content
Snippets Groups Projects
seminar00_covid.ipynb 13.3 KiB
Newer Older
{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "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",
schwabmi's avatar
schwabmi committed
    "<font color='green'>**Herzlichen Glückwunsch! Sie haben die erste Hürde gemeistert. :)**</font>\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"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
schwabmi's avatar
schwabmi committed
    "<h1>Table of Contents<span class=\"tocSkip\"></span></h1>\n",
    "<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>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "## Lernziele und Ablauf diese Seminars\n",
    "\n",
    "Unser Lernziel ist, dass Sie Programmieren lernen (mit Python :-)). Bis dahin ist es ein weiter Weg. Der beste Tipp ist: üben, üben, üben.\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "Dieses Semester wird wie folgt ablaufen, ich erkläre den Prozess in den ersten Präsenzsitzungen noch einmal ausführlich:\n",
schwabmi's avatar
schwabmi committed
    "1. Suchen Sich sich einen Partner. Das hat Zeit bis Ende Oktober. Für die Fernstudierenden ist dies keine Pflicht.\n",
schwabmi's avatar
schwabmi committed
    "\n",
    "2. Sie arbeiten als Pair-Programming-Team die Jupyter-Notebooks durch. \n",
    "    - Planen Sie einen oder zwei **regelmäßige** Termine pro Woche ein, an denen Sie mit ihrem Partner die Aufgaben durcharbeiten.\n",
    "    - remote Pair-Programming Möglichkeiten werden Ihnen am Anfang des Semesters vorgestellt.\n",
    "    - Wechseln Sie sich alle 15 Minuten ab bzw. wechseln Sie Ihre Rollen (siehe Pair-Programming: Navigator_in <--> Fahrer_in).\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "3. Jede Woche gebe ich bekannt, bis zu welcher Aufgabe Sie kommen sollen. Das ist von Woche zu Woche unterschiedlich, da Sie mit den Notebooks unterschiedlich viel Zeit brauchen. \n",
    "    \n",
    "## Tipps\n",
    "\n",
    " - 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",
schwabmi's avatar
schwabmi committed
    " - Falls Sie mal nicht weiterkommen: helfen Sie sich gegenseitig und versuchen Sie verschiedene Dinge. Schreiben Sie Ihr Problem z.B. einfach mal ganz genau im entsprechenden Notebook auf. Oft hilft das Aufschreiben eines Problems schon bei der Lösung eines Problems.\n",
    "\n",
    "## Wiederkehrende Abschnitte\n",
    "\n",
    " - **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. (Hier müssen Sie nichts verändern, es reicht, die Zelle auszuführen).\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",
    " - Schließlich gibt es **Übungen**, diese sollten Sie unbedingt durchführen und erst fortfahren, wenn Sie die Aufgaben lösen konnten und verstanden haben."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " \n",
    "## Hinweise zur Benutzung von Jupyter\n",
    "\n",
    "### 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",
    "### Standardbrowser\n",
    "\n",
schwabmi's avatar
schwabmi committed
    "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",
    "### 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": [
    "#### Beispiel: Markdown Zelle vs. Code Zelle"
   ]
  },
  {
   "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",
    "\n",
    "# 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": [
    "## Exkurs: Was mir an Python gefällt:\n",
    "\n",
    "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",
    "\n",
    "**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",
    "\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",
    "# Werte initialisieren, größter möglicher Wert bei zwei Würfeln: 6+6=12 \n",
    "haeufigkeiten = [0 for i in range(13)]\n",
    "\n",
    "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')"
   ]
  },
  {
   "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
}