mirror of
https://gitlab.rlp.net/pgp/pgp1-python-einfuehrung
synced 2024-11-16 13:48:11 +00:00
Finalized Lektion1 split material on other notebooks
This commit is contained in:
parent
17938cf303
commit
68c9aab93b
5 changed files with 927 additions and 537 deletions
|
@ -9,7 +9,7 @@
|
|||
"In diesem Notebook wollen wir Sie mit den Grundlagen des Kurses sowie dem Aufbau des Jupyter-Servers und des Jupyter-Notebooks vertraut machen. Bitte lesen Sie die folgenden Abschnitte aufmerksam durch und vervollständigen Sie die Installation des Kursmaterials am Ende des Notebooks.\n",
|
||||
"\n",
|
||||
"## Das Kursmaterial:\n",
|
||||
"Das Kursmaterial streckt sich über mehrere Lektionen und wird Ihnen die für das Physikalische Grundpraktikum benötigten Grundlagen der Datenauswertung vermitteln. Hierbei fokussieren sich die verschiedenen Lektionen auf verschiedene Aspekte der Datenauswertung mit Python, welche Sie im Zuge des Praktikums benötigen werden. \n",
|
||||
"Das Kursmaterial streckt sich über mehrere Lektionen und wird Ihnen die für das Physikalische Grundpraktikum benötigten Grundlagen der Datenauswertung vermitteln. Hierbei fokussieren sich die verschiedenen Lektionen auf verschiedene Aspekte der Datenauswertung mit Python.\n",
|
||||
"\n",
|
||||
"Das Kursmaterial wird Ihnen hierbei als eine Art „Online-Workshop“ zur Verfügung gestellt. Das bedeutet Sie können die verschiedenen Lektionen sich jederzeit in Eigenverantwortung erarbeiten. Jede Lektion beinhaltet einige Beispiele mit Erklärungen, welche durch kleinere Aufgaben unterstützt werden. Beispiellösungen für die einzelnen Aufgaben befinden sich ebenfalls in den Notebooks. Sollte Ihnen mal eine Aufgabe nicht auf Anhieb gelingen schauen Sie bitte nicht direkt in die Lösungen. Knobeln Sie ruhig erst ein wenig herum und probieren Sie verschiedene Ansätze aus. \n",
|
||||
"\n",
|
||||
|
@ -17,6 +17,8 @@
|
|||
"\n",
|
||||
"Bitte beachten Sie, dass dieser Kurs Ihnen lediglich die Grundalgen liefert und zur Auffrischung Ihrer Kenntnisse gedacht ist. Wir empfehlen Ihnen daher vor beginn des Grundpraktikums bereits einen anderen Kurs, wie zum Beispiel Programmieren für Physiker oder Einführung in die Programmierung, gehört zu haben.\n",
|
||||
"\n",
|
||||
"Sollten Sie mal gar nicht weiterwissen, können Sie sich gerne auch an die Assistenten des Versuchs wenden. Eventuell haben auch einige Ihrer Kommilitonen bereits Erfahrung im Umgang mit Python sammeln können. Sie können die Aufgaben auch gerne in einer Gruppe erarbeiten. Hier sollten Sie jedoch sicherstellen, dass Sie die benötigten Konzepte verstanden haben und diese somit später anwenden können.\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"## Jupyter-Notebooks ausführen\n",
|
||||
"\n",
|
||||
|
@ -28,7 +30,7 @@
|
|||
"\n",
|
||||
"Um Zugang zum Jupyter-Hub zu erhalten, müssen Sie sich zunächst mit Ihrem Uni-Account anmelden. Danach erscheint eine Auswahlseite, auf der Sie die Art der Jupyter Umgebung auswählen. Für das Praktikum ist die Standardumgebung die richtige Wahl, s. Bild unten.\n",
|
||||
"\n",
|
||||
"![images/Screenshot_ZDV_JupyterHub.png](images/Screenshot_ZDV_JupyterHub.png)\n",
|
||||
"![images/Screenshot_ZDV_JupyterHub.png](./images/Screenshot_ZDV_JupyterHub.png)\n",
|
||||
"\n",
|
||||
"Klicken Sie auf die Schaltfläche **Spawn**, dann öffnet sich das Notebook Dashboard.\n",
|
||||
"\n",
|
||||
|
@ -202,13 +204,6 @@
|
|||
"\n",
|
||||
"Wird Jupyterlab statt Jupyter genutzt, dann kann es sein, dass die besondere Formatierung nicht funktioniert. Dies ist kein Problem, da es sich dabei um eine rein optische Verbesserung handelt."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -542,6 +542,290 @@
|
|||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "1f5981ff",
|
||||
"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,
|
||||
"id": "7c1708d8",
|
||||
"metadata": {},
|
||||
"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",
|
||||
"id": "d5d5d551",
|
||||
"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",
|
||||
"<img src=\"images/Tab-Key.png\" alt=\"Tab-Taste\" width=\"80\"/>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "950a88a9",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"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",
|
||||
"id": "98c72ce5",
|
||||
"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": 2,
|
||||
"id": "43275304",
|
||||
"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": null,
|
||||
"id": "8a7692d4",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"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",
|
||||
"id": "c339e688",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Python ermöglicht uns auch eine kompaktere Schreibweise, die so genannte \"list comprehension\": "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "96656272",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"Spannungswerte = [Spannung(Strom, 100) for Strom in Stromwerte]\n",
|
||||
"Spannungswerte"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "c2870b72",
|
||||
"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": null,
|
||||
"id": "51d82509",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"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",
|
||||
"id": "1ceaf5a6",
|
||||
"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": 4,
|
||||
"id": "af93a63c",
|
||||
"metadata": {},
|
||||
"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",
|
||||
"id": "322e67e9",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Wir können auch die `zip`-Anweisung mit mehr als nur zwei Listen verwenden:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"id": "6c8d6f27",
|
||||
"metadata": {},
|
||||
"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",
|
||||
"id": "0f1e9a18",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<div class=task>\n",
|
||||
" \n",
|
||||
"#### Aufgabe 4.b.: Werte berechnen:\n",
|
||||
"Kopieren Sie Ihre Lösung von Aufgabe 4.a. aus der Vorbereitung in das Notebook und berechnen Sie nun für die Messwerte aus Aufgabe 4 a. die Leistung $P$ und den Widerstand $R$ sowie deren Fehler. Nutzen Sie hierfür die ausführliche schrebweise der **for**-Schleife im Fall des Widerstands $R$ und den list-comprehension Syntax für die Leistung $P$. Fügen Sie die berechneten Werte als neue Spalten an die Liste *daten* an. \n",
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"id": "8a0add34",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Hier eine kleine Hilfestellung für den Start:\n",
|
||||
"# Messwerttabelle aus Aufgabe 4. a.:\n",
|
||||
"messwert_nummer = list(range(1,7,1))\n",
|
||||
"spannungs_wert = [12., 11.78, 12.56, 12.34, 12.01, 11.94]\n",
|
||||
"strom_werte = [110, 98, 102, 124, 105, 95]\n",
|
||||
"dspannung_wetre = [0.32, 0.15, 0.63, 0.12, 0.20, 0.17]\n",
|
||||
"dstrom_werte = [10]*len(messwert_nummer)\n",
|
||||
"widerstand = []\n",
|
||||
"\n",
|
||||
"daten = [messwert_nummer, spannungs_wert, strom_werte, dspannung_wetre, dstrom_werte]\n",
|
||||
"\n",
|
||||
"# Beispiel für die Berechnung des Widerstandes:\n",
|
||||
"def res(i, u):\n",
|
||||
" r = u/i\n",
|
||||
" return r\n",
|
||||
"\n",
|
||||
"for strom, spannung in zip(daten[2], daten[1]):\n",
|
||||
" widerstand.append(res(strom, spannung))\n",
|
||||
" \n",
|
||||
"daten.append(widerstand)\n",
|
||||
"\n",
|
||||
"# Jetzt sind Sie gefragt:\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "210f65ba",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
33
Lektion3_Numpy_Arrays.ipynb
Normal file
33
Lektion3_Numpy_Arrays.ipynb
Normal file
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "efc3f58e",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"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.9.4"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
|
@ -7,242 +7,6 @@
|
|||
"# 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": null,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2019-11-04T12:07:49.905202Z",
|
||||
"start_time": "2019-11-04T12:07:49.889579Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"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",
|
||||
"<img src=\"images/Tab-Key.png\" alt=\"Tab-Taste\" width=\"80\"/>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2019-11-04T12:08:53.901374Z",
|
||||
"start_time": "2019-11-04T12:08:53.885753Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"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": null,
|
||||
"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": null,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2019-11-04T12:10:08.503300Z",
|
||||
"start_time": "2019-11-04T12:10:08.472059Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"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": null,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2019-11-04T12:11:40.799393Z",
|
||||
"start_time": "2019-11-04T12:11:40.783772Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"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": null,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2019-11-04T12:12:42.522873Z",
|
||||
"start_time": "2019-11-04T12:12:42.507254Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"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": null,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2019-11-04T12:13:30.363510Z",
|
||||
"start_time": "2019-11-04T12:13:30.347888Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"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": null,
|
||||
"metadata": {
|
||||
"ExecuteTime": {
|
||||
"end_time": "2019-11-04T12:13:49.912658Z",
|
||||
"start_time": "2019-11-04T12:13:49.897039Z"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"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": {},
|
||||
|
@ -251,7 +15,7 @@
|
|||
" \n",
|
||||
"#### Aufgabe 4.b.: Werte berechnen:\n",
|
||||
"Kopieren Sie Ihre Lösung von Aufgabe 4.a. aus der Vorbereitung in das Notebook und berechnen Sie nun für die Messwerte aus Aufgabe 4 a. die Leistung $P$ und den Widerstand $R$ sowie deren Fehler. Nutzen Sie hierfür die ausführliche schrebweise der **for**-Schleife im Fall des Widerstands $R$ und den list-comprehension Syntax für die Leistung $P$. Fügen Sie die berechneten Werte als neue Spalten an die Liste *daten* an. \n",
|
||||
"<div>"
|
||||
"</div>"
|
||||
]
|
||||
},
|
||||
{
|
Loading…
Reference in a new issue