Entscheidungsketten: if ... elif ... else
Lernziele
- Sie verstehen, wie Sie mit
if ... elif ... elseeine Kette von Bedingungen bilden können.- Sie verstehen, wie Bedingungen nacheinander geprüft werden und wie sich
elifvon mehreren unabhängigenifs logisch unterscheidet.
Es gibt Fälle, in denen wir mehr als zwei Möglichkeiten haben und mehrere Bedingungen prüfen wollen. Eine elegante Struktur: Mit if ... elif ... else können Sie eine Kette aus mehreren Bedingungen bilden.
Syntax
if Bedingung1:
# Auszuführende Anweisungen, wenn Bedingung1 True ist
elif Bedingung2:
# Auszuführende Anweisungen, wenn Bedingung2 True ist (und alle vorherigen Bedingungen False)
elif Bedingung3:
# Auszuführende Anweisungen, wenn Bedingung3 True ist (und alle vorherigen Bedingungen False)
else:
# Auszuführende Anweisungen, wenn keine der Bedingungen True ist
Ein essenzielles Detail: Bei if ... elif ... else-Ketten wird jeweils nur die erste wahre Bedingung ausgeführt.
Entdecken: if vs elif
Bevor wir Code schreiben, versuchen Sie das Verhalten des folgenden Snippets vorherzusagen.
zahl = 15
if zahl > 10:
print("Grösser als 10")
if zahl > 5:
print("Grösser als 5")
Probieren Sie das Prinzip nun direkt in der Praxis aus:
- Führen Sie das Programm unten aus und betrachten Sie den Output. Bei der Zahl
5tauchen beispielsweise zwei Zeilen auf. - Ändern Sie anschliessend das zweite
ifin Zeile 5 zu einemelif. Führen Sie das Programm erneut aus. Was ändert sich?
Was Ihnen auffallen sollte:
- Wenn Sie zwei unabhängige
if-Bedingungen verwenden, werden beide ausgewertet. Ist eine Zahl (z.B. 5) grösser als 4, wird "Grösser als 4" gedruckt. Da sie auch grösser als 2 ist, wird die zweiteif-Bedingung ebenfalls erfüllt und "Grösser als 2" wird gedruckt. - Mit einer
elif-Bedingung verketten Sie die Bedingungen. Wenn die erste Bedingung wahr ist, wird die zweite gar nicht erst geprüft – der gesamte restliche Block wird sofort übersprungen.
Bug-Hunt: Der Altersrabatt
Finde den FehlerIm folgenden Programm soll ein Ticketpreis anhand des Alters berechnet werden. Allerdings bezahlen momentan auch Babys den vollen Erwachsenen-Preis von 20!Finden Sie heraus, wieso sich der Preis aufbaut, und reparieren Sie die Funktion mit
elif(und korrekten Einrückungen), sodass Babys gratis sind, Jugendliche 10 und Erwachsene 20 zahlen. Senioren ab 65 zahlen wieder 15.
Challenge: Noten berechnen
Auto-Grading: Punkte zu NotenSchreiben Sie nun eine eigene Funktion
noten_berechnen(punkte), die eine Punktzahl erhält und das passende Prädikat als Text zurückgibt:
- 90 oder mehr Punkte:
"A"- 80 bis 89 Punkte:
"B"- 70 bis 79 Punkte:
"C"- Unter 70 Punkten:
"F"Tipp: Sie müssen nicht mühsam auf Unter- und Obergrenzen gleichzeitig prüfen (nicht
if punkte >= 80 and punkte < 90). Beginnen Sie einfach bei der höchsten Punktzahl! Die Reihenfolge übernimmt beiif ... elif ... elsedie Arbeit für Sie, da vorherige Treffer übersprungen werden.
Modulo Bingo 2
Damit können wir eine Aufgabe der vorherigen Lektionen erheblich eleganter lösen. Die Aufgabe war: Schreiben Sie ein Programm, das alle Zahlen bis 20 überprüft.
- Wenn die Zahl nur durch 3 teilbar ist, drucken Sie "Drei" aus
- Wenn die Zahl nur durch 4 teilbar ist, drucken Sie "Vier" aus
- Wenn die Zahl sowohl durch 3 als auch durch 4 teilbar ist, drucken Sie "BINGO!" aus
- Ansonsten drucken Sie die Zahl selbst aus
Die unhandliche Lösung mit einzelnen if-Bedingungen sah so aus:
for i in range(1, 21):
if i % 3 == 0 and not i % 4 == 0:
print("Drei")
if i % 4 == 0 and not i % 3 == 0:
print("Vier")
if i % 3 == 0 and i % 4 == 0:
print("BINGO!")
if not i % 3 == 0 and not i % 4 == 0:
print(i)
Eine elegantere Lösung nutzt den Umstand, dass if ... elif ... else-Ketten immer nur die erste Bedingung selektieren, die zutrifft.
Lösungfor i in range(1, 21): if i % 3 == 0 and i % 4 == 0: print("BINGO!") elif i % 3 == 0: print("Drei") elif i % 4 == 0: print("Vier") else: print(i)
Beachten Sie: Mit elif müssen Sie die Spezialfälle (sowohl 3 als auch 4) zuerst prüfen — sonst würde schon i % 3 == 0 zuschnappen, bevor "BINGO!" je eine Chance hätte. Das ist die Kehrseite der Eleganz: die Reihenfolge der Bedingungen wird Teil der Logik.
Erklärvideo
Zusammenfassung
Zusammenfassung
if ... elif ... else-KetteMit
elifverketten Sie mehrere Bedingungen — geprüft wird nacheinander, ausgeführt nur die erste, die zutrifft:if Bedingung1: # ausgeführt, wenn B1 True ist elif Bedingung2: # nur ausgeführt, wenn B1 False UND B2 True else: # ausgeführt, wenn keine vorherige zutrifftEin optionales
elseam Ende fängt alle Fälle auf, die keine der vorherigen Bedingungen erfüllt haben.
ifvselif
- Mehrere
ifs nacheinander sind unabhängig — Python prüft jede einzeln, alle können zuschnappen. Brauchen Sie das, wenn die Bedingungen sich nicht gegenseitig ausschliessen.elif-Kette bricht nach dem ersten Treffer ab. Brauchen Sie das, wenn die Fälle sich gegenseitig ausschliessen sollen (z.B. Notenstufen, Altersrabatte, Bingo-Kategorien).Ein häufiger Bug: Mehrere
ifs zu schreiben, wo eineelif-Kette nötig wäre — dann überschreiben sich die Werte. Erkennen Sie das Muster im Bug-Hunt wieder, wo der Babypreis vom Erwachsenenpreis überschrieben wurde.Reihenfolge zählt
Mit
elifwird die Reihenfolge der Bedingungen Teil der Logik. Spezialfälle (z.B. "BINGO!" für beide Teilbar) müssen zuerst stehen, sonst werden sie von einer allgemeineren Bedingung überdeckt. Bei Zahlenbereichen (Noten, Altersgruppen) am einfachsten von der höchsten Stufe abwärts prüfen — dann sparen Sie sich Unter-/Obergrenzen-Kombinationen.