Einführung
In der Informatik so auch im Leben sind häufig Fallunterscheidungen notwendig.
Ein einfaches Beispiel:
sonne = True #Wahrheitswerte (wahr, falsch) in Python beginnen mit einem Großbuchstaben schirm = False if sonne == True: print('Die Sonne scheint.') else: print('Die Sonne scheint nicht.') if schirm == True: print('Ich habe einen Regenschirm dabei!') else: print('Ich habe keinen Regenschirm dabei!')
Mit if wird der Wert der Variablen sonne und schirm jeweils hintereinander und in diesem Beispiel unabhängig voneinander geprüft. Je nach Wert (True/False) gibt die Konsole den entsprechenden String aus. Ein paar Kommentare im Detail:
if sonne == True: #Prüfungsbedingung, der Doppelpunkt ist wichtig, bei erfüllter Bedingung, wird der Anweisungsblock nach dem Doppelpunkt ausgeführt #Bei der Prüfung ob eine Variable einen bestimmten Wert hat, schreibt man doppelte Gleichheitszeichen == statt einem einfachen Gleichheitszeichen = a = 5 # Wert zuweisen: a wird der Wert 5 zugewiesen a == 8 # Wert prüfen: Es wird geprüft, ob a gleich 8 ist. Das ist hier nicht der Fall. Der Rückgabewert wird also False sein!
Vergleichsoperatoren
Für die Prüfung von Bedingungen können verschiedene Vergleichsoperatoren genutzt werden, je nach Bedarf.
a == b #ist a gleich b? a != b #ist a nicht gleich b? a < b #ist a kleiner b? a > b #ist a größer b? a <= b #ist a kleiner oder gleich b? a >= b #ist a größer oder gleich b? #scheinbar etwas speziell, aber sehr nützlich: 22 % 3 # 22 modulo 3 bedeutet, ich suche nach dem Rest, nachdem ich versucht habe durch 3 zu teilen. In diesem Fall ist das Ergebnis 1, denn 3 passt 7 mal in die 22, es bleibt der Rest 1 #probiere diesen Code mal aus print(22%3) # oder das print(22%8)
Vergleichsoperatoren lassen sich auch kombinieren:
a == b and a ==0 #ist a gleich b UND a gleich 0? --> wahr, wenn beide Bedingungen erfüllt a < 0 or b< 0 #ist a kleiner 0 oder b kleiner 0? --> wahr, wenn mind. 1 Bedingung erfüllt
Wir schauen uns mal zwei Beispiele an, um zusammengesetzte Bedingungen mit and und or zu verstehen.
#Beispiel 1 if 3+4 == 8 and 5+7 == 12: #wenn 3+4=8 wahr ist UND 5+7=12 wahr ist, dann führe den folgenden Block aus print("Alles gut gemacht.") else: print("Ach du meine Güte, nein!") #Beispiel 2 if 3+4 == 8 or 5+7 == 12: #wenn 3+4=8 wahr ist ODER 5+7=12 wahr ist, dann führe den folgenden Block aus print("Jo, eins von beiden passt schon.") else: print("Geht ja wohl gar nicht!")
Du siehst, in Beispiel 1 wird die Anweisung aus dem else-Block ausgewählt, weil nicht beide Bedingungen wahr sind. Im zweiten Beispiel mit or begnügen wir uns damit, wenn mindestens eine Bedingung erfüllt ist. Dieses oder ist also kein entweder-oder, sondern ein sowohl-als-auch, also wie wenn ich frage “Zucker oder Milch zum Kaffee?” – Man darf nur Zucker oder Milch, aber auch beides bejahen.
Mit diesem Code kannst du weitere Szenarien mit verschiedenen Werten für a und b testen:
a = 0 b = 1 if a == b and a == 0: print("a und b sind beide 0!") if a > 0 or b > 0: print("mind. a oder b ist größer als 0!")
Übungen
Alle Übungen mit einem (a) am Ende sollen abgegeben werden, sonst nicht.
Grundgerüst
Mit dem folgenden Code wird geprüft, ob die Variable zahl den Wert 3 hat oder nicht. Je nach dem, ob die Bedingung erfüllt ist oder nicht, wird eine andere Anweisung befolgt.
zahl = 3 if zahl == 3: #prüfe Bedingung (hier: wenn zahl 3 ist) print("Die Zahl ist 3.") #Anweisung, wenn erfüllt else: #sonst print("Die Zahl ist nicht 3.") #Anweisung, wenn nicht erfüllt
Übung 1
- Probiere den Code aus dem Grundgerüst aus.
- Ändere den Wert von zahl zu 4 und teste den Code erneut.
Übung 2
Schreibe ein Skript, bei dem geprüft wird, ob eine vorgegebene Zahl nicht 3 ist. Wähle entsprechend sinnvolle Anweisungen.
Tippzahl = 3 if zahl != 3: # != prüft, ob etwas nicht erfüllt ist #passende Anweisung else: #sonst #passende Anweisung
Übung 3
Mit Python kannst du auch ein kleines Ratespiel erstellen. Dafür musst du if-else-Bedingungen verschachteln. Wie das funktioniert, klären wir an einem Beispiel erst ein mal visuell mithilfe eines sogenannten Flussdiagramms dar:
- Nutzer wird nacheinander gefragt.
- Seine Angabe wird gespeichert.
- Die Bedingungen werden geprüft.
Der Nutzer soll immer wieder gefragt werden und eine Eingabe machen, dafür sorgt der folgende Teil.
#Die Konsole gibt den Text zwischen den Hochkommas aus. Die Antwort des Benutzers wird in der Variable aw gespeichert. aw = input('Hier steht die Frage an Nutzer')
Der vollständige Code zu dem Ratespiel oben sieht so aus:
print('Willkommen zu meinem Ratespiel! Ich werde erraten, woran du denkst! Denke an ein Auto, einen Bär oder einen Menschen! Gib bitte immer ein ja oder nein als Antwort ein!\n') aw = input('Ist es lebendig?\n') if aw == 'nein': print('Es ist das Auto!\n') else: if aw == 'ja': aw = input('Hat es vier Beine?\n') if aw == 'ja': print('Es ist der Bär!') else: print('Es ist der Mensch!\n')
- Probiere den Code oben aus und erkläre:
- Erstelle ein ähnliches Ratespiel. (a)
- Erstelle ein Ratespiel mit mehr Verschachtelungen. Benutze nur “ja/nein”-Fragen. (a)
- Vervollständige den Code unten sinnvoll (d.h. die Verzweigungen sollen bei der Auswahl des Getränkes sinnvoll angelegt werden). (a)
aw = input("Saft oder Softdrink?") if aw == "Saft": aw = input("Apfelsaft oder O-Saft?") if aw == "Apfelsaft": print("Gute Wahl, Äpfel sind lecker!") else: print("O-Saft, Vitamin C pur!") # Rest ab hier
Übung 4
if-else-Bedingungen lassen sich verschachteln, um mehr als nur genau 2 Fälle zu unterscheiden. Das kann schnell unübersichtlich werden. Man kann auch elif nutzen!
Beispiel
aw = int(input('Gib eine Zahl ein!\n')) #int() macht aus der Eingabe, die zunächst als Text angenommen wird, eine Zahl if aw < 0: print('Die Zahl ist negativ.') elif aw > 0: print('Die Zahl ist positiv.') else: print('Hast wohl 0 eingegeben...')
- Probiere das Beispiel aus. Gib auch mal etwas Ungültiges ein. Was passiert?
- Ändere den Code so, dass geprüft wird, ob eine Zahl kleiner, gleich oder größer als 17 ist.
- Erstelle eine neue Version deines Ratespiels, bei dem du ein elif-Statement nutzt, um ungültige Eingaben abzufangen. Schau dir den Tipp möglichst spät an. (a)
- Schau dir meine Lösung unter Tipp an und erstelle ein Flussdiagramm (Begriff: siehe Übung 3) zu dem Code in dem Tipp. Der Code dort ist etwas anders als der in Übung 3. Du kannst diese Seite dafür nutzen. (a)
- Erstelle ein Flussdiagramm zu deiner Lösung aus Teilaufgabe 3, also zu deinem eigenen Ratespiel mit elif-Statements. (a)
Mit meinem Ratespiel oben hätte man:
aw = input('Ist es lebendig?\n') if aw == 'nein': print('Es ist das Auto!\n') elif aw == 'ja': aw = input('Hat es vier Beine?\n') if aw == 'ja': print('Es ist der Bär!') elif aw == 'nein': print('Es ist der Mensch!\n') else: print('Ungültige Eingabe!\n') #warum ist das noch nötig? else: print('Ungültige Eingabe!\n')
Übung 5
Erstelle einen Code der folgende Kriterien erfüllt (a):
- Du als Programmierer:in gibst zwei Werte für zwei Variablen vor.
- Die gespeicherten Werte werden in einem if-else-Codeblock beide geprüft.
- Unterscheide folgende Fälle:
- beide Bedingungen werden erfüllt
- mindestens eine Bedingung wird erfüllt
- keine Bedingung wird erfüllt
a = 0 #0 stehe hier für nein b = 1 #1 stehe hier für ja if a == 1 and b == 1: #andere Vergleichsoperatoren sind auch erlaubt, also <,>,!= print("Beide Bedingungen erfüllt.") elif a == 1 or b == 1: print("Mind. 1 Bedingung erfüllt.") else: print("Keine Bedingung erfüllt.")
a = int(input("Möchtest du Milch in deinem Kaffee? Gib 1 für Ja ein und 0 für nein.")) b = int(input("Möchtest du Zucker in deinem Kaffee? Gib 1 für Ja ein und 0 für nein.")) if a == 1 and b == 1: print("Zucker und Milch? Igitt!") elif a == 1 or b == 1: print("Naja, wenigstens nicht beides!") else: print("So schmeckt der Kaffee am besten!") # Alternative milch = input("Möchtest du Milch in deinem Kaffee? Gib exakt ja oder nein ein.") zucker = input("Möchtest du Zucker in deinem Kaffee? Gib exakt ja oder nein ein.") if milch == "ja" and zucker == "ja": print("Zucker und Milch? Igitt!") elif milch == "ja" or zucker == "ja": print("Eins von beiden geht ja noch ...") else: print("So schmeckt der Kaffee am besten! (Oder du hast eine ungültige Eingabe gemacht)")