\n",
+ " Willkommen zur ersten Programmierübung Einführung in Python 3.\n",
+ "
\n",
+ " \n",
+ "
\n",
+ " \n",
+ "Python ist eine universelle Programmiersprache, die aufgrund ihrer Einfachheit sehr leicht zu lernen und zu bedienen ist. Die Funktionalität kann durch den Import von Bibliotheken erweitert werden. Im Folgenden werden wir Ihnen zeigen, wie man hier im Jupyter Notebook Python Code ausführen kann. Die grundlegenden Konzepte und Strukturen in Python werden mit Hilfe von externen Quellen gezeigt. Die Übungsaufgaben dienen zum Testen und der Hands-on-Praxis des gelernten Wissens. \n",
+ "\n",
+ "In diesem Jupyter Notebook werden die grundlegende Funktionen und Konzepte in Python vorgestellt. Dazu wird es kleine Programmierübungen um das gelernte Wissen in Beispielen anzuwenden. (Objekt Orientierte Programmierung werden wir in diesem Kurs nicht behandeln!)\n",
+ "\n",
+ "Das Jupyter Notebook ist in Zellen unterteilt, die durch Boxen gekennzeichnet sind, die einzeln ausgeführt werden können (entweder über `Shift + Enter` oder den `Run`-Knopf). Sie können auch alle Zellen im Notebook ausführen über `Kernel > Restart & Run All` oder dem \"Vorspulen\"-Zeichen.\n",
+ "\n",
+ "Bitte beachten Sie, dass alle Zellen im Notebook ein gemeinsamen Workspace nutzen. Das bedeutet, dass Bibliotheken nur einmal importiert werden müssen und dann innerhalb des Notebooks genutzt werden können. Es können jedoch auch Variablen überschrieben werden, wenn diese nicht richtig gekapselt werden (z.B. über Funktionen).\n",
+ "\n",
+ "Viel Spaß und Erfolg!\n",
+ "\n",
+ "Es gibt _sehr_ viele weitere Python-Tutorials online, z.B. auf [Youtube](https://youtu.be/kqtD5dpn9C8), mit denen Sie die benötigten Grundlagen für Python lernen können.\n",
+ "\n",
+ "Wenn Sie Fragen oder Verbesserungsvorschläge zum Inhalt oder Struktur der Notebooks haben, dann können Sie eine E-Mail an Phil Keier([p.keier@hbk-bs.de](mailto:p.keier@hbk-bs.de?subject=[SigSys]%20Feedback%20Programmierübung&)) oder Martin Le ([le@tu-bs.de](mailto:martin.le@tu-bs.de?subject=[SigSys]%20Feedback%20Programmierübung&)) schreiben.\n",
+ "\n",
+ "Link zu einem Python Spickzettel: [hier](https://s3.amazonaws.com/assets.datacamp.com/blog_assets/PythonForDataScience.pdf)\n",
+ "\n",
+ "Der Großteil des Python-Tutorials stammt aus der Veranstaltung _Deep Learning Lab_ und von [www.python-kurs.eu](https://www.python-kurs.eu/python3_kurs.php) und wurden für _Signale und Systeme_, sowie _Einführung in die Programmierung für Nicht Informatiker_ angepasst.\n",
+ "\n",
+ "---\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6ac5a9e3-7190-4db6-859b-3cb1511fe29f",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-c8293a61ad8fb19c",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "# Printing\n",
+ "\n",
+ "Für viele Anwendungsfälle ist es wichtig, dass der Computer mit uns als Mensch kommunizieren kann. Zu diesem Zweck lernen wir zuerst wie wir eine Ausgabe erzeugen können. Hierzu verwenden wir die Funktion `print()`.\n",
+ "\n",
+ "[print()](https://www.w3schools.com/python/ref_func_print.asp) ist eine BuiltIn Funktion, zu diesen später mehr. Es soll aber gesagt sein, dass keinerlei anstrengungen notwendig sind um die Print-Funktion zu verwenden, da Python sie von Haus aus kennt.\n",
+ "\n",
+ "## Hello World\n",
+ "\n",
+ "Schauen wir uns nun folgend ein einfaches Programm an:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "3733ea3b-12b5-4c1c-9b03-0f1c397babfc",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-5f71f94cf9d603e2",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Hello World\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(\"Hello World\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "708d34f1-a479-4277-90e7-14d67a8c688a",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-d49c16a44b1d3984",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Der Teil in den Klammern ist der Wert den wir ausgeben wollen in diesem Fall eine einfache Zeichenkette (auch dazu später mehr).\n",
+ "\n",
+ "Damit zu ersten **Aufgabe**: Geben Sie den Text `Hallo Python` aus. *1 Punkt*"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "88b8d4db-6f4c-411c-b8ad-d2d6ca0b427c",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-cd36c0330024bfe5",
+ "locked": false,
+ "points": 1,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Hallo Python\n"
+ ]
+ }
+ ],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "print(\"Hallo Python\")\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ad8d06df-5d3d-4203-b17c-227a663c8e7b",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-95b07b67b0ede718",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "# Datentypen und Variablen\n",
+ "\n",
+ "Python unterstützt verschiedene Datentypen. Zu diesen Zählen :\n",
+ "1. Integer (Ganze Zahlen) $$\\mathbb{Z} = \\{1,-1,2,-2,3,-3,\\dots\\}$$\n",
+ "2. Floatings Point Numbers (Fließkommazahlen) $$\\pi = 3.141592653589793$$\n",
+ "3. Strings (Zeichenketten)\n",
+ "> \"Ich bin eine Zeichenkette\"\n",
+ "\n",
+ "4. Listen\n",
+ "> [Objekt1, Objekt2, 42]\n",
+ "\n",
+ "5. Dictionaries\n",
+ "> {\"Schlüssel1\": \"Wert1\", \"Schlüssel2\": \"Wert2\",}\n",
+ "\n",
+ "6. Sets\n",
+ "> {\"Wert1\", 7, \"Zeichenkette\"}\n",
+ "\n",
+ "7. Tupel\n",
+ "> (42, 7)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "313d37b0-52ad-4de4-9fc5-0f362bfe7284",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-12a63250c85469f1",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "## Zahlentypen (Floats, Integers)\n",
+ "\n",
+ "### Aufgabe 1-1: Zuweisungen von Variablen"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "65dae625-2f0b-46d2-803c-c3d6c54000f7",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-782aef1600674714",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Eine Definition und Zuweisung eines Wertes zu einer Variablen erfolgt über den `=` Operator."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "fca50dd5-4a56-451a-9a1a-6cbd8d76519a",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-7b71098cec169f0f",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "**Aufgabe** *2 Punkte*: \n",
+ "\n",
+ "Definieren Sie zunächst die zwei Variablen `a` und `b` und initialisieren diese mit einem Integerwert ungleich `0`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "d7d24e44-8581-4c5c-a723-83b9f7e418ac",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-7be930fd387f1043",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "scrolled": true,
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "a = 1\n",
+ "b = -2\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "8cfd850c-02c7-4b32-b20c-e37f5eb4fe8b",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-d44ec6114b65557c",
+ "locked": true,
+ "points": 2,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "assert isinstance(a, int)\n",
+ "assert isinstance(b, int)\n",
+ "\n",
+ "assert a != 0\n",
+ "assert b != 0"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "337fbcc5-c960-4206-83d1-605d05a51d5d",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-2f79b7b52775db8b",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "**Aufgabe** *2 Punkte*:\n",
+ "\n",
+ "Definieren Sie zwei Variablen `s` und `t` und initialisieren diese mit einem Floatwert ungleich `0`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "03b7469a-4f59-437f-aa8f-797d200b41a1",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-7d48f9bed0df944d",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "s = 1.5\n",
+ "t = -2.7\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "45404bbe-2026-491d-9aef-9d3ee8894adf",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-3b426f39262c1e03",
+ "locked": true,
+ "points": 2,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "assert isinstance(s, float)\n",
+ "assert isinstance(t, float)\n",
+ "\n",
+ "assert s != 0\n",
+ "assert t != 0"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5452589d-5997-4e8f-b8bb-363925c6166a",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-8690aecc1748ad4a",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### Aufgabe 1-2: Operationen auf Zahlen\n",
+ "\n",
+ "Aus der Schule sollten die folgenden Grunlegenden Operationen die sich auf Zahlen ausführen lassen bekannt sein:\n",
+ "\n",
+ "1. Addition $\\Rightarrow a+b=c$\n",
+ "2. Subtraktion $\\Rightarrow a-b=c$\n",
+ "3. Multiplikation $\\Rightarrow a\\cdot b=c$\n",
+ "4. Division $\\Rightarrow\\frac{a}{b} = c$\n",
+ "> Teilt man zwei Integer durcheinander werden diese erst in Floats umgewandelt und dann als Float gespeichert: $$10/3=3.3333333333$$\n",
+ "> Die Integer Division (Ganzzahl Division $\\lfloor\\frac{a}{b}\\rfloor$) (Notiert mit \"//\") zweier Zahlen schneidet den Rest nach dem Komma ab: $$10//3\\equiv 3$$\n",
+ "\n",
+ "5. Modulus $\\Rightarrow a\\mod b \\equiv c$\n",
+ "> \"Teilen mit Rest\" (in Python notiert mit \"%\" hat nichts mit Prozenten zutun) funktioniert genauso wie man die Uhr lesen würde. Ist es 15 Uhr sagt man im Sprachgebrauch 3 Uhr (Mittags). Der Modulus Operator funktioniert genauso. $$15 \\mod 12 \\equiv 3$$\n",
+ "\n",
+ "6. Exponentation $\\Rightarrow a^b = c$\n",
+ "> In Python notiert mit \"a**b\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9e408960-4180-4e92-ba88-ebf39441dfa7",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-c4551eabf148e18e",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "**Aufgabe** *2 Punkte*:\n",
+ "\n",
+ "Addieren Sie die Werte der Variablen `a` und `b` und speichern Sie das Ergebnis in der Variable `c`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "6aaa0c05-ae16-4c48-b841-79931dae94bd",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-2ff97153b6652687",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "-1"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "c = a + b\n",
+ "# END SOLUTION\n",
+ "c"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "2fa4d7f2-235d-411e-956c-4ff335705124",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-3ba3833c7220bbb7",
+ "locked": true,
+ "points": 1,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "assert isinstance(c, int)\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "assert a + b == c\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "9fccb90e-1f22-46b9-99a1-14b64274ece5",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-f80a3165c27dc297",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "**Aufgabe** *5 Punkte*:\n",
+ "\n",
+ "Nutzen Sie die Variablen `a` & `b` und Speichern Sie die Ergebnisse für die Multiplikation, Division, Ganzzahldivision, Exponentiation und den Modulo-Operator in den unten angegebenen Variablen:\n",
+ "\n",
+ "\\begin{align}\n",
+ "m &= a\\cdot b\\\\\n",
+ "d &= \\frac{a}{b}\\\\\n",
+ "i &= \\lfloor\\frac{a}{b}\\rfloor\\\\\n",
+ "e &= a^b\\\\\n",
+ "r &= a\\; \\textrm{mod}\\; b\n",
+ "\\end{align}\n",
+ "\n",
+ "\n",
+ "Die Ausführung der anderen arithmetischen Operationen in Python erfolgt analog. Eine Übersicht können Sie [hier](https://www.python-kurs.eu/operatoren.php) entnehmen."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "30ce28b3-b97d-4b3f-bac0-6d01356dcc60",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-3f3640eaf7ee2dd3",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "### BEGIN SOLUTION\n",
+ "m = a*b\n",
+ "d = a/b\n",
+ "i = a//b\n",
+ "e = a**b\n",
+ "r = a%b\n",
+ "### END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "95108d9d-4cba-489b-bdbc-ed5c71316ac8",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-804a957c4a02e824",
+ "locked": true,
+ "points": 5,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "assert m == a*b\n",
+ "assert d == a/b\n",
+ "assert i == a//b\n",
+ "assert e == a**b\n",
+ "assert r == a%b\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "444c4633-9186-497f-88a7-e2ec0013dff4",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-7ac5c4d8e6463b16",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "## Sequentielle Datentypen\n",
+ "\n",
+ "Sequentielle Datentypen sind ein wichtiger Bestandteil in der Programmierung. Dazu gehören Listen, Tupel und Strings.\n",
+ "\n",
+ "Wichtige Eigenschaften dieser Datentypen sind:\n",
+ "- Die Elemente von Listen, Strings oder Tupeln sind in einer bestimmten Reihenfolge angeordnet (Diese entspricht der Ordnung in der die Elemente eingefügt worden).\n",
+ "- Der Zugriff (Lesen und Schreiben) dieser Objekte erfolgt über Indizes (Das erste Element eines Sequentiellen Datentypes ist immer `0`).\n",
+ "- Zugriff auf Elemente kann auch Rückwärts erfolgen das letzte Element wird dann mit `-1` ausgelesen. \n",
+ "\n",
+ "Beispiel für eine Liste:\n",
+ "`some_list = [\"a\", \"b\", \"c\"]`\n",
+ "\n",
+ "Beispiel für ein Tupel:\n",
+ "`some_tuple = (1, 2, 3)`\n",
+ "\n",
+ "Beispiel für ein String:\n",
+ "`some_string = \"Python ist cool!\"`\n",
+ "\n",
+ "### Aufgabe 2-1: Strings\n",
+ "\n",
+ "Zeichenketten, Text oder Strings lassen sich in Python mit `'Text'`, `\"Text\"` oder der Funktion `str()` definieren.\n",
+ "\n",
+ "**Aufgabe** *2 Punkte*:\n",
+ "\n",
+ "Ein String-Objekt (Text) können sie mit Hilfe von `'Some Text'` oder `\"Some Text2\"` definieren. Definieren sie die Variable `text` mit einem beliebigen Text."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "f8028cf5-0dc4-4e72-a98e-3e18705c8c98",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-73a9beb04648359b",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "text = \"Hi Mom, I am on TV!\"\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "7a6832ae-e6c7-4230-b3ca-b1f1f90345fb",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-1677fa4f3b4eec12",
+ "locked": true,
+ "points": 1,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "assert isinstance(text, str)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8e10cd2a-53dc-485f-bbdd-aa2709574660",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-05f0b0cd1211c396",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Python Strings lassen sich mit verschiedenen mitteln formatieren. Dazu zählt die [format-Funktion](https://www.w3schools.com/python/ref_string_format.asp) \n",
+ "\n",
+ "**Aufgabe** *1 Punkte*:\n",
+ "\n",
+ "Geben Sie die Variablen `a` & `b` aus Aufgabe 1 im format `\"a = 12 und b = 12\"` (Die Werte sollen dann den Werten aus ihrer Definition entsprechen. 12 ist hier nur ein Beispiel) aus."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "d3efbadb-3c33-40eb-9260-8f8b11faaf75",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-c94a5b5e9f73479e",
+ "locked": false,
+ "points": 1,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "a = 1 und b = -2\n"
+ ]
+ }
+ ],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "print(\"a = {} und b = {}\".format(a, b))\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d860edba-749c-41c0-827b-0c68ba6fd00a",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-e4c5420224d04f6a",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### Aufgabe 2-2: Listen \n",
+ "\n",
+ "Listen lassen sich mit der Funktion `list()` oder `[]` definieren und können eine \"unendliche\" Menge an Elementen unterschiedlichen Datentyps speichern. Die Liste `[420, \"Hallo Jupyter\", 0.222]` ist eine Korrekt definierte Liste. Im Allgemeinen ist es Ratsam listen mit gleichem Datentyp zu füllen, da dies bei der Verarbeitung zu Problemen führen kann."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "51416edc-4c96-437c-a1ff-c458f06c9e8a",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-36d12824040df91e",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "**Aufgabe** *1 Punkte*: \n",
+ "\n",
+ "Definieren Sie die Variable `l` und weisen Sie dieser Variable eine Liste mit aufsteigenden Integerwerten von `0` bis `4` zu."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "b361ee09-cd48-4c16-89ea-714ee8ab541f",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-89d74b5c210fc331",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "l = list(range(5))\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "65fcfdb4-58ff-47d3-bebd-d3786a971af2",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-589caab43851d55a",
+ "locked": true,
+ "points": 1,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "assert isinstance(l, list)\n",
+ "assert l == [0, 1, 2, 3, 4]\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a6dfba7d-4bb5-4530-bb75-689843a718a8",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-5ca56027cd6a5698",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "**Aufgabe** *1 Punkte*:\n",
+ "\n",
+ "Hängen Sie der Liste `l` noch den Wert `42` an.\n",
+ "\n",
+ "Hinweis: Nutzen Sie dafür die Methode [.append](https://www.w3schools.com/python/ref_list_append.asp)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "e39e50dc-3d97-4579-aeb4-04ec2de3dbb3",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-853db222010bee68",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "l.append(42)\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "53000a6c-1187-48b0-b038-129d434cc45a",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-c1aca9603460d1de",
+ "locked": true,
+ "points": 1,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "assert l == [0, 1, 2, 3, 4, 42]\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4510d2f3-3386-4d33-baa5-1d684ab52370",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-c58e5530e380c09a",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Zugriff auf Elemente eines Sequentiellen Datentypes lassen sich über `[]` realisieren.\n",
+ "\n",
+ "Beispiel - Zugriff auf das erste Element einer Liste:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 114,
+ "id": "259d73e8-eca3-4172-8a0a-1efbbe3b527b",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-cb1b7e8055910efc",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0"
+ ]
+ },
+ "execution_count": 114,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "l[0]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bf6d1243-9650-4c27-b3dc-86a2d48b3abc",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-1d8edfe975ed19bf",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "**Aufgabe** *1 Punkte*:\n",
+ "\n",
+ "Geben Sie das dritte Element der Liste `l` aus.\n",
+ "\n",
+ "Hinweis: Achten Sie darauf das der erste Index immer `0` ist. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 115,
+ "id": "358a0b51-3bfa-4e65-9cd4-ee2e7f8bc9d5",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-a386250119dc89fb",
+ "locked": false,
+ "points": 1,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2\n"
+ ]
+ }
+ ],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "print(l[2])\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2f25fa6d-9a72-464b-ada6-d2630dd03e92",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-0ff369c64d2f8c24",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "**Aufgabe** *1 Punkte*:\n",
+ "\n",
+ "Geben Sie das vorletzte Element der Liste `l` aus.\n",
+ "\n",
+ "Hinweis: Achten Sie darauf das der letzte Index mit `-1` ausgegeben wird"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 116,
+ "id": "16ec2e20-e28e-41de-8f85-1091e41bb401",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-2394235b49ebb749",
+ "locked": false,
+ "points": 1,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "4\n"
+ ]
+ }
+ ],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "print(l[-2])\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "291522bc-9c4d-4348-b2cb-99f9653168fa",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-c8fe8cb9d2ca1028",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### Aufgabe 2-3: Dictionaries\n",
+ "\n",
+ "Das Dictionary ist ein Datentyp, welcher Schlüssel-Werte-Paare speichert. Dabei wird ein Dictionary mit `dict()` oder `{\"Schlüssel1\": \"Wert1\"}` initalisiert. Wichtig ist hierbei das ein Dictionary nicht mit `{}` initialisiert werden kann da dies die Notation für das **Set** Objekt ist.\n",
+ "\n",
+ "**Aufgabe** *1 Punkte*:\n",
+ "\n",
+ "Initialisieren Sie die Dictionary Variable `my_dict` mit folgendem Mapping:\n",
+ "\n",
+ "| Key | Value |\n",
+ "|:----|:------|\n",
+ "| `\"apple\"` | `\"Apfel\"` |\n",
+ "| `\"banana\"` | `\"Banane\"` |\n",
+ "| `\"cherry\"` | `\"Kirsche\"` |"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "c17338bb-c6df-493c-9d88-0e9ea36a755d",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-86ce3695bf3f6780",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "### BEGIN SOLUTION\n",
+ "my_dict = {\"apple\": \"Apfel\", \"banana\": \"Banane\", \"cherry\": \"Kirsche\"}\n",
+ "### END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 118,
+ "id": "a367442e-2c8c-4d32-8acb-5bccf94d64fb",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-969a9415b60857a8",
+ "locked": true,
+ "points": 1,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "assert isinstance(my_dict, dict)\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "assert my_dict == {\"apple\": \"Apfel\", \"banana\": \"Banane\", \"cherry\": \"Kirsche\"}\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8ec10cc1-4b8b-4b53-b1d1-991d6287abda",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-0f5df3b99a4774ba",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "**Aufgabe** *1 Punkte*:\n",
+ "\n",
+ "Fügen Sie nun das Key-Value Paar `\"pear\": \"Birne\"` zu `my_dict` hinzu."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 119,
+ "id": "d3aac185-2d6e-4b30-b247-89be8aeeab7d",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-ed3cf3b9d6a8ad58",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "### BEGIN SOLUTION\n",
+ "my_dict[\"pear\"] = \"Birne\"\n",
+ "### END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 120,
+ "id": "c377ec37-b382-4f83-a9cc-829a44b7682e",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-9735fc9ff4416c4c",
+ "locked": true,
+ "points": 1,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "assert my_dict == {\"apple\": \"Apfel\", \"banana\": \"Banane\", \"cherry\": \"Kirsche\", \"pear\": \"Birne\"}\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "2b3cfdf2-6864-402c-9ded-9fd0c7c489ee",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-957ca6c50c1cfb70",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Für gewisse Anwendungen reicht es nur die Schlüssel (oder Werte) aus einem Dictionary zu haben. Dazu bietet das Dictionary die Funktionen `.keys()` (für eine Liste der Schlüssel) und `.values()` (für eine Liste der Werte).\n",
+ "\n",
+ "**Aufgabe** *1 Punkte*:\n",
+ "\n",
+ "Geben Sie die nur die Werte des Dictionaries `my_dict` aus."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 20,
+ "id": "03f2c31a-04b4-4dc7-ab00-476cec6922ad",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-f190c63e28ae9e82",
+ "locked": false,
+ "points": 1,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "dict_values(['Apfel', 'Banane', 'Kirsche'])\n"
+ ]
+ }
+ ],
+ "source": [
+ "### BEGIN SOLUTION\n",
+ "print(my_dict.values())\n",
+ "### END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6e774e49-895b-4bb2-9436-cddb75a3d46d",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-5bd0f8a189d6db1c",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Wichtiger für die meisten Probleme ist die Dictionary Funktion `.items()` diese gibt eine Liste an Tupeln mit den Schlüssel Werte Paaren aus.\n",
+ "\n",
+ "**Aufgabe** *1 Punkte*:\n",
+ "\n",
+ "Geben Sie die Elemente des Dictionaries `my_dict` mit der Funktion `.items()` aus. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "a399cf66-43eb-4749-8864-18c5e4202f79",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-03afb00cc074d1ef",
+ "locked": false,
+ "points": 1,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "dict_items([('apple', 'Apfel'), ('banana', 'Banane'), ('cherry', 'Kirsche')])\n"
+ ]
+ }
+ ],
+ "source": [
+ "### BEGIN SOLUTION\n",
+ "print(my_dict.items())\n",
+ "### END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a8d62b7e-ae53-4bd7-a930-84508c3948f9",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-83b1e45bc901dc68",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "# Funktionen\n",
+ "\n",
+ "Mit einigen Funktionen haben wir uns bereits befasst dazu zählen `print()`, `.keys()` und alle weiteren die diesem Schema folgen.\n",
+ "\n",
+ "In diesem Kapitel wollen wir uns mit dem Aufbau von Funktionen befassen. Dabei folgt jede Funktion folgendem Aufbaue:\n",
+ "\n",
+ "```python\n",
+ "def some_function_name(param1, param2):\n",
+ " a = do_something1(param1)\n",
+ " b = do_something2(a, param2)\n",
+ " do_something3(b)\n",
+ " return b\n",
+ "```\n",
+ "\n",
+ "Das `def`-Schlüsselwort leitet die Definition einer Funktion ein, gefolgt von dem Funktionsnamen, den Eingabeparametern der Funktion in runden Klammern und einem Doppelpunkt. Wichtig ist, dass die Anweisungen innerhalb der Funktion eingerückt sein müssen. Das Ergebnis (oder die Ergebnisse) werden mit Hilfe des `return`-Schlüsselworts gekennzeichnet.\n",
+ "\n",
+ "**Aufgabe** *1 Punkte*:\n",
+ "\n",
+ "Schreibe eine Funktion `successor` die auf jede Eingabe `+1` rechnet."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "1a151db2-617c-48f4-969b-3bafb45b1fd1",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-c6a731a4a13b2bbc",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "def successor(n):\n",
+ " return n+1\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 124,
+ "id": "615a98b6-139e-485b-874e-d0a70cd22517",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-00693d8d9c92af76",
+ "locked": true,
+ "points": 1,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "assert successor(1) == 2\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d6f47a61-b692-4f46-8ccc-83af10189f93",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-9c358751403a1986",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "**Aufgabe** *1 Punkte*:\n",
+ "\n",
+ "Schreibe eine Funktion `add` mit den Eingabeparametern `a` & `b`, welche die Werte von `a` & `b` miteinander addiert."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "id": "3f101d21-aa1a-4bf3-aadf-bb4e41d8fe12",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-2b72cf583fed9b8c",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "def add(a,b):\n",
+ " return a+b\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "1d155c26-0875-4a71-8564-a4a0e0e3bb70",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-7a24b5cfd7fc9990",
+ "locked": true,
+ "points": 1,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "assert add(1,2) == 3\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d77ab363-9fe0-4504-b43b-6f7894666525",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-0fd1dbfed99faa8a",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "# Kontrollstruckturen\n",
+ "\n",
+ "## Aufgabe 3-1: Conditionals - If-Else\n",
+ "\n",
+ "Um Entscheidungen treffen zu können nutzt man in Python das Kommando `if ` ist der Ausdruck wahr wird der darauf folgende Code ausgeführt.\n",
+ "\n",
+ "Liste von möglichen Ausdrücken:\n",
+ "\n",
+ "- `a == b` checkt ob die Werte `a` & `b` gleich sind\n",
+ "- `a != b` checkt ob die Werte `a` & `b` **nicht** gleich sind\n",
+ "- `a > b` checkt ob der Wert `a` größer als `b` ist (Analog dazu \"größer gleich\" `a >= b`)\n",
+ "- `a < b` checkt ob der Wert `a` kleiner als `b` ist (Analog dazu \"kleiner gleich\" `a <= b`)\n",
+ "- `not ` invertiert das Ergebnis des Ausdruckes, also aus einem wahren Ausdruck wird ein falscher und andersherum.\n",
+ "\n",
+ "Zur Verkettung von Ausdrücken:\n",
+ "\n",
+ "- ` and ` checkt ob die Ausdrücke `ausdruck1` & `ausdruck2` wahr also erfüllt sind\n",
+ "- ` or ` checkt ob einer der Ausdrücke `ausdruck1` & `ausdruck2` wahr also erfüllt sind\n",
+ "\n",
+ "Beispiel:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 25,
+ "id": "4363cda5-98c5-4424-8fb3-7c92e1994993",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-020d46673782a358",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "You're the Number One\n"
+ ]
+ }
+ ],
+ "source": [
+ "zahl = 1\n",
+ "if zahl == 1:\n",
+ " print(\"You're the Number One\")\n",
+ "\n",
+ "if zahl == 2:\n",
+ " print(\"You Lose\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "21a23914-d0b7-492d-bcfe-8ecde9c20c85",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-aa2d59d677afd5a3",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Das Kommando `else` funktioniert nur zusammen mit dem `if` Kommando und bietet dem Programm eine Art \"Fall Back\":"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "3eaf3062-ae81-48c0-802d-88a72db587be",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-f4124dd62687158f",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "You're not the Number One\n"
+ ]
+ }
+ ],
+ "source": [
+ "zahl = 5\n",
+ "if zahl == 1:\n",
+ " print(\"You're the Number One\")\n",
+ "else:\n",
+ " print(\"You're not the Number One\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7e35f339-3f59-4fd6-a162-e6eb0379c778",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-167fb232c7163fe6",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Um auf mehrere Ausdrücke zu checken kann das `elif` verwendet werden. Es findet seinen Platz zwischen `if` & `else`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 27,
+ "id": "e37dd53c-e375-4548-9563-c8c6664dfdd0",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-0c0312666fa7648f",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "You're the Number Two\n"
+ ]
+ }
+ ],
+ "source": [
+ "zahl = 2\n",
+ "if zahl == 1:\n",
+ " print(\"You're the Number One\")\n",
+ "elif zahl == 2:\n",
+ " print(\"You're the Number Two\")\n",
+ "elif zahl == 2:\n",
+ " print(\"You're the Number Three\")\n",
+ "else:\n",
+ " print(\"You're not the Number One\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5248404d-4717-462d-a67f-57431e599945",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-060bd6eb927fa8b1",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "**Aufgabe** *1 Punkte*:\n",
+ "\n",
+ "Schreibe eine Funktion `is_odd` mit einem Eingabeparameter `n` die prüft ob die eingegebene Zahl ungerade ist.\n",
+ "\n",
+ "Wenn die Zahl gerade ist gebe den Text `\"Gerade Zahl\"` und bei ungerade `\"Ungerade Zahl\"` zurück."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "id": "d4b1cef3-6222-438d-bbc3-243431fad0cb",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-77afd241bc69d6b1",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "def is_odd(n):\n",
+ " if n % 2 == 0:\n",
+ " return \"Gerade Zahl\"\n",
+ " else:\n",
+ " return \"Ungerade Zahl\"\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "id": "141d73da-90e6-401a-a651-ad14635de5b7",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-d8541ba8c61147c3",
+ "locked": true,
+ "points": 1,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "assert is_odd(2).lower() == \"Gerade Zahl\".lower()\n",
+ "assert is_odd(3).lower() == \"Ungerade Zahl\".lower()\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c0086b8c-da02-4fdf-8341-9c0518bb6406",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-69409d8dcfe070e1",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "## Aufgabe 3-2: Sequentielles - While Loop\n",
+ "\n",
+ "*7 Punkte*\n",
+ "\n",
+ "Schleifen sind wichtig um eine Aufgabe öfter zu wiederholen. \n",
+ "\n",
+ "Schauen wir uns dazu zunächst den `while`-loop an. Die Syntax schaut wie folgt aus:\n",
+ "\n",
+ "```python\n",
+ "while :\n",
+ " do_something()\n",
+ "```\n",
+ "\n",
+ "Solange der Ausdruck nach dem `while` wahr ist wird die Schleife ausgeführt. **!Vorsichtig!** solange der Ausdruck wahr bleibt und nie falsch wird hört die Schleife nie auf zu laufen.\n",
+ "\n",
+ "**Aufgabe**: Schreibe eine Funktion `fubar` mit Eingabeparameter `n`.\n",
+ "Die Funktion soll wie folgt definiert sein:\n",
+ "\n",
+ "- Der Eingabeparameter `n` ist ein Integer, Floats geben `False` zurück\n",
+ "- Negative zahlen & 0 beenden die Funktion und geben `False` zurück\n",
+ "- Die Funktion zählt bis einschließlich dem Eingabeparameter\n",
+ " bsp.: $n=9 \\rightarrow 1, 2, 3, \\dots, 9$\n",
+ "- Bei jedem Schleifendurchlauf soll die Zahl bei der sich die Schleife gerade befindet mittels `print` ausgegeben werden werden.\n",
+ "- Ist der zurzeitige Schleifendurchlauf durch `3` teilbar, gebe mittels `print` denn String `Foo` aus.\n",
+ "- Ist der zurzeitige Schleifendurchlauf durch `5` teilbar, gebe mittels `print` denn String `Bar` aus.\n",
+ "- Ist der zurzeitge Schleifendurrchlauf durch `3 & 5` teilbar, gebe mittels `print` den String `FooBar` aus.\n",
+ "\n",
+ "**Tipp**: Implementiere nicht alles aufeinmal sollte Schritt für Schritt und teste deine Lösung nach jedem Schritt.\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "id": "d1f074e2-c036-445c-97f6-618f5aa4cedb",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-0796f3b2cbac6f8e",
+ "locked": false,
+ "points": 4,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "def fubar(n: int):\n",
+ " if isinstance(n, float) or n < 1:\n",
+ " return False\n",
+ "\n",
+ " count = 1\n",
+ " while count <= n:\n",
+ " msg = count\n",
+ " if count % 3 == 0:\n",
+ " msg = \"Foo\"\n",
+ " if count % 5 == 0:\n",
+ " msg = \"Bar\"\n",
+ " if count % 15 == 0:\n",
+ " msg = \"FooBar\"\n",
+ " \n",
+ " count += 1\n",
+ " print(msg, end=', ')\n",
+ " \n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "id": "22784528-9205-4575-84ef-0060732cd053",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-f7774d4246e958a6",
+ "locked": true,
+ "points": 3,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Fubar to 4\n",
+ "1, 2, Foo, 4, \n",
+ "Fubar to 6\n",
+ "1, 2, Foo, 4, Bar, Foo, \n",
+ "Fubar to 16\n",
+ "1, 2, Foo, 4, Bar, Foo, 7, 8, Foo, Bar, 11, Foo, 13, 14, FooBar, 16, \n",
+ "Fubar to 200\n",
+ "1, 2, Foo, 4, Bar, Foo, 7, 8, Foo, Bar, 11, Foo, 13, 14, FooBar, 16, 17, Foo, 19, Bar, Foo, 22, 23, Foo, Bar, 26, Foo, 28, 29, FooBar, 31, 32, Foo, 34, Bar, Foo, 37, 38, Foo, Bar, 41, Foo, 43, 44, FooBar, 46, 47, Foo, 49, Bar, "
+ ]
+ }
+ ],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "print(\"Fubar to 4\")\n",
+ "fubar(4)\n",
+ "print(\"\\nFubar to 6\")\n",
+ "fubar(6)\n",
+ "print(\"\\nFubar to 16\")\n",
+ "fubar(16)\n",
+ "print(\"\\nFubar to 200\")\n",
+ "fubar(50)\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "assert fubar(-1) == False\n",
+ "assert fubar(0) == False\n",
+ "assert fubar(.1) == False\n",
+ "### END HIDDEN TESTS"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.12.7"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/Material/wise_24_25/lernmaterial/2.Tutorial_2.ipynb b/Material/wise_24_25/lernmaterial/2.Tutorial_2.ipynb
new file mode 100644
index 0000000..1d831bb
--- /dev/null
+++ b/Material/wise_24_25/lernmaterial/2.Tutorial_2.ipynb
@@ -0,0 +1,1481 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "079afb70-639e-4955-8ca7-1c290cbf08a9",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-7057e40105900012",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "# 2. Programmierübung: Python Tutorial\n",
+ "\n",
+ "
\n",
+ "
\n",
+ " Willkommen zur ersten Programmierübung Einführung in Python 3.\n",
+ "
\n",
+ " \n",
+ "
\n",
+ "\n",
+ "Wenn Sie Fragen oder Verbesserungsvorschläge zum Inhalt oder Struktur der Notebooks haben, dann können sie eine E-Mail an Phil Keier ([p.keier@hbk-bs.de](mailto:p.keier@hbk-bs.de?subject=[SigSys]%20Feedback%20Programmierübung&)) oder Martin Le ([martin.le@tu-bs.de](mailto:martin.le@tu-bs.de?subject=[SigSys]%20Feedback%20Programmierübung&)) schreiben.\n",
+ "\n",
+ "Link zu einem Python Spickzettel: [hier](https://s3.amazonaws.com/assets.datacamp.com/blog_assets/PythonForDataScience.pdf)\n",
+ "\n",
+ "Der Großteil des Python-Tutorials stammt aus der Veranstaltung _Deep Learning Lab_ und von [www.python-kurs.eu](https://www.python-kurs.eu/python3_kurs.php) und wurde für _Signale und Systeme_, sowie _Einführung in die Programmierung für Nicht Informatiker_ angepasst."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "85fd88de-a9ee-4149-8bed-1b8ebc0bbad4",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-26e0f96baeb79aac",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "# Kontrollstruckturen\n",
+ "\n",
+ "## Sequentielles - For Loop\n",
+ "\n",
+ "Python verwendet eine spezielle Form des 'for-loops' dabei handelt es sich sprachlich um den 'for-each loop'.\n",
+ "\n",
+ "Mittlerweile hat jede nennenswerte Programmiersprache das Konzept des 'for-each loops' auf seine Weise implementiert. Python hingegen nutzt diesen als Standard. Sprachen wie JavaScript, C/C++, etc. verwenden standardmässig eine 'Zählschleife', dabei wird meist von '0' angefangen bis zu einem Grenzwert 'n' gezählt.\n",
+ "\n",
+ "Ein schönes beispiel bietet hierfür JavaScript:\n",
+ "\n",
+ "```js\n",
+ "for (let i = 0; i < arr.length; i++) {\n",
+ " // do something\n",
+ "} \n",
+ "```\n",
+ "\n",
+ "Zu lesen ist dies wie folgt: \"Für ein i mit dem Wert 0 (let i = 0), zähle bis i größer die Länge von Array arr (i < arr.length) und erhöhe nach jedem Schleifendurchlauf den Wert von i um 1 (i++)\"\n",
+ "\n",
+ "In Python sehe selbiger Code wie folgt aus:\n",
+ "\n",
+ "```python\n",
+ "for i in range(0,len(arr)):\n",
+ " # do something\n",
+ "```\n",
+ "\n",
+ "Zu lesen ist dies wie folgt: \"Für jedes (for each) i in dem Intervall/Menge 0 bis arr.length mach etwas\"\n",
+ "\n",
+ "Der Unterschied besteht darin das Python jedes Element einer Menge durchläuft, der Catch liegt darin das es absolut unabhängig davon ist wie die Menge aussieht. Widmen wir uns zunächst einer Aufgabe:"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7215a3e7-a240-43ec-914c-10221d8b28b0",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-80add6da9914f961",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### Aufgabe \n",
+ "\n",
+ "*3 Punkte*\n",
+ "\n",
+ "Schreibe eine Funktion `sum_up` mit Eingabeparameter `n`, welcher die Zahlen von `1...n` aufsummiert.\n",
+ "\n",
+ "Nutze dafür einen `for-loop`.\n",
+ "\n",
+ "**Beispiel**:\n",
+ "\n",
+ "$$n = 5$$ \n",
+ "$$sum\\_up(5) \\rightarrow 1 \\rightarrow 1 + 2 = 3 \\rightarrow 3 + 3 = 6 \\rightarrow 6 + 4 = 10 \\rightarrow 10 + 5 = 15$$\n",
+ "\n",
+ "Hinweis: die Funktion `range()` zählt standardmässig von `0...n-1`. Schauen Sie sich gerne dazu die offizielle Dokumentation an [PEP 204](https://peps.python.org/pep-0204/#list-ranges)."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 12,
+ "id": "5426ddf1-2d2f-4c92-b007-2f6eca61703f",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-d43ef87a62b03cdf",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "def sum_up(n: int) -> int:\n",
+ " count = 0\n",
+ " for i in range(1,n+1):\n",
+ " count += i\n",
+ " return count\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 13,
+ "id": "3c38a839-3ab0-466c-98f9-189c35fc5025",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-cff511e86dce0377",
+ "locked": true,
+ "points": 3,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "15\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "print(sum_up(5))\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "for n in range(3,12):\n",
+ " assert sum(range(n+1)) == sum_up(n)\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4e6dfa94-18b9-4fb2-830a-83202d034752",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-02370acddb67290d",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Nachdem wir nun gelernt haben wie man mit der Built-In Funktion 'range' zählen kann, schauen wir uns folgend ein paar Beispiele an wie in Python eigentlich Iteriert werden soll.\n",
+ "\n",
+ "#### Beispiel 1 - Iterieren über eine Liste:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "db89c7c5-6efc-49bb-be92-414a7334ed84",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-dd3ea63dd3b1d927",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "square_numbers = [1,4,9,16,25,36]\n",
+ "for number in square_numbers:\n",
+ " print(number)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6413a239-c334-491e-8062-7f78f75182fe",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-9bc7f123a8fb7680",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "#### Beispiel 2 - Iterieren über ein Dictionary:\n",
+ "\n",
+ "Erweitern wir Beispiel 1 und arbeiten nun mit einem Dictionary. Dieses Besteht wie Sie noch aus dem ersten Tutorial Wissen immer aus 'key-value' paaren. Mit der Built-In Funktion `.items()` bekommen wir ein Tuple an Werten zurück, welches erst entpackt werden muss. Dazu behilft uns der 'for-loop' indem einfach 2 variabeln gleichzeitig deklariert werden. (Achtung! Mit `.items()` werden die 'key-value' paare als '(key, value)' zurückgegeben)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "116ce552-a5c0-4c9c-8d89-fe1f3e40bdba",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-72122af8e519273b",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "square_numbers_dict = {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36}\n",
+ "\n",
+ "for key, value in square_numbers_dict.items():\n",
+ " print(key, \"->\" , value)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b4e748de-0603-41c9-8282-86e92923e358",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-52b4d0167c7fb9ba",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "#### Beispiel 3 - Iteration mit Zählen:\n",
+ "\n",
+ "Die Built-In Funktion `enumerate()` [PEP 279](https://peps.python.org/pep-0279/) ermöglicht das Zählen und gleichzeitige iterieren über eine Liste.\n",
+ "Dabei wird wieder ein Tuple zurückgegeben welches die Form '(index, value)' annimmt."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "8cbf9142-2cf3-4579-9e19-799ee9b25a54",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-29953c29ed4bcdcf",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "alphabet = [\"a\", \"b\", \"c\", \"d\"]\n",
+ "for index, buchstabe in enumerate(alphabet):\n",
+ " print(index, \"->\", buchstabe)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4add1ce5-e462-4be3-8bd7-9960d86ae780",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-b64ce270167d3025",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Mit den traditionellen Mitteln lässt sich der absolut Selbe Output generieren. Das verwenden von `enumerate()` ist jedoch eleganter:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "d2e8274b-00d4-4042-adbf-937aea8f0e7e",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-8b2e3cb4e0c977f2",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "alphabet = [\"a\", \"b\", \"c\", \"d\"]\n",
+ "for index in range(len(alphabet)):\n",
+ " print(index, \"->\", alphabet[index])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b504f072-53ce-4d03-9f72-b4d4ba85ae74",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-5e8d9fc47a709ba4",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### Aufgabe\n",
+ "\n",
+ "*2 Punkte*\n",
+ "\n",
+ "Ihnen ist das Dictionary `dict2` gegeben. Ändern Sie jeden Wert in dem Dictionary nach der Formel $f(x) = x^3-1$ mittels `for-loop`.\n",
+ "\n",
+ "Tipp: Lassen Sie sich nicht von den Schlüsseln verwirren."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 36,
+ "id": "abd323c0-5e1b-4c14-a65a-9d54a06f3a80",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-0361320c63b2cb03",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "dict2 = {\"a\": 56, 5: 12, \"python\": 9, 3.14: 1.141414}\n",
+ "### BEGIN SOLUTION\n",
+ "dict2 = {key: value**3-1 for key, value in dict2.items()}\n",
+ "### END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 37,
+ "id": "7e0f9ac4-c5d4-44b6-a2fc-db98e2b46356",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-82eec3cba623ab8f",
+ "locked": true,
+ "points": 2,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{'a': 175615, 5: 1727, 'python': 728, 3.14: 0.48706374396146557}\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "print(dict2)\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "d = {\"a\": 56, 5: 12, \"python\": 9, 3.14: 1.141414}\n",
+ "d = {key: value**3-1 for key, value in d.items()}\n",
+ "assert d == dict2\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ecc21f6a-2ea0-41a0-9e56-04faae5a0fc6",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-9ffa970f1cdac592",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Mit dem Unterstrich `_` als Zählvariable werden `for`-loops gekennzeichnet die ihre Zählvariable nicht verwenden:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "786461b8-ecf9-4afb-8b93-6186f53f6e97",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-8316e1e4eaa0ea0b",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Python is Nice!\n",
+ "Python is Nice!\n",
+ "Python is Nice!\n"
+ ]
+ }
+ ],
+ "source": [
+ "for _ in range(3):\n",
+ " print(\"Python is Nice!\")"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7fd320aa-6bb5-4b9b-9593-2df69cb2ca1e",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-cb8f33d1ae55a6a4",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "## List Comprehension\n",
+ "\n",
+ "Seit dem Proposal von [PEP 202](https://peps.python.org/pep-0202/) gibt es in Python die List Comprehension.\n",
+ "\n",
+ "Für diese Vorlesung ist es nicht nötig das Sie die Syntax anwenden können, Sie sollten zumindest verstehen wie diese funktioniert.\n",
+ "\n",
+ "Angenommen wir haben folgende Mathematische beschreibung einer Menge $$\\{x^2 \\vert x \\in \\mathbb{N}\\}$$\n",
+ "\n",
+ "Dies beschreibt die Funktion $f(x) = x^2$ für alle natürlichen Zahlen.\n",
+ "\n",
+ "In Python ist es möglich genau diese Menge in einer einzigen Zeile Abzubilden. Dazu wird die List Comprehension verwendet deren Syntax im allgemeinen folgende Form hat:\n",
+ "\n",
+ "```python\n",
+ "[ for value in ]\n",
+ "```\n",
+ "\n",
+ "Schauen wir uns dazu an wie wir die Quadrat Zahlen von `1...6` also `1...36` erzeugen."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "7bcdc9d9-cc5b-49be-8cfb-ca40eb3b7796",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-4fd6f801463c5ea6",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "squared = [n*n for n in range(1,7)]\n",
+ "print(squared)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b6dcb24c-e01e-4522-8ac4-074adfe6105a",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-c6922240434c9d3a",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Probieren Sie sich gerne selber aus.\n",
+ "\n",
+ "### Zusatzaufgabe \n",
+ "\n",
+ "*Keine Punkte*\n",
+ "\n",
+ "Erstellen Sie eine List mittels List Comprehension, welche die Zahlen `1...6` auf deren kubische Zahl `1...216` also der Funktion $f(x) = x^3$ abbildet."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "id": "522f3228-1797-4ca2-9103-44fce48dfd4a",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-1dc645632c5f653a",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "cubics = []\n",
+ "### BEGIN SOLUTION\n",
+ "cubics = [n**3 for n in range(1,7)]\n",
+ "### END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "id": "7dc19b9f-116b-4741-a798-a66d495d477e",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-4e441b6db861559e",
+ "locked": true,
+ "points": 0,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[1, 8, 27, 64, 125, 216]\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "print(cubics)\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "c = [n**3 for n in range(1,7)]\n",
+ "assert c == cubics\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5b1355f0-29ed-4318-92f2-51f151c7946e",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-7d9eebd920496d59",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "# System Interactions\n",
+ "\n",
+ "Im folgenden Abschnitt beschäftigen wir uns mit dem Eingeben von Daten in ein Programm. Dies geschieht entweder 'von Hand', also über den Benutzer, oder über Dateien."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "976a7ad0-856d-4fb6-bba8-485668df22a2",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-e2df7221e04e8c54",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Im Normalfall wollen wir größere Datenmengen einlesen. Dazu nutzen wir die Built-In Funktion `open` ([Python Docs - Open](https://docs.python.org/3/library/functions.html?highlight=open#open)). Auch wenn in der Doku viele Parameter stehen benötigt man im Normalfall nur zwei. Der erste ist der Name der File, der zweite im welchem Modus die Datei geöffnet werden soll (Angegeben als String).\n",
+ "\n",
+ "Zum bearbeiten der Datei nutzen wir den Python Kontext Manager - das `with`-Statement. Bei externen Daten ist es immer wichtig die Datei auch wieder zu schließen, damit es nicht zu Datenverlust oder Arbeitsspeichermüll kommt. Daher ist der Lebenzyklus einer Datei in einem Programm immer `Datei öffnen` -> `Datei Bearbeiten` -> `Datei schließen`. Kommt es in einer der Drei schritte zu einem Fehler, bleibt die Datei im RAM hängen und der Computer muss neu gestartet werden um diesen Speicher wieder Frei zu geben.\n",
+ "\n",
+ "Daher gibt es Kontext Manager. Dieser versichert dem Programmierer, dass das schließen der Datei immer (!!) passiert. Die Syntax folgt folgender Strucktur:\n",
+ "\n",
+ "```python\n",
+ "with as :\n",
+ " # do something\n",
+ "```\n",
+ "\n",
+ "Dabei ist `` ein Objekt (für uns eine Datei) und `` die Zuweisung zu einer Variablen. Für die Funktion `open` (im Lesemodus) sieht der Kontext wie folgt aus:\n",
+ "\n",
+ "```python\n",
+ "with open(\"filename.txt\", \"r\") as f:\n",
+ " f.readlines() # do something with f\n",
+ "```"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a345cdf5-d1a0-4bd8-9f77-06e6d4562e00",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-58fb9b7e476f3ef2",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### Aufgabe\n",
+ "\n",
+ "*2 Punkte*\n",
+ "\n",
+ "Erstellen und Öffnen sie eine Datei `testfile.txt` mit der `open` Funktion, nutzen Sie dafür das `with`-Statement.\n",
+ "\n",
+ "Schreiben Sie in diese Datei 100 mal den String `\"Python\\n\"`. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "f11f7a0b-bcca-4db0-a6ca-bf95c70c7303",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-0735bb589edcc6a8",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "with open('testfile.txt', 'w') as f:\n",
+ " for _ in range(100):\n",
+ " f.write(\"Python\\n\")\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "c91e07bb-fc41-42c1-8b42-0aca56c57c35",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-2592f8b51914455e",
+ "locked": true,
+ "points": 2,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "with open('testfile.txt', 'r') as f:\n",
+ " lines = f.readlines()\n",
+ " assert len(lines) == 100\n",
+ " for line in lines:\n",
+ " assert line == 'Python\\n'\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "4adb5400-8749-4790-ae49-68a8622b4a3d",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-39769ee8cbf2157d",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### Aufgabe\n",
+ "\n",
+ "*2 Punkte*\n",
+ "\n",
+ "Öffnen Sie die zuvor erstellte Datei `testfile.txt` im Lesemodus und weißen Sie den Inhalt der `.readlines()` Funktion der Variabeln `lines` zu. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 19,
+ "id": "adf300e9-ee63-4da1-a6f3-c768fa2b5fc9",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-0a3b9e01dd66e134",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "lines = None\n",
+ "# BEGIN SOLUTION\n",
+ "with open('testfile.txt', 'r') as f:\n",
+ " lines = f.readlines()\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 24,
+ "id": "229499d6-bb33-492b-af5d-a26ab3b3f5d4",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-aa7c104b5f3f2572",
+ "locked": true,
+ "points": 2,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Anzahl der gelesenen Zeilen: 100\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "print(\"Anzahl der gelesenen Zeilen:\", len(lines))\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "with open('testfile.txt', 'r') as f:\n",
+ " assert f.readlines() == lines\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "47d92dde-16a1-4c11-a452-cadd74255db2",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-be695e1423a6ccf4",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "## Import Statement\n",
+ "\n",
+ " \n",
+ "\n",
+ "Da wir nicht immer das Rad neu erfinden wollen nutzen wir Bibliotheken von anderen Entwicklern.\n",
+ "\n",
+ "Dazu nutzt man das Keyword `import` gefolgt von dem Modul welches man Importieren möchte. Nutzen wir als Beispiel `numpy`"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "ced37c65-87d2-48d0-a0ba-4674dcaf104c",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-7d19506e181bcda9",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import numpy"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f5506975-e1cd-434a-8ef1-05a7a06992df",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-b7d981325bea8b84",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Möchte man nun eine Funktion aus dem Modul nutzen folgt die Syntax der Strucktur `.`. Dazu folgendes Numpy Beispiel:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "69c68b31-d0f7-469b-ae54-eef871ec6ad6",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-25ad372a576a793e",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "numpy.array(range(100))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7c5d65db-d1e8-4cad-884e-bb595c57d445",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-0176c541098f7c21",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### Aufgabe\n",
+ "\n",
+ "*3 Punkte*\n",
+ "\n",
+ "Importiere Python Built-In Library `random` und rufe zuerst aus dem Modul die Funktion `seed` auf mit dem Eingabewert `42`, und weiße danach der Variable `rand` den Wert des Funktionsaufrufes von `randint(1,100)` zu. "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 21,
+ "id": "0d80bc9f-6923-4e3f-8a70-909548e693a6",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-8ccc5fe1848176c8",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "rand = None\n",
+ "# BEGIN SOLUTION\n",
+ "import random\n",
+ "random.seed(42)\n",
+ "rand = random.randint(1,100)\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "id": "ada0211b-03bf-463a-b932-2bad621d5559",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-d7817c3dd1ee34f9",
+ "locked": true,
+ "points": 3,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "82\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "print(rand)\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "assert rand == 82\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f7b3bdcc-825e-4607-8804-a5ce3d39ace5",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-2cc1d2ed682d1b0e",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Das Keyword `as` ist bereits bekannt, dieses kann auch verwendet werden um Module beim import umzubennen. Dies ist dann Hilfreich wenn Module lange Namen haben.\n",
+ "\n",
+ "Numpy wird im Internet immer mit np abgekürzt. Beispiel:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f115eae9-500b-448e-a1be-e3b43ffad0fd",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-60f357d6dda4a8d3",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "import numpy as np\n",
+ "np.array(range(100))"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f7570244-0fea-4683-a19c-069f6ba619dd",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-94fb7e92492a12f7",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### Aufgabe\n",
+ "\n",
+ "*1 Punkt*\n",
+ "\n",
+ "Importieren Sie die Built-In Library `datetime` als `dt`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 26,
+ "id": "e7e6c246-6dc4-4555-a202-73887b5f8249",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-59dc2ded4f59471f",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "import datetime as dt\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 28,
+ "id": "b03ee34b-8520-4106-a23f-4419e54dcfcc",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-d77ffdb7f9ba178d",
+ "locked": true,
+ "points": 1,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2024-11-01 19:32:22.691479\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "print(dt.datetime.now()) # UTC Time also Standard Greenwich Zeit\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "assert 'dt' in dir()\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "1cc39ffb-1207-4aa8-a4fe-51df2335fea6",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-c55653efe0a77419",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Möchte man nur eine Bestimmte Funktion aus einem Modul haben nutzt man die `import from` Syntax. Beispiel Pretty Print:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 29,
+ "id": "638e6c20-7bba-4862-9acc-34031bae8514",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-f84e2596969633f5",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "{0: 1,\n",
+ " 1: 2,\n",
+ " 2: 4,\n",
+ " 3: 8,\n",
+ " 4: 16,\n",
+ " 5: 32,\n",
+ " 6: 64,\n",
+ " 7: 128,\n",
+ " 8: 256,\n",
+ " 9: 512,\n",
+ " 10: 1024,\n",
+ " 11: 2048,\n",
+ " 12: 4096,\n",
+ " 13: 8192,\n",
+ " 14: 16384,\n",
+ " 15: 32768,\n",
+ " 16: 65536,\n",
+ " 17: 131072,\n",
+ " 18: 262144,\n",
+ " 19: 524288}\n"
+ ]
+ }
+ ],
+ "source": [
+ "from pprint import pprint\n",
+ "pprint({n: 2**n for n in range(20)})"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "c1e077c1-59a5-411b-bf71-32ea66dc731d",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-0ac2347c47ff5774",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "### Aufgabe\n",
+ "\n",
+ "*2 Punkte*\n",
+ "\n",
+ "Importieren Sie die Funktion `sqrt` aus dem Built-In Modul `math`.\n",
+ "Berechnen Sie $\\sqrt4$. Speichern Sie das Ergebnis in der variablen `s4`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "id": "81838f9b-558c-49b3-90ef-647e28380a97",
+ "metadata": {
+ "editable": true,
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-7c1ea8bca61d5c12",
+ "locked": false,
+ "schema_version": 3,
+ "solution": true,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [],
+ "source": [
+ "# BEGIN SOLUTION\n",
+ "from math import sqrt\n",
+ "s4 = sqrt(4)\n",
+ "# END SOLUTION"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "id": "6d984a74-a93d-4865-b6d1-d2dec8586907",
+ "metadata": {
+ "nbgrader": {
+ "grade": true,
+ "grade_id": "cell-83c667de468e9ef8",
+ "locked": true,
+ "points": 2,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "2.0\n"
+ ]
+ }
+ ],
+ "source": [
+ "# Hier werden die Loesungen getestet...\n",
+ "print(s4)\n",
+ "### BEGIN HIDDEN TESTS\n",
+ "assert 'sqrt' in dir()\n",
+ "assert int(s4) == 2\n",
+ "### END HIDDEN TESTS"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "6edf5dce-17d2-4a5f-9d96-2c7c3091de88",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-814b3bfa4b6e049a",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "source": [
+ "Ein letzter Hinweis: Es gibt auch die Möglichkeit in der `import from` Syntax das Keyword `as` zu verwenden.\n",
+ "\n",
+ "Beispiel aus dem Modul `dataclasses` importiert `dataclass` als `dclass`:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "b707bf52-546f-4689-8216-c5ad0b9665a7",
+ "metadata": {
+ "nbgrader": {
+ "grade": false,
+ "grade_id": "cell-9961359e9d09d79b",
+ "locked": true,
+ "schema_version": 3,
+ "solution": false,
+ "task": false
+ },
+ "slideshow": {
+ "slide_type": ""
+ },
+ "tags": []
+ },
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "\n"
+ ]
+ }
+ ],
+ "source": [
+ "from dataclasses import dataclass as dclass\n",
+ "print(dclass)"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.12.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/Material/wise_24_25/lernmaterial/4.NumPy_MatPlotLib.ipynb b/Material/wise_24_25/lernmaterial/4.NumPy_MatPlotLib.ipynb
index a729404..35e6c6f 100644
--- a/Material/wise_24_25/lernmaterial/4.NumPy_MatPlotLib.ipynb
+++ b/Material/wise_24_25/lernmaterial/4.NumPy_MatPlotLib.ipynb
@@ -48,7 +48,7 @@
"source": [
"# Was ist NumPy\n",
"\n",
- "NumPy steht für *Numerical Python*, ist OpenSource und wird mittlerweile von nahezu jedem Python Entwickeler verwendet. Dabei ist das Core Feature von NumPy seine effiziente Implementierung eines n-dimensionales Arrays in C, welches in Python verwendet werden kann. Hinzu kommt eine Hülle an Funktionen wie effiziente Zufallsalgorithmen und mathematische Funktionen aus den unterschiedlichten Bereichen der Statistik und numerischen Berechnung, welche alle für NumPy Arrays Optimiert sind. Im folgenden wollen wir den Umgang mit NumPy Arrays lernen. \n",
+ "NumPy steht für *Numerical Python*, ist OpenSource und wird mittlerweile von nahezu jedem Python Entwickeler verwendet. Dabei ist das Core Feature von NumPy seine effiziente Implementierung eines n-dimensionales Arrays in C, welches in Python verwendet werden kann. Hinzu kommt eine Hülle an Funktionen wie effiziente Zufallsalgorithmen und mathematische Funktionen aus den unterschiedlichten Bereichen der Statistik und numerischen Berechnung, welche alle für NumPy Arrays optimiert sind. Im Folgenden wollen wir den Umgang mit NumPy Arrays lernen. \n",
"\n",
"__Für dieses Notebook schauen Sie bitte in die [NumPy Docs](https://numpy.org/doc/stable/reference/index.html)!!!__ Dort sind alle Funktionen beschrieben die wir hier bearbeiten und noch mehr!\n",
"\n",
@@ -71,7 +71,7 @@
"source": [
"# Was ist Matplotlib\n",
"\n",
- "Matplotlib ist eine Python Bibliothek zum (interaktiven) Visualisieren von Daten. Die Bibliothek intergiert sich super mit anderen viel Benutzten Python Bibliotheken wie NumPy. Der Vorteil in Kombination mit Jupyter besteht in der direkten Ausgabe eines Plots auf dem Bildschirm.\n",
+ "Matplotlib ist eine Python Bibliothek zum (interaktiven) Visualisieren von Daten. Die Bibliothek integriert sich gut mit anderen viel benutzten Python Bibliotheken wie NumPy. Der Vorteil der Kombination mit Jupyter besteht in der direkten Ausgabe eines Plots auf dem Bildschirm.\n",
"\n",
"__Nutzen Sie für diese Aufgabe gerne die [Matplotlib Reference](https://matplotlib.org/stable/users/index.html)__\n",
"\n",
@@ -150,13 +150,13 @@
"source": [
"# Was ist ein Array?\n",
"\n",
- "Ein Array ist eine kontinuierliche Datenstrucktur. Dabei werden die Daten in Reihe im Arbeitsspeicher hinterlegt, vergleichbar mit der Python Liste.\n",
+ "Ein Array ist eine kontinuierliche Datenstruktur. Dabei werden die Daten in Reihe im Arbeitsspeicher hinterlegt, vergleichbar mit der Python Liste.\n",
"\n",
"## Erstellen von Arrays\n",
"\n",
"Alle folgenden Beispiele finden Sie im [Beginners Guide](https://numpy.org/doc/stable/user/absolute_beginners.html).\n",
"\n",
- "Für unser erstes Beispiel erstellen wir aus einer Python liste ein [NumPy Array](https://numpy.org/doc/stable/reference/arrays.html)."
+ "Für unser erstes Beispiel erstellen wir aus einer Python Liste ein [NumPy Array](https://numpy.org/doc/stable/reference/arrays.html)."
]
},
{
@@ -306,7 +306,7 @@
}
},
"source": [
- "Diese Datenstrucktur wird Allgemein auch Matrix gennant. Der Zugriff auf ein Element einer Matrix folgt nach dem Prinzip \"Spalte->Reihe\". Die erste Spalte ist demnach:"
+ "Diese Datenstruktur wird Allgemein auch Matrix gennant. Der Zugriff auf ein Element einer Matrix folgt nach dem Prinzip \"Spalte->Reihe\". Die erste Spalte ist demnach:"
]
},
{
@@ -353,7 +353,7 @@
}
},
"source": [
- "Der zugriff auf ein einzelnes element erfolgt dann analog:"
+ "Der Zugriff auf ein einzelnes Element erfolgt dann Analog:"
]
},
{
@@ -400,7 +400,7 @@
}
},
"source": [
- "Oder mit der NumPys eigener Syntax `arr[, ]`"
+ "Oder mit NumPys eigener Syntax `arr[, ]`"
]
},
{
@@ -449,12 +449,12 @@
"source": [
"## Platzreservierung\n",
"\n",
- "Falls bekannt ist wie viele Elemente ein Array im späteren Programmverlauf haben soll, bietet einem NumPy die möglichkeit diesen Platz im speicher gewissermaßen zu reservieren.\n",
+ "Falls bekannt ist, wie viele Elemente ein Array im späteren Programmverlauf haben soll, bietet einem NumPy die Möglichkeit diesen Platz im Speicher gewissermaßen zu reservieren.\n",
"Hierfür gibt es einige Funktionen.\n",
"\n",
"### Ones\n",
"\n",
- "1 Dimensionales NumPy Array der größe 10 mit 1 gefüllt:"
+ "1 Dimensionales NumPy Array der Größe 10 mit 1 gefüllt:"
]
},
{
@@ -552,7 +552,7 @@
"source": [
"### Empty\n",
"\n",
- "Analog mit zufälligen Werten (bzw. Werte die bereits an der Speicherstelle waren, meistens 0):"
+ "Analog mit zufälligen Werten (bzw. Werte, die bereits an der Speicherstelle waren, meistens 0):"
]
},
{
@@ -812,7 +812,7 @@
"\n",
"*1 Punkt*\n",
"\n",
- "Erstellen Sie ein NumPy Array mit 11 Elementen mittels `linspace`, Dabei soll der Startwert = -4 und der Endwert = 17 sein. Speichern Sie das Ergbniss in der Variablen `x_scale`. "
+ "Erstellen Sie ein NumPy Array mit 11 Elementen mittels `linspace`. Dabei soll der Startwert = -4 und der Endwert = 17 sein. Speichern Sie das Ergbniss in der Variablen `x_scale`. "
]
},
{
@@ -912,8 +912,8 @@
"Wie dem [Getting Started](https://matplotlib.org/stable/users/getting_started/index.html#getting-started) Beispiel zu entnehmen, wollen wir einmal die Sinus Funktion plotten.\n",
"\n",
"Dazu brauchen wir zwei Attribute:\n",
- "1. Die x-Skala - Dies kann die Länge eines Datensets sein, oder ein allegemeiner Linespace. Aufjedenfall eine Liste bzw. Array.\n",
- "2. Die y-Skala - Im Allgemeinen die Werte eines zu plottenden Datensets. Aufjedenfall auch eine Liste bzw. Array.\n",
+ "1. Die x-Skala - Dies kann die Länge eines Datensets sein, oder ein allgemeiner Linespace. Auf jeden Fall eine Liste bzw. Array.\n",
+ "2. Die y-Skala - Im Allgemeinen die Werte eines zu plottenden Datensets. Auf jeden Fall auch eine Liste bzw. Array.\n",
"\n",
"Plotten wir im Folgenden die Sinus Funktion. Eine der schönen Eigenschaften der Sinus Funktion ist, dass diese sich nach dem Intervall $[0...2\\pi]$ wiederholt. Daher enthält die x-Skala einen linespace von $[0...2\\pi]$. Als Wert für $\\pi$ wird die NumPy Konstante [np.pi](https://numpy.org/doc/stable/reference/constants.html#numpy.pi) verwendet.\n",
"\n",
@@ -1027,7 +1027,7 @@
"source": [
"## Aufgabe - Erster eigener Plot Square Root\n",
"\n",
- "Analog zu voheriger Erklärung Plotten Sie im folgenden die Funktion Square Root Mathematisch definiert als $f(x) = \\sqrt x; \\quad x \\geq 0$.\n",
+ "Analog zu voheriger Erklärung plotten Sie im folgenden die Funktion Square Root, Mathematisch definiert als $f(x) = \\sqrt x; \\quad x \\geq 0$.\n",
"\n",
"Gehen Sie dabei wie folgt vor:\n",
"1. Definieren Sie einen **geeigneten** [Linespace](https://numpy.org/doc/stable/reference/generated/numpy.linspace.html#numpy-linspace) für die Zahlenraum 0...100. (Tipp: Achten Sie auf die Definition! Die Wurzel ist nur für positive Zahlen definiert.)\n",
@@ -1087,9 +1087,9 @@
"source": [
"# Styling\n",
"\n",
- "Da bei mehreren Plots der Überblick schnell verloren geht beschäftigen wir uns im folgenden mit dem Styling. Dabei gehen wir im Schnelldurchlauf durch alle Parameter.\n",
+ "Da bei mehreren Plots der Überblick schnell verloren geht, beschäftigen wir uns im folgenden mit dem Styling. Dabei gehen wir im Schnelldurchlauf durch alle Parameter.\n",
"\n",
- "Die Grundlage für alle folgenden Plots werden in nächster Zelle gesetzt."
+ "Die Grundlage für alle folgenden Plots werden in der nächsten Zelle gesetzt."
]
},
{
@@ -1129,7 +1129,7 @@
"source": [
"## Farbe ändern\n",
"\n",
- "Die Standard Farbe für den ersten Plot ist immer Blau. Um die Farbe zu verändern wird `plt.plot` der Parameter `color` übergeben. Dieser erwartet einen String. Für eine genauere Erläuterung lesen Sie die Dokumentation zu [Specifying color](https://matplotlib.org/stable/users/explain/colors/colors.html). Für dieses Notebook werden die Beispiele mit den \"Single Character Shorthands\" (Aus der Dokumentation zu entnehmen) ausgestattet.\n",
+ "Die Standard Farbe für den ersten Plot ist immer Blau. Um die Farbe zu verändern wird `plt.plot` der Parameter `color` übergeben. Dieser erwartet einen String. Für eine genauere Erläuterung, lesen Sie die Dokumentation zu [Specifying color](https://matplotlib.org/stable/users/explain/colors/colors.html). Für dieses Notebook werden die Beispiele mit den \"Single Character Shorthands\" (Aus der Dokumentation zu entnehmen) ausgestattet.\n",
"\n",
"Plotten wir den Sinus nun in Rot:"
]
@@ -1181,7 +1181,7 @@
"source": [
"## Titel für den Plot setzen\n",
"\n",
- "Dafür wird [plt.title](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.title.html) der Paramter wird als String übergeben:"
+ "Dafür wird [plt.title](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.title.html) der Paramter als String übergeben:"
]
},
{
@@ -1232,7 +1232,7 @@
"source": [
"## Legende und Labels\n",
"\n",
- "Um eine Legende anzuzeigen muss vor `plt.show` die Funktion [plt.legend](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html) aufgerufen werden. Damit dies Wirkung zeigt braucht muss jeder Plot mit dem Parameter `label` (als String) ausgezeichnet werden. Plotten wir im Folgenden den Sinus und Kosinus mit entsprechenden Labels."
+ "Um eine Legende anzuzeigen, muss vor `plt.show` die Funktion [plt.legend](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.legend.html) aufgerufen werden. Damit dies Wirkung zeigt, muss jeder Plot mit dem Parameter `label` (als String) ausgezeichnet werden. Plotten wir im Folgenden den Sinus und Kosinus mit entsprechenden Labels."
]
},
{
@@ -1284,7 +1284,7 @@
"source": [
"## Linestyle\n",
"\n",
- "Die letze wichtige Eigenschaft ist das Setzen eines Linestyles. Dazu wird `plt.plot` der parameter `linestyle` als String übergeben. Entnehmen Sie die verschiednen Linestyles bitte der Dokumentation zu [Linestyles](https://matplotlib.org/stable/gallery/lines_bars_and_markers/linestyles.html).\n",
+ "Die letze wichtige Eigenschaft ist das Setzen eines Linestyles. Dazu wird `plt.plot` der Parameter `linestyle` als String übergeben. Entnehmen Sie die verschiedenen Linestyles bitte der Dokumentation zu [Linestyles](https://matplotlib.org/stable/gallery/lines_bars_and_markers/linestyles.html).\n",
"\n",
"Sinus als `dashed` line:"
]
@@ -1338,12 +1338,12 @@
"\n",
"*8 Punkte*\n",
"\n",
- "In der nächsten Aufgabe wollen wir gleich zwei Funktionen Plotten. $f(x) = \\sqrt x; x \\geq 0$ und $g(x) = x^2$.\n",
+ "In der nächsten Aufgabe wollen wir gleich zwei Funktionen plotten. $f(x) = \\sqrt x; x \\geq 0$ und $g(x) = x^2$.\n",
"\n",
"Gehen Sie dabei wie folgt vor:\n",
"1. Definieren Sie einen geeigneten [Linespace](https://numpy.org/doc/stable/reference/generated/numpy.linspace.html#numpy-linspace) für die Zahlenraum 0...3. (Tipp: Achten Sie auf die Definition! Die Wurzel ist nur für positive Zahlen definiert.)\n",
"2. Berechnen Sie mittels der Funktion [np.sqrt](https://numpy.org/doc/stable/reference/generated/numpy.sqrt.html#numpy.sqrt) die Werte für die Wurzel.\n",
- "3. Berechnen Sie mittels der Funktion [np.square](https://numpy.org/doc/stable/reference/generated/numpy.square.html#numpy-square) die Werte für die Quadrat Zahlen\n",
+ "3. Berechnen Sie mittels der Funktion [np.square](https://numpy.org/doc/stable/reference/generated/numpy.square.html#numpy-square) die Werte für die Quadratzahlen\n",
"4. Geben Sie den beiden Plots die Farben Grün & Rot. Nutzen Sie gerne die [Color Shorthands](https://matplotlib.org/stable/users/explain/colors/colors.html) aus der Dokumentation.\n",
"5. Plotten Sie die Square Funktion mit dem Linestyle `dashdot`, wie der Dokumentation zu entnehmen [Linestyles](https://matplotlib.org/stable/gallery/lines_bars_and_markers/linestyles.html)\n",
"6. Geben Sie den beiden Plots angemessene Labels.\n",
@@ -1424,7 +1424,7 @@
"source": [
"# Warum Zufall?\n",
"\n",
- "Für statistische Analysen jeglicher Art ist es wichtig seine Werkzeuge zu verstehen. Da nicht immer direkt ein Dataset vorliegt oder dieses zurzeit noch im Erstellungsprozess ist, gibt es die Möglichkeit die mathematischen und programmatischen Werzeuge zuvor an nachvollziebaren Zufallsdaten zu testen. Dabei wollen wir in dieser Übung lernen, was Zufall ist, wie Zufallsgeneratoren funktionieren und wie der Zufall auf bestimmte Art manipuliert werden kann.\n",
+ "Für statistische Analysen jeglicher Art ist es wichtig seine Werkzeuge zu verstehen. Da nicht immer direkt ein Dataset vorliegt, oder dieses zurzeit noch im Erstellungsprozess ist, gibt es die Möglichkeit, die mathematischen und programmatischen Werzeuge zuvor an nachvollziebaren Zufallsdaten zu testen. Dabei wollen wir in dieser Übung lernen, was Zufall ist, wie Zufallsgeneratoren funktionieren und wie der Zufall auf bestimmte Art manipuliert werden kann.\n",
"\n",
"---"
]
@@ -1478,11 +1478,11 @@
"\n",
"Wenn $ c = 0 $ dann nennt man den Generator auch _Multiplicative Congruent Generator (MCG)_.\n",
"\n",
- "Die Werte haben folgenden nutzen in der Funktion:\n",
+ "Die Werte haben folgenden Nutzen in der Funktion:\n",
"\n",
"- $X_n$ ist der Startwert oder seed\n",
- "- $X_{n+1}$ ist der folgewert der im nächsten schritt für $X_n$ eingesetzt wird\n",
- "- $a$ ist der Vorfaktor vom Startwert dieser wird skaliert, deshalb wird er skalar gennant\n",
+ "- $X_{n+1}$ ist der Folgewert der im nächsten Schritt für $X_n$ eingesetzt wird\n",
+ "- $a$ ist der Vorfaktor vom Startwert. Dieser wird skaliert, deshalb wird er Skalar gennant\n",
"- $c$ ist das hinzuaddierte Offset\n",
"- $m$ ist der Restklassenring oder auch Modulus genannt"
]
@@ -1508,7 +1508,7 @@
"Schreibe einen _Linear Congruent Generator_ mit dem funktionsnamen `lcg`.\n",
"\n",
"- Nutze die oben gegebene Definition\n",
- "- Checke auch das Werte nicht verwendet werden dürfen (Bsp. $n \\geq 0$)\n",
+ "- Prüfe auch, das Werte nicht verwendet werden dürfen (Bsp. $n \\geq 0$)\n",
"- `lcg` muss ein unendlicher Generator sein"
]
},
@@ -1666,9 +1666,9 @@
" \n",
"
\n",
" \n",
- "
Linear Congruent Generators zeichnen sich durch ihre Stabilität und Geschwindigkeit als Hervorragende Zufallsgeneratoren. Doch 2014 gelang Melissa E. O'Neil ein neuer durchbruch in der Konzeption von Pseudozufallsgeneratoren. Das Problem mit existierenden Zufallsgeneratoren ist entweder ihre Stabilität (Wie vorhersehbar die Zufallszahlen sind) oder ihrer Geschwindigkeit (Wie lange der Zufallsgenerator braucht um die nächste Zufallszahl zu errechnen).
\n",
- "
Ihr Durchbruch gelang indem Sie die Vorteile eines Linear Congruent Generators mit dem eines XorShift Generators verband. Dadurch erreichte Sie nicht nur eine Normalverteilung in den generierten Zufallszahlen (und eine damit einhergende Stabilität), Sie hatte auch eine Family von schnellen einfachen Algorithmen entwickeln. Diese nennen sich PCG - Permuted Congruential Generator.
Linear Congruent Generators zeichnen sich durch ihre Stabilität und Geschwindigkeit als Hervorragende Zufallsgeneratoren. Doch 2014 gelang Melissa E. O'Neil ein neuer Durchbruch in der Konzeption von Pseudozufallsgeneratoren. Das Problem mit existierenden Zufallsgeneratoren ist entweder ihre Stabilität (Wie vorhersehbar die Zufallszahlen sind) oder ihre Geschwindigkeit (Wie lange der Zufallsgenerator braucht um die nächste Zufallszahl zu errechnen).
\n",
+ "
Ihr Durchbruch gelang, indem Sie die Vorteile eines Linear Congruent Generators mit dem eines XorShift Generators verband. Dadurch erreichte Sie nicht nur eine Normalverteilung in den generierten Zufallszahlen (und eine damit einhergende Stabilität), Sie hatte auch eine Family von schnellen einfachen Algorithmen entwickelt. Diese nennen sich PCG - Permuted Congruential Generator.
\n",
"\n",
"\n",
@@ -1697,8 +1697,8 @@
"\n",
"- Gegeben ist der Anfangszustand des Generators.\n",
"- Nutze die Dokumentation und rufe den `default_rng` aus dem `numpy.random` Modul, **20** mal auf speichere die Werte in der variablen `pcgs`. *(Tipp: Nutze ein NumPy Array)*\n",
- "- Sortiere im nächsten Schritt die in `pcgs` gespeicherten Werte und speicher diese in `pcgs_sorted`\n",
- "- Plotte sinnvoll beide Array, gestalte den Plott angemessen."
+ "- Sortiere im nächsten Schritt die in `pcgs` gespeicherten Werte und speichere diese in `pcgs_sorted`\n",
+ "- Plotte sinnvoll beide Array. Gestalte den Plot angemessen."
]
},
{
@@ -1816,7 +1816,7 @@
"\n",
"# Plot Types\n",
"\n",
- "Im folgenden Kapitel beschäftigen wir uns mit verschiedensten Plot typen."
+ "Im folgenden Kapitel beschäftigen wir uns mit verschiedensten Plot Typen."
]
},
{
@@ -1890,9 +1890,9 @@
"source": [
"## Bar Charts\n",
"\n",
- "Beliebt sind Barcharts. Dazu werden aber mehrere Parameter benötigt. Da einfache mathematische Funktionen bei dieser Art Plot keinen Sinn ergeben.\n",
+ "Beliebt sind Barcharts. Dazu werden aber mehrere Parameter benötigt, da einfache mathematische Funktionen bei dieser Art Plot keinen Sinn ergeben.\n",
"\n",
- "Konsultieren wir dafür folgendes Beispiel.\n",
+ "Konsultieren wir dafür folgendes Beispiel:\n",
"\n",
"Wir wollen wissen wie viele Kinder an einer Grundschule in jeder Klassenstufe sind.\n",
"Dazu benötigen wir 2 Listen.\n",
@@ -1984,7 +1984,7 @@
"source": [
"### Bessere Datenrepresentation\n",
"\n",
- "Da die Daten aus `classes` & `kids` miteinander eine Verbindung teilen wäre die Repräsentation mittels Dictionary die klügere Wahl um keine Fehler in den Plot zu bringen.\n",
+ "Da die Daten aus `classes` & `kids` miteinander eine Verbindung teilen wäre, die Repräsentation mittels Dictionary die klügere Wahl, um keine Fehler in den Plot zu bringen.\n",
"\n",
"Mittels der `.keys` & `.values` Funktion auf dem Dictionary lassen sich dann die Daten gezielt plotten.\n",
"\n",
@@ -2167,7 +2167,7 @@
"source": [
"### X-Label\n",
"\n",
- "Analog Dazu die Beschriftung der X-Achse mit `plt.xlabel`."
+ "Analog dazu die Beschriftung der X-Achse mit `plt.xlabel`."
]
},
{
@@ -2508,7 +2508,7 @@
}
},
"source": [
- "Zum setzen von Prozentwerten wird der Parameter `autopct` verwendet. Dieser nutzt einen Format String oder eine Funktion zum definieren der Werte. Schaue dazu für mehr in die Dokumentation für [autpct](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.pie.html#matplotlib-pyplot-pie), eine Dokumentation zu Formatstrings findest du [hier](https://www.geeksforgeeks.org/format-specifiers-in-c/).\n",
+ "Zum Setzen von Prozentwerten wird der Parameter `autopct` verwendet. Dieser nutzt einen Format String oder eine Funktion zum Definieren der Werte. Schaue dazu für mehr in die Dokumentation für [autpct](https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.pie.html#matplotlib-pyplot-pie), eine Dokumentation zu Formatstrings findest du [hier](https://www.geeksforgeeks.org/format-specifiers-in-c/).\n",
"\n",
"Beispiel für Prozentwerte:"
]
@@ -2626,7 +2626,7 @@
}
},
"source": [
- "Zum herausnehmen von Kuchenstücken gibt es den Parameter `explode` dieser erwartet eine Liste mit Fließkommezahlen die zwischen 0.0 - Standardwert und 1.0 - absoluter Explode liegen.\n",
+ "Zum Herausnehmen von Kuchenstücken gibt es den Parameter `explode`. Dieser erwartet eine Liste mit Fließkommazahlen die zwischen 0.0 - Standardwert und 1.0 - absoluter Explode liegen.\n",
"\n",
"Beispiel Klasse 3 ist vom Ursprung 20% entfernt:"
]
@@ -2784,7 +2784,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.12.7"
+ "version": "3.12.5"
}
},
"nbformat": 4,