Skip to content

Commit 2c63aab

Browse files
author
dodonator
committed
Level2.ipynb: Überarbeitung
Ich habe den nächsten Abschnitt überarbeitet
1 parent 0f5c11f commit 2c63aab

1 file changed

Lines changed: 73 additions & 40 deletions

File tree

Level_02/Level_2.ipynb

Lines changed: 73 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -216,14 +216,16 @@
216216
"source": [
217217
"## if-Bedingung\n",
218218
"\n",
219-
"Nun da wir gelernt haben, was boolean-Werte sind, können wir diese in einer if-Abfrage benutzen: Codeteile nur dann ausführen, wenn eine Bedingung erfüllt ist. Sehen wir uns zunächst die Syntax einer if-Abfrage in Python an:\n",
219+
"Nachdem du den Datentyp boolean kennengelernt hast, lernst du nun, wie du eine `if`-Bedingung benutzt. Eine `if`-Bedingung dient dazu einen Code-Abschnitt nur auszuführen, wenn eine Bedingung erfüllt ist. Bei dieser Bedingung handelt es sich um einen boolschen Ausdruck. Im folgendem Code-Ausschnitt siehst du eine beispielhafte if-Bedingung.\n",
220220
"\n",
221221
"```python\n",
222-
"if Bedingung:\n",
223-
" Befehle\n",
222+
"if True:\n",
223+
" print(\"True\")\n",
224224
"```\n",
225225
"\n",
226-
"Wir starten mit dem Schlüsselwort `if`, dann kommt eine Bedingung, diese sollte einen boolschen Ausdruck zurückgeben, wir können diesen explizit angeben, der Interpreter ruft allerdings auf unsere Bedingung `bool()` auf und führt unsere Befehle aus, wenn dies `True`zurück gibt. Nach der Bedingung folgt ein Doppelpunkt `:`. Die nächste Zeile wird nun eingerückt, hierbei hat man sich auf __vier Leerzeichen__ geeinigt."
226+
"### Einrückung und Gültigkeitsbereiche\n",
227+
"\n",
228+
"Beachte, dass der Code, welcher von der Bedingung beeinflusst werden soll um vier Leerzeichen eingerückt ist. Das ist kein Zufall. Anders als andere Programmiersprachen erkennt Python die Gültigkeitsbereiche nicht anhand von Klammern (Java benutzt zum Beispiel `{` und `}`), sondern anhand der Einrückung am Anfang der Zeile. Zu einem Gültigkeitsbereich gehören dabei alle aufeinanderfolgenden Zeilen gleicher Einrückung.\n"
227229
]
228230
},
229231
{
@@ -243,79 +245,80 @@
243245
"cell_type": "markdown",
244246
"metadata": {},
245247
"source": [
246-
"Im obigen Codebeispiel prüft die if-Bedingung, ob der String `eingabe` leer ist. Dies geschieht implizit, d.h. es wird ausgenutzt, dass der Interpreter die Bedingung in einen boolean umwandelt. In dem Kommentar sind alternative Bedingungen beschrieben, die daselbe erreichen, allerdings umständlicher sind. <br>\n",
247-
"Wenn wir uns aber an unser Problem aus der Einleitung erinnern, war unser Ziel eine Zahl aus der Eingabe zu lesen und Fehler durch falsche Benutzereingaben abzufangen. Wir wollen also darauf reagieren, wenn nichts eingegeben wurde, wenn eine Zahl eingegeben wurde und wenn eine Zeichenkette eingegeben wurde, die nicht als integer interpretiert werden kann."
248-
]
249-
},
250-
{
251-
"cell_type": "code",
252-
"execution_count": null,
253-
"metadata": {
254-
"scrolled": false
255-
},
256-
"outputs": [],
257-
"source": [
258-
"eingabe = input(\"Bitte etwas eingeben: \")\n",
248+
"Im obigen Beispiel siehst du ein interaktives Beispiel für eine einfache if-Bedingung. In dem Fall soll überprüft werden, ob die Eingabe leer ist. Beachte, dass die als Bedingung lediglich die Variable `eingabe` also ein string benutzt wird. Dies ist deshalb möglich, da der Python-Interpreter intern auf den Ausdruck, welchen du als Bedingung angibst, versucht mittels der `bool()`-Funktion in einen `boolean` umzuwandeln. \n",
259249
"\n",
260-
"if eingabe.isdigit():\n",
261-
" zahl = int(eingabe)\n",
262-
" print(zahl)\n",
250+
"Eine if-Bedingung kann auch beliebig viele (optionale) `elif`-Zweige und einen (ebenfalls optionalen) `else`-Zweige enthalten. Das Schlüsselwort `elif` ist eine Abkürzung für `else if`. In einem `elif`-Zweig kannst du weitere Bedingungen prüfen. Es wird aber stets der erste Zweig ausgeführt, dessen Bedingung wahr ist. Der `else`-Zweig wird nur dann ausgeführt, wenn keine Bedingung wahr ist. Unten siehst du den schematischen Aufbau einer if-Bedingung (Achtung es handelt sich *nicht* um validen Python-Code).\n",
251+
"```python\n",
252+
"if Bedingung:\n",
253+
" Anweisungen\n",
254+
"\n",
255+
"elif Bedingung:\n",
256+
" Anweisungen\n",
257+
"\n",
258+
"...\n",
263259
"\n",
264260
"else:\n",
265-
" print(\"Ungültige Eingabe:\", eingabe)"
261+
" Anweisungen\n",
262+
"```"
266263
]
267264
},
268265
{
269266
"cell_type": "markdown",
270267
"metadata": {},
271268
"source": [
272-
"Wie wir sehen können, passiert im obigen Codebeispiel eine Menge auf einmal, gehen wir es also in Ruhe durch.\n",
273-
"In der if-Abfrage wird mit der `str.isdigit()` Methode geprüft, ob der string `eingabe` nicht leer ist und nur aus Ziffern besteht; wenn dem so ist, erstellen wir einen integer `zahl` aus der Eingabe und geben diesen aus. In einem `else` Zweig, der ausgeführt wird, wenn die Bedingung der if-Abfrage nicht zutraf, geben wir dem Benutzer Feedback über seine falsche Eingabe zurück."
269+
"Wenn du dich an das Problem im [Einstieg](#einstieg) erinnerst kannst du nun die if-Bedingung anwenden, um einen `Value-Error` bei Eingabe von falschen Werten zu vermeiden."
274270
]
275271
},
276272
{
277273
"cell_type": "code",
278274
"execution_count": null,
279-
"metadata": {},
275+
"metadata": {
276+
"scrolled": false
277+
},
280278
"outputs": [],
281279
"source": [
282-
"eingabe = input(\"Bitte eine Zahl eingeben: \")\n",
280+
"eingabe = input(\"Bitte etwas eingeben: \")\n",
281+
"\n",
282+
"if eingabe.isdigit():\n",
283+
" zahl = int(eingabe)\n",
284+
" print(zahl)\n",
283285
"\n",
284-
"if eingabe:\n",
285-
" # die Eingabe ist nicht leer.\n",
286-
" if eingabe.isdigit():\n",
287-
" zahl = int(eingabe)\n",
288-
" print(zahl, \"ist eine gültige Zahl.\")\n",
289-
" else:\n",
290-
" print(\"Die Eingabe ''\" + eingabe + \"' ist keine gültige Zahl\")\n",
291286
"else:\n",
292-
" print(\"Die Eingabe ist leer.\")"
287+
" print(\"Ungültige Eingabe:\", eingabe)"
293288
]
294289
},
295290
{
296291
"cell_type": "markdown",
297292
"metadata": {},
298293
"source": [
299-
"if-Bedingungen können auch verschachtelt werden, d.h. wir können also in einer if-Bedingung eine weitere if-Bedingung definieren. Allerdings können wir dies durch die Benutzung des Schlüsselwortes `elif` vereinfachen:"
294+
"Im obigen Beispiel wird die `str.isdigit()` Methode verwendet. Diese Methode gibt `True` zurück, sobald alle Zeichen in dem string Nummern sind. Durch Benutzung dieser Methode kannst du verhindern, dass dein Programm wegen eines `ValueError`s abstürzt. Du kannst natürlich auch zusätzlich prüfen, ob die Eingabe leer ist:"
300295
]
301296
},
302297
{
303298
"cell_type": "code",
304-
"execution_count": null,
299+
"execution_count": 5,
305300
"metadata": {},
306-
"outputs": [],
301+
"outputs": [
302+
{
303+
"name": "stdout",
304+
"output_type": "stream",
305+
"text": [
306+
"23 ist eine gültige Zahl.\n"
307+
]
308+
}
309+
],
307310
"source": [
308311
"eingabe = input(\"Bitte eine Zahl eingeben: \")\n",
309312
"\n",
310313
"if eingabe.isdigit():\n",
311314
" # die Eingabe ist eine gültige Zahl\n",
312315
" zahl = int(eingabe)\n",
313316
" print(zahl, \"ist eine gültige Zahl.\")\n",
314-
" \n",
317+
"\n",
315318
"elif not eingabe:\n",
316319
" # die Eingabe ist leer\n",
317320
" print(\"Die Eingabe ist leer\")\n",
318-
" \n",
321+
"\n",
319322
"else:\n",
320323
" # die Eingabe ist nicht leer, aber auch keine\n",
321324
" # gültige Zahl\n",
@@ -326,15 +329,45 @@
326329
"cell_type": "markdown",
327330
"metadata": {},
328331
"source": [
329-
"Eine if-Bedingung enthält einen if-Zweig, beliebig viele optionale elif-Zweige und optional einen else-Zweig. Dabei wird immer der erste Zweig, dessen Bedingung zutrifft ausgeführt und nachher keine weiteren.\n",
330-
"Daher ist es wichtig auf die Reihenfolge der Zweige zu achten."
332+
"Du kannst if-Bedingungen auch ineinander verschachteln. Das kann bei komplexeren Bedingungen hilfreich sein. Unten siehst du das Beispiel von oben als verschachtelte if-Bedingung. Gerade bei längeren Bedingungen kann es hilfreich sein, diese zu verschachteln. Beachte beim Verschachteln von if-Bedingungen die Einrückung!"
333+
]
334+
},
335+
{
336+
"cell_type": "code",
337+
"execution_count": 6,
338+
"metadata": {},
339+
"outputs": [
340+
{
341+
"name": "stdout",
342+
"output_type": "stream",
343+
"text": [
344+
"Die Eingabe 23 ist eine gültige Zahl.\n"
345+
]
346+
}
347+
],
348+
"source": [
349+
"eingabe = input(\"Bitte eine Zahl eingeben: \")\n",
350+
"\n",
351+
"if eingabe:\n",
352+
" if eingabe.isdigit():\n",
353+
" # die Eingabe ist eine gültige Zahl\n",
354+
" zahl = int(eingabe)\n",
355+
" print(\"Die Eingabe\", zahl, \" ist eine gültige Zahl.\")\n",
356+
" else:\n",
357+
" # die Eingabe ist keine gültige Zahl\n",
358+
" print(\"Die Eingabe\", eingabe, \" ist keine gültige Zahl\")\n",
359+
"\n",
360+
"else:\n",
361+
" # die Eingabe ist leer\n",
362+
" print(\"Die Eingabe ist leer.\")"
331363
]
332364
},
333365
{
334366
"cell_type": "markdown",
335367
"metadata": {},
336368
"source": [
337369
"## while-Schleife\n",
370+
"\n",
338371
"Bisher ist es sehr schwierig Code mehrfach auszuführen, wenn wir unsere Programme wiederholen müssen wir sie neu starten. Nicht nur das, sondern haben wir keine Möglichkeit Befehle beliebig häufig auszuführen. Die Möglichkeit Code wiederholt auszuführen ist allerdings für viele Programme ein elementarer Bestandteil. Daher möchten wir uns im dritten Abschnitt dieses Levels mit der while-Schleife beschäftigen, die diese Probleme löst.\n",
339372
"\n",
340373
"Die while-Schleife ist im Aufbau ähnlich der if-Bedingung:\n",

0 commit comments

Comments
 (0)