|
55 | 55 | "\n", |
56 | 56 | "## Ihr erstes Python\n", |
57 | 57 | "\n", |
58 | | - "Die REPL verhält sich ähnlich zum Terminal, nur dass nicht Befehle nach (typischerweise) einem `$ ` eingegeben werden, sondern dass Python-Code nach einem `>>> ` eingegeben wird.\n", |
| 58 | + "Die REPL verhält sich ähnlich zum Terminal, nur dass nicht Befehle nach (typischerweise) einem \"`$ `\" eingegeben werden, sondern dass Python-Code nach einem \"`>>> `\" eingegeben wird.\n", |
59 | 59 | "\n", |
60 | 60 | "Nachfolgend finden Sie ein paar Beispiele. Probieren Sie diese selbst aus und ändern Sie sie dann ab.\n", |
61 | 61 | "\n", |
|
118 | 118 | "L -->|no| stop((Stop))\n", |
119 | 119 | "```\n", |
120 | 120 | "\n", |
121 | | - "Ablaufdiagramm der Bestandteile einer REPL\n", |
| 121 | + "Zustandsdiagramm der Bestandteile einer REPL\n", |
122 | 122 | "::::" |
123 | 123 | ] |
124 | 124 | }, |
|
133 | 133 | "tags": [] |
134 | 134 | }, |
135 | 135 | "source": [ |
136 | | - "TODO: genauere Erklärung des Ablaufs von bspw. `print(\"Hallo\")`." |
| 136 | + "Betrachten wir den Ablauf folgendes Szenarios:\n", |
| 137 | + "\n", |
| 138 | + "1. Sie starten den Python-Interpreter mit\n", |
| 139 | + " ```bash\n", |
| 140 | + " $ python3\n", |
| 141 | + " ```\n", |
| 142 | + "2. Python startet, gibt die Versionsinformationen aus und zeigt Ihnen mit dem Prompt `>>> ` an, dass es zum Einlesen eines Python-Ausdrucks bereit ist. Die REPL ist nun im Zustand _Read_.\n", |
| 143 | + "3. Sie können nun einen Python-Ausdruck eingeben. Dieser kann `print(\"Hallo\")` sein oder aber auch\n", |
| 144 | + " ```\n", |
| 145 | + " >>> print(\n", |
| 146 | + " ... \"Hallo\"\n", |
| 147 | + " ... )\n", |
| 148 | + " ```\n", |
| 149 | + " Während Sie den Ausdruck eingeben bleibt die REPL im Status _Read_. Haben Sie einen vollständigen Ausdruck eingegeben (Wann ein Ausdruck \"vollständig\" ist lernen Sie später.) und drücken Sie dann die Eingabetaste, so wechselt die REPL in den Zustand _Eval_.\n", |
| 150 | + "4. Bei der Evaluation des Python-Ausdrucks versucht der Interpreter, den Code auszuführen. Ist er korrekt (und bezieht sich nur auf Namen(/Variablen), die bereits definiert wurden), so wird der Code ausgeführt. Nachdem der Code ausgeführt wurde wechselt die REPL in den Zustand _Print_ und es wird das **Ergebnis** des gerade ausgeführten Python-Codes gedruckt.\n", |
| 151 | + "5. Dann wird in den Zustand _Loop_ gewechselt und überprüft, ob eine Abbruchbedingung erreicht wurde. Ist dies nicht der Fall – soll also wieder von Anfang begonnen werden so wechselt die REPL zurück in den Zustand _Read_ und der Ablauf springt damit zu Schritt 2. Soll die Schleife nicht fortgesetzt werden, so geht die REPL über in den Zustand _Stop_ und der Python-Interpreter wird beendet." |
137 | 152 | ] |
138 | 153 | }, |
139 | 154 | { |
|
150 | 165 | "## Lernstandskontrolle" |
151 | 166 | ] |
152 | 167 | }, |
| 168 | + { |
| 169 | + "cell_type": "markdown", |
| 170 | + "id": "73fd1516-282e-41c7-a42f-815d983841dd", |
| 171 | + "metadata": {}, |
| 172 | + "source": [ |
| 173 | + "**Nachvollziehen der Zustände der REPL**\n", |
| 174 | + "::::{admonition} 💪 Übung\n", |
| 175 | + ":icon: false\n", |
| 176 | + "Nachvollziehen Sie die nachfolgende REPL-Interaktion. Was sind Ausgaben per `print` und was sind Ausgaben durch den Zustand _Print_ der REPL?\n", |
| 177 | + "\n", |
| 178 | + "```python-repl\n", |
| 179 | + ">>> hallo = \"Hallo Python-Lernende\" # 1\n", |
| 180 | + ">>> hallo # 2\n", |
| 181 | + "'Hallo Python-Lernende' # 3\n", |
| 182 | + ">>> print(hallo) # 4\n", |
| 183 | + "Hallo Python-Lernende # 5\n", |
| 184 | + ">>> print(\"Hallo Python-Lernende\") # 6\n", |
| 185 | + "Hallo Python-Lernende # 7\n", |
| 186 | + ">>> \n", |
| 187 | + "```\n", |
| 188 | + "\n", |
| 189 | + ":::{dropdown} ✅ Lösung\n", |
| 190 | + "_**zu 1:**_ Hier wird eine Variable mit dem Namen `hallo` erzeugt in der das String-Literal `\"Hallo Python-Lernende\"` gespeichert wird. Dieser Ausdruck hat kein Ergebnis, weshalb nach der Zeile sofort der Prompt für die nächste Eingabe angezeigt wird.\n", |
| 191 | + "\n", |
| 192 | + "_**zu 2:**_ Hier besteht der Python-Ausdruck nur aus der Variablen mit dem Namen `hallo`. Eine Variable hat ihren Wert als Ergebnis, weshalb im Zustand _Print_ der REPL das String-Literat `'Hallo Python-Lernende'` ausgegeben wird (siehe _**3**_).\n", |
| 193 | + "\n", |
| 194 | + "Beachten Sie, dass in Python Strings entweder mit `'` oder mit `\"` umschlossen werden können. Sie sind gleichwertig und die Verwendung ist nur relevant, wenn der String selbst ein `'` oder ein `\"` enthält. Der String `\"Wie geht's?\"` müssten mit einfachen Anführungszeichen mit Hilfe eines sog. Escape-Zeichens geschrieben werden: `'Wie geht\\'s?'`. Anders herum wäre es bei diesem String: `\"Sie sagte: \\\"Hallo.\\\"\"` bzw. `'Sie sagte: \"Hallo.\"'`.\n", |
| 195 | + "\n", |
| 196 | + "_**zu 4:**_ Hier wird die Funktion `print()` genutzt um den Wert der Variablen `hallo` zu drucken. Dies geschieht im Zustand _Eval_ und die Ausgabe dazu ist in _**5**_ zu sehen. Die Funktion `print()` hat selbst kein Ergebnis, weshalb nichts zusätzliches durch den Zustand _Print_ ausgegeben wird.\n", |
| 197 | + "\n", |
| 198 | + "_**zu 6:**_ In diesem Schritt wird wie beim ersten Beispiel die Funktion `print()` mit einem String-Literal genutzt. Die Ausgabe in _**7**_ ist von der Version, die die Variable `hallo` nutzt nicht zu unterscheiden.\n", |
| 199 | + "::: \n", |
| 200 | + "\n", |
| 201 | + ":::: \n" |
| 202 | + ] |
| 203 | + }, |
| 204 | + { |
| 205 | + "cell_type": "markdown", |
| 206 | + "id": "4a49e5c5-3f23-4f83-9a51-3ab4f70db039", |
| 207 | + "metadata": {}, |
| 208 | + "source": [ |
| 209 | + "\n", |
| 210 | + ":::{hint} Kommentare in Python-Code\n", |
| 211 | + "Die Zahlen am Ende eines Ausdrucks (bspw. `# 1`) sind ein Kommentar, um in der Musterlösung einzelne Zeilen referenzieren zu können.\n", |
| 212 | + "\n", |
| 213 | + "In Python beginnen Kommentare mit einem `#` und es wir alles bis zum Zeilenende vom Interpreter ignoriert. Kommentare sind für Menschen, die den Code lesen gedacht und nicht für den Computer.\n", |
| 214 | + "::: \n", |
| 215 | + "\n", |
| 216 | + "\n" |
| 217 | + ] |
| 218 | + }, |
| 219 | + { |
| 220 | + "cell_type": "markdown", |
| 221 | + "id": "421eb2dd-5d59-472d-9323-9157279b8b21", |
| 222 | + "metadata": {}, |
| 223 | + "source": [ |
| 224 | + "**Nutzung der REPL**" |
| 225 | + ] |
| 226 | + }, |
153 | 227 | { |
154 | 228 | "cell_type": "code", |
155 | 229 | "execution_count": null, |
|
0 commit comments