|
| 1 | +# if, else, elif |
| 2 | + |
| 3 | +Um den sogenannten Kontrollfluss in Python zu verändern, gibt es die Schlüsselwörter `if`, `else` und `elif`. |
| 4 | +Sie helfen uns dabei, unseren Programmablauf zu verändern, indem wir weitere Schritte ausführen, wenn nötig oder andere |
| 5 | +überspringen, wenn sie nicht notwendig sind. |
| 6 | + |
| 7 | +Dabei müssen wir uns auf die Boolschen Ausdrücke konzentrieren, die wir im vorigen Abschnitt kennengelernt haben. |
| 8 | +Wir können nur prüfen, ob eine bestimmte Bedingung zutrifft oder nicht. |
| 9 | +"Ein bisschen zutreffen" oder "ein bisschen nicht zutreffen" gibt es in diesem Fall nicht! |
| 10 | + |
| 11 | +Stellen wir uns vor, wir gehen wandern und kommen an eine Weggabelung. |
| 12 | +Um uns zu entscheiden, in welche Richtung wir gehen (nach links oder rechts), wollen wir eine Münze werfen. |
| 13 | +Zeigt die Münze Kopf, dann gehen wir nach links, zeigt sie Zahl, dann gehen wir nach rechts. |
| 14 | + |
| 15 | +Wir nehmen an, dass wir öfter abbiegen müssen und uns öfters mittels Münzwurf für einen der beiden Weggabelungen |
| 16 | +entscheiden. |
| 17 | +Deswegen verwenden wir eine Funktion, der wir als Parameter das Ergebnis des Münzwurfs mitgeben. |
| 18 | +Als Ergebnis wollen wir dann wissen, ob wir nach links oder nach rechts abbiegen: |
| 19 | + |
| 20 | +```python |
| 21 | +def abbiegen(seite): |
| 22 | + if seite == "kopf": |
| 23 | + return "links" |
| 24 | + else: |
| 25 | + return "rechts" |
| 26 | +``` |
| 27 | + |
| 28 | +Hier siehst du schon wieder viele neue Konzepte: |
| 29 | +`if` und `else` sind zwei der drei Schlüsselwörter, die oben bereits vorgestellt wurden. |
| 30 | +Dabei erwartet `if` eine Bedingung, die überprüft wird (in diesem Fall ist das `seite == "kopf"`). |
| 31 | +Hat der Parameter `seite` also den Wert `"kopf"`, dann ist der Vergleich an dieser Stelle wahr. |
| 32 | +Auffällig ist hier das doppelte Gleichheitszeichen. |
| 33 | +In der Mathematik schreibt man ein Gleichheitszeichen, um die Gleichheit auszudrücken, in Python und vielen anderen |
| 34 | +Programmiersprachen verwendet man zwei davon, um Vergleiche kenntlich zu machen. |
| 35 | +Würden wir in der Bedingung nur ein Gleichheitszeichen verwenden, dann würde Python `"kopf"` in `seite` speichern. |
| 36 | + |
| 37 | +Wenn wir Zahlen miteinander vergleichen wollen, dann können wir nicht nur auf Gleichheit, sondern auch auf |
| 38 | +Verschiedenheit prüfen. |
| 39 | +Vergleiche wie `<` und `>` erlauben es uns, Zahlen in Relation zu setzen. |
| 40 | +Außerdem gibt es die Vergleiche `>=` und `<=`, die prüfen, ob eine Zahl größer oder gleich (oder kleiner oder gleich) |
| 41 | +einer anderen Zahl ist. |
| 42 | +Wenn wir uns nicht sicher sind, ob eine Zahl größer oder kleiner ist, wir aber wissen wollen, ob eine Zahl ungleich |
| 43 | +einer anderen Zahl ist, dann können wir `!=` verwenden. |
| 44 | + |
| 45 | +`else` taucht – wenn überhaupt – immer mit einem zugehörigen `if` auf und kann niemals alleine stehen, es muss aber |
| 46 | +nicht auftauchen, wie wir gleich sehen werden. |
| 47 | +In dem Beispiel oben prüfen wir, ob `seite` den Wert `"kopf"` hat – dann wollen wir nach links abbiegen. |
| 48 | +Wenn wir aber nicht Kopf geworfen haben (das heißt nicht nur, dass wir Zahl geworfen haben, die Münze kann |
| 49 | +beispielsweise auch auf dem Rand stehengeblieben sein), dann wollen wir in jedem Fall nach rechts gehen. |
| 50 | +Und das "in jedem Fall" ist hier wichtig, weil wir an das `else` keine Bedingung mehr knüpfen können. |
| 51 | +Der Teil unterhalb von `else` wird immer dann ausgeführt, wenn kein anderer sogenannter Zweig (also keine Bedingung) |
| 52 | +zutreffend war. |
| 53 | + |
| 54 | +Doch was ist, wenn wir mehr als zwei Wege haben – angenommen, wir haben drei Wege. |
| 55 | +Eine Münze hilft uns dabei nicht mehr weiter, weswegen wir jetzt zu einem Würfel greifen. |
| 56 | +Würfeln wir eine 1 oder 2, dann gehen wir nach links, bei einer 3 oder 4 gehen wir geradeaus und bei einer 5 oder 6 |
| 57 | +biegen wir nach rechts ab: |
| 58 | + |
| 59 | +```python |
| 60 | +def abbiegen(augenzahl): |
| 61 | + if 1 <= augenzahl <= 2: |
| 62 | + return "links" |
| 63 | + elif 3 <= augenzahl <= 4: |
| 64 | + return "geradeaus" |
| 65 | + elif 5 <= augenzahl <= 6: |
| 66 | + return "rechts" |
| 67 | +``` |
| 68 | + |
| 69 | +Python erlaubt es uns, Vergleiche von mehreren Zahlen etwas kompakter zu schreiben. |
| 70 | +Wollen wir also sicherstellen, dass die `augenzahl` zwischen `1` und `2` liegt, dann können wir das wie folgt notieren: |
| 71 | +`1 <= augenzahl <= 2` |
| 72 | +Damit wird ausgedrückt, dass die 1 kleiner oder gleich `augenzahl` und zusätzlich dazu auch `augenzahl` kleiner oder |
| 73 | +gleich 2 sein soll. |
| 74 | + |
| 75 | +Diese Ausdrücke lassen sich auch komplexer beschreiben, insbesondere dann, wenn es nicht mehr ausschließlich um Zahlen |
| 76 | +geht. |
| 77 | +Statt `1 <= augenzahl <= 2` können wir auch `1 <= augenzahl and augenzahl <= 2` schreiben. |
| 78 | +Hierbei prüfen wir dieselben Kriterien, allerdings in zwei Schritten und verlangen dann, dass beides zutreffen muss, |
| 79 | +indem wir die Bedingungen mit dem Schlüsselwort `and` verbinden. |
| 80 | +Erinnern wir uns nochmal an die letzte Aufgabe – hier haben wir auch mit "Und" und "Oder" gearbeitet. |
| 81 | +Das Äquivalent für "Oder" ist entsprechend `or`. |
| 82 | + |
| 83 | +Ein vereinfachtes Beispiel der Buchauswahl aus der letzten Aufgabe könnte wie folgt aussehen: |
| 84 | + |
| 85 | +```python |
| 86 | +def buchauswahl(genre, protagonistin, coverfarbe): |
| 87 | + if protagonistin and genre == "Horror": |
| 88 | + return True |
| 89 | + if coverfarbe == "blau-grün" and genre != "Fantasy": |
| 90 | + return True |
| 91 | + return False |
| 92 | +``` |
| 93 | + |
| 94 | +Hierbei beachten wir nur die ersten beiden Fälle (es gibt eine Protagonistin und das Genre entspricht Horror |
| 95 | +und das Buchcover ist blau-grün und das Genre ist nicht Fantasy). |
| 96 | +Diese Funktion ist für uns lesbar und verständlich, jedoch lässt sich diese Auswahl noch knapper zusammenfassen. |
| 97 | +Ich will niemanden motivieren, solchen Code zu schreiben, wenn man darüber stolpert, dann sollte man sich aber nicht |
| 98 | +verunsichern lassen: |
| 99 | + |
| 100 | +```python |
| 101 | +def buchauswahl(genre, protagonistin, coverfarbe): |
| 102 | + return (protagonistin and genre == "Horror") or (coverfarbe == "blau-grün" and genre != "Fantasy") |
| 103 | +``` |
| 104 | + |
| 105 | +Statt mit `if`, `elif` und `else` zu arbeiten, schreiben wir alles in eine Zeile und verzichten auf diese |
| 106 | +Schlüsselwörter. |
| 107 | +Das können wir machen, weil das Schlüsselwort `or` uns gestattet, die beiden Bedingungen miteinander zu verbinden. |
| 108 | +Wir prüfen also, ob entweder der erste Teil vor dem `or` oder der zweite Teil nach dem `or` wahr wird. |
| 109 | +Es müssen nicht beide Teile wahr werden. |
| 110 | + |
| 111 | +Anders ist es bei dem Schlüsselwort `and` in den Klammern: |
| 112 | +Hier müssen beide (oder alle, wenn man mehrmals `and` notiert) Bedingungen erfüllt sein. |
| 113 | +Zum Beispiel muss es eine Protagonistin geben und das Buch zum Genre "Horror" gehören. |
| 114 | + |
| 115 | +## Aufgabe |
| 116 | + |
| 117 | +Basierend auf dem Würfel-Beispiel oben sollst du nun eine Funktion schreiben, die deine Würfelwürfe "kommentiert". |
| 118 | +Ein Wurf mit einer niedrigen Zahl (1 und 2) soll beispielsweise mit einem "Schade, nur eine 1" kommentiert werden. |
| 119 | +Würfe mit einer 3 und 4 können als "Durchschnitt" bezeichnet werden. |
| 120 | +Eine 5 kannst du mit einem "So knapp!" kommentieren und die 6 mit "Super! Weiter so!" |
| 121 | +Achte darauf, die jeweilige Zahl auch immer im Text zu verwenden. |
| 122 | + |
| 123 | +Eine Beispielausgabe des Programms könnte also wie folgt aussehen: |
| 124 | + |
| 125 | +``` |
| 126 | +Schade, nur eine 1 |
| 127 | +Schade, nur eine 2 |
| 128 | +Eine durchschnittliche 3 |
| 129 | +Eine durchschnittliche 4 |
| 130 | +So knapp - leider nur eine 5 |
| 131 | +Super! Eine 6 |
| 132 | +``` |
| 133 | + |
| 134 | +Teste deine Ausgabe, indem du das Programm mit dem grünen Pfeil oben links neben dem Editorfenster startest. |
| 135 | +Bist du mit deiner Lösung zufrieden, dann klicke unter der Aufgabe auf "Check". |
0 commit comments