{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Kapitel 1. Einstieg in die Welt von Python:\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In Ihrer Vorbereitung haben Sie bisher die folgenden Konzepte kennengelernt:\n", "\n", "* Aufbau eines Jupyter-Notebooks (Aufgabe 1).\n", "* Einfache Rechenoperationen (Aufgabe 2 a.)\n", "* Einfache Zeichenketten (engl. Strings) und formatierte Strings (Aufgabe 2 b.).\n", "* Das Definieren von Funktionen (Aufgabe 3.)\n", "* Das Definieren von Messtabellen.\n", "\n", "Hierauf wollen wir an unserem heutigen Versuchstag aufbauen." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Arbeiten mit Messreihen:\n", "\n", "Bisher hat uns das programmieren eher mehr Arbeit gemacht als uns welche abgenommen. Zeitersparnis bekommen wir, wenn wir viele Rechnungen hintereinander ausführen müssen. Hierfür gibt es die **for**-Schleife. Diese Schleife führt die gleichen Zeilen eins Codes wiederholt für die Elemente in einer Liste aus:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2019-11-04T12:07:49.905202Z", "start_time": "2019-11-04T12:07:49.889579Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Wert: 1\n", "Wert: 2\n", "Wert: 3\n", "Wert: 4\n", "Ergebnis: 6\n" ] } ], "source": [ "liste = [1, 2, 3, 4]\n", "\n", "for wert in liste:\n", " print('Wert:', wert)\n", " rechnung = wert + 2\n", "print('Ergebnis:', rechnung)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Bei einer Schleife ist darauf zu achten, dass der Anweisungsblock, welcher wiederholt ausgeführt werden soll, mit 4x Leerzeichen eingrückt wurde. Dies entspricht einmal die **Tab-Taste**:\n", "\n", "" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2019-11-04T12:08:53.901374Z", "start_time": "2019-11-04T12:08:53.885753Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hier läuft das Hauptprogramm\n", "Schleife\n", "Wert: 1\n", "Schleife\n", "Wert: 2\n", "Schleife\n", "Wert: 3\n", "Schleife\n", "Wert: 4\n", "Hier läuft wieder das Hauptprogramm\n", "Letztes Ergebnis + 5: 11\n" ] } ], "source": [ "liste = [1, 2, 3, 4]\n", "print('Hier läuft das Hauptprogramm')\n", "\n", "for wert in liste:\n", " print('Schleife')\n", " print('Wert:', wert)\n", " rechnung = wert + 2\n", " \n", "print('Hier läuft wieder das Hauptprogramm')\n", "rechnung = rechnung + 5\n", "print('Letztes Ergebnis + 5: ', rechnung)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Statt das Ergebnis lediglich per `print`-Anweisung darstellen zu lassen, können wir auch unser Wissen um Listen benutzen und die berechneten Werte einer neuen Liste anfügen:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# (Funktion haben wir bereits in der Vorbereitung definiert)\n", "def Spannung(Strom, Widerstand):\n", " '''\n", " Diese Funktion berechnet die Spannung eines Ohmschen \n", " Widerstands.\n", " \n", " Args:\n", " Strom (float): Der gemessene Strom in mA.\n", " Widerstand (float): Der Wert des verwendeten Widerstands\n", " in Ohm.\n", " \n", " Returns:\n", " float: Die berechnete Spannung in V.\n", " '''\n", " return Widerstand * Strom/1000" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "ExecuteTime": { "end_time": "2019-11-04T12:10:08.503300Z", "start_time": "2019-11-04T12:10:08.472059Z" } }, "outputs": [ { "data": { "text/plain": [ "[10.1, 10.5, 9.8, 8.7, 11.2]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Stromwerte = [101, 105, 98, 87, 112] # mA\n", "Spannungswerte = [] # Einheit? <-- Deshalb Docstrings und Help!\n", "Widerstand = 100 # Ohm\n", "\n", "for Strom in Stromwerte:\n", " res = Spannung(Strom, Widerstand)\n", " Spannungswerte.append(res)\n", "\n", "Spannungswerte" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python ermöglicht uns auch eine kompaktere Schreibweise, die so genannte \"list comprehension\": " ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2019-11-04T12:11:40.799393Z", "start_time": "2019-11-04T12:11:40.783772Z" } }, "outputs": [ { "data": { "text/plain": [ "[10.1, 10.5, 9.8, 8.7, 11.2]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Spannungswerte = [Spannung(Strom, 100) for Strom in Stromwerte]\n", "Spannungswerte" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wir können auch über mehrere Daten gleichzeitig \"loopen\". Hierzu kann die `zip` Anweisung genutzt werden. `zip` verbindet hierbei die einzelnen Elemente einer Liste wie bei einem Reißverschluss miteinander:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2019-11-04T12:12:42.522873Z", "start_time": "2019-11-04T12:12:42.507254Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A und 0\n", "B und 1\n", "C und 2\n", "D und 3\n" ] } ], "source": [ "Werte1 = ['A', 'B', 'C', 'D']\n", "Werte2 = [0, 1, 2, 3]\n", "\n", "for w1, w2 in zip(Werte1, Werte2):\n", " print(w1, ' und ', w2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Dies kann zum Beispiel dann hilfreich sein, wenn sich mehr als eine Variable ändern soll, z.B. bei einer Messreihe für die Schallgeschwindigkeit in Luft:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "ExecuteTime": { "end_time": "2019-11-04T12:13:30.363510Z", "start_time": "2019-11-04T12:13:30.347888Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[335.4904, 347.3442, 343.6145, 337.275, 331.6212, 342.0115, 336.2262]\n", "[335.4904, 347.3442, 343.6145, 337.275, 331.6212, 342.0115, 336.2262]\n" ] } ], "source": [ "# Gemessene Werte:\n", "frequenzen = [30.17, 30.63, 30.01, 29.98, 30.12, 29.87, 29.94] #kHz\n", "wellenlängen = [11.12, 11.34, 11.45, 11.25, 11.01, 11.45, 11.23] # mm\n", "\n", "# Variante 1:\n", "schallgeschindigkeiten = [] # m/s\n", "\n", "for f, l in zip(frequenzen, wellenlängen):\n", " schallgeschindigkeiten.append(f*l)\n", "\n", "print(schallgeschindigkeiten)\n", "\n", "# oder Variante 2:\n", "schallgeschindigkeiten2 = [f*l for f,l in zip(frequenzen, wellenlängen)]\n", "print(schallgeschindigkeiten2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Wir können auch die `zip`-Anweisung mit mehr als nur zwei Listen verwenden:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "ExecuteTime": { "end_time": "2019-11-04T12:13:49.912658Z", "start_time": "2019-11-04T12:13:49.897039Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "a und 1 und x\n", "b und 2 und y\n", "c und 3 und z\n" ] } ], "source": [ "l1 = ['a', 'b', 'c']\n", "l2 = [1, 2, 3]\n", "l3 = ['x', 'y', 'z']\n", "\n", "for i,j,k in zip(l1, l2, l3):\n", " print(i, 'und', j, 'und', k)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "