if/else in Python - Bedingte Logik
Lerne, wie du mit if, elif und else Entscheidungen in deinen Python-Programmen triffst. Von einfachen Bedingungen bis zu komplexen Verzweigungen.
Warum Bedingungen?
Programme sollen nicht immer dasselbe tun. Sie sollen Entscheidungen treffen — genau wie wir im Alltag:
- Wenn es regnet, dann nimm einen Regenschirm mit.
- Wenn du 18 bist, dann darfst du Auto fahren, sonst nicht.
- Wenn die Note unter 4.0 liegt, dann “nicht bestanden”.
In Python nutzen wir dafuer if, elif und else.
Die if-Anweisung
Die einfachste Form einer Bedingung:
alter = 20
if alter >= 18:
print("Du bist volljaehrig!")
Ausgabe:
Du bist volljaehrig!
Wichtig: Einrueckung ist entscheidend!
Python verwendet Einrueckung (4 Leerzeichen oder 1 Tab) statt geschweifter Klammern. Der eingerueckte Block gehoert zur if-Anweisung:
temperatur = 35
if temperatur > 30:
print("Es ist heiss!") # gehoert zum if
print("Trink viel Wasser!") # gehoert auch zum if
print("Programmende.") # wird IMMER ausgefuehrt
Ausgabe:
Es ist heiss!
Trink viel Wasser!
Programmende.
Wenn die Bedingung False ist, wird der eingerueckte Block uebersprungen:
temperatur = 15
if temperatur > 30:
print("Es ist heiss!") # wird uebersprungen
print("Trink viel Wasser!") # wird uebersprungen
print("Programmende.") # wird ausgefuehrt
Ausgabe:
Programmende.
if-else
Mit else definierst du, was passieren soll, wenn die Bedingung nicht zutrifft:
alter = 15
if alter >= 18:
print("Du darfst waehlen gehen.")
else:
print("Du bist noch nicht wahlberechtigt.")
Ausgabe:
Du bist noch nicht wahlberechtigt.
Ein weiteres Beispiel:
zahl = 7
if zahl % 2 == 0:
print(f"{zahl} ist gerade.")
else:
print(f"{zahl} ist ungerade.")
Ausgabe:
7 ist ungerade.
if-elif-else — Mehrere Bedingungen
Wenn du mehr als zwei Faelle unterscheiden willst, nutze elif (kurz fuer “else if”):
note = 2.3
if note <= 1.5:
print("Sehr gut!")
elif note <= 2.5:
print("Gut!")
elif note <= 3.5:
print("Befriedigend.")
elif note <= 4.0:
print("Ausreichend.")
else:
print("Nicht bestanden.")
Ausgabe:
Gut!
Python prueft die Bedingungen von oben nach unten. Sobald eine zutrifft, wird der zugehoerige Block ausgefuehrt und der Rest uebersprungen.
punkte = 85
if punkte >= 90:
print("A")
elif punkte >= 80:
print("B") # Diese Bedingung trifft zu -> "B"
elif punkte >= 70:
print("C") # Wird nicht mehr geprueft!
elif punkte >= 60:
print("D")
else:
print("F")
Verschachtelte Bedingungen
Du kannst if-Anweisungen ineinander verschachteln:
alter = 25
fuehrerschein = True
if alter >= 18:
if fuehrerschein:
print("Du darfst Auto fahren.")
else:
print("Du bist alt genug, aber hast keinen Fuehrerschein.")
else:
print("Du bist noch zu jung zum Autofahren.")
Ausgabe:
Du darfst Auto fahren.
Achte darauf, nicht zu tief zu verschachteln — das wird schnell unuebersichtlich. Oft lassen sich verschachtelte Bedingungen mit logischen Operatoren vereinfachen (siehe unten).
Vergleichsoperatoren in Bedingungen
Hier sind alle Vergleichsoperatoren, die du in Bedingungen verwenden kannst:
| Operator | Bedeutung | Beispiel |
|---|---|---|
== | gleich | x == 5 |
!= | ungleich | x != 5 |
< | kleiner als | x < 5 |
> | groesser als | x > 5 |
<= | kleiner oder gleich | x <= 5 |
>= | groesser oder gleich | x >= 5 |
x = 10
print(x == 10) # True
print(x != 5) # True
print(x > 15) # False
print(x <= 10) # True
Python erlaubt auch verkettete Vergleiche:
alter = 25
# Statt: alter >= 18 and alter <= 65
if 18 <= alter <= 65:
print("Du bist im erwerbsfaehigen Alter.")
Logische Operatoren: and, or, not
Mit logischen Operatoren kombinierst du mehrere Bedingungen:
and — Beide Bedingungen muessen wahr sein
alter = 25
einkommen = 3000
if alter >= 18 and einkommen >= 2000:
print("Kreditantrag moeglich.")
or — Mindestens eine Bedingung muss wahr sein
tag = "Samstag"
if tag == "Samstag" or tag == "Sonntag":
print("Wochenende!")
else:
print("Arbeitstag.")
not — Bedingung umkehren
regen = False
if not regen:
print("Kein Regenschirm noetig!")
Kombination
alter = 20
student = True
einkommen = 500
if alter < 25 and (student or einkommen < 1000):
print("Du bekommst einen Rabatt!")
Beachte die Klammern — sie steuern die Reihenfolge der Auswertung.
Der ternaere Operator
Fuer einfache if-else-Ausdruecke gibt es eine Kurzschreibweise:
# Normale Schreibweise
alter = 20
if alter >= 18:
status = "volljaehrig"
else:
status = "minderjaehrig"
# Ternaerer Operator (Kurzform)
status = "volljaehrig" if alter >= 18 else "minderjaehrig"
print(status) # volljaehrig
Weitere Beispiele:
x = 10
ergebnis = "positiv" if x > 0 else "nicht positiv"
print(ergebnis) # positiv
# In f-Strings
note = 1.3
print(f"Ergebnis: {'bestanden' if note <= 4.0 else 'durchgefallen'}")
# Verschachtelt (besser vermeiden -- wird unlesbar)
x = 0
vorzeichen = "positiv" if x > 0 else "negativ" if x < 0 else "null"
print(vorzeichen) # null
match/case — Structural Pattern Matching (Python 3.10+)
Seit Python 3.10 gibt es match/case als elegante Alternative zu langen if-elif-Ketten:
befehl = "start"
match befehl:
case "start":
print("Programm wird gestartet...")
case "stop":
print("Programm wird gestoppt...")
case "pause":
print("Programm wird pausiert...")
case _:
print(f"Unbekannter Befehl: {befehl}")
Ausgabe:
Programm wird gestartet...
Der Unterstrich _ ist der Wildcard-Pattern — er trifft auf alles zu (wie else).
Pattern Matching mit Werten
http_status = 404
match http_status:
case 200:
print("OK")
case 301:
print("Weitergeleitet")
case 404:
print("Nicht gefunden")
case 500:
print("Serverfehler")
case _:
print(f"Status: {http_status}")
Pattern Matching mit OR-Patterns
tag = "Samstag"
match tag:
case "Samstag" | "Sonntag":
print("Wochenende!")
case "Montag" | "Dienstag" | "Mittwoch" | "Donnerstag" | "Freitag":
print("Arbeitstag.")
case _:
print("Ungueltiger Tag.")
Pattern Matching mit Tupeln
punkt = (0, 5)
match punkt:
case (0, 0):
print("Ursprung")
case (x, 0):
print(f"Auf der X-Achse bei x={x}")
case (0, y):
print(f"Auf der Y-Achse bei y={y}")
case (x, y):
print(f"Punkt bei ({x}, {y})")
Ausgabe:
Auf der Y-Achse bei y=5
Truthy und Falsy in Bedingungen
In Python hat jeder Wert einen Wahrheitswert. Du musst nicht immer explizit vergleichen:
Falsy-Werte (werden als False behandelt)
# All diese Werte sind "falsy":
if not None:
print("None ist falsy")
if not 0:
print("0 ist falsy")
if not "":
print("Leerer String ist falsy")
if not []:
print("Leere Liste ist falsy")
if not {}:
print("Leeres Dictionary ist falsy")
if not False:
print("False ist falsy")
Truthy-Werte (werden als True behandelt)
# Alles andere ist "truthy":
if 42:
print("42 ist truthy")
if "Hallo":
print("'Hallo' ist truthy")
if [1, 2, 3]:
print("[1, 2, 3] ist truthy")
Praktische Anwendung
name = input("Wie heisst du? ")
# Statt: if name != ""
if name:
print(f"Hallo, {name}!")
else:
print("Du hast keinen Namen eingegeben.")
# Listen pruefen
warenkorb = []
# Statt: if len(warenkorb) > 0
if warenkorb:
print(f"Du hast {len(warenkorb)} Artikel.")
else:
print("Dein Warenkorb ist leer.")
Praxis: Altersueberpruefung
# Kompletttes Beispiel: Altersueberpruefung fuer verschiedene Aktivitaeten
alter = int(input("Wie alt bist du? "))
print(f"\nDu bist {alter} Jahre alt. Das bedeutet:")
if alter < 0:
print("Ungueltiges Alter!")
elif alter < 6:
print("- Du bist im Kindergartenalter.")
elif alter < 14:
print("- Du bist ein Kind.")
print("- Du darfst Kinderfilme im Kino sehen.")
elif alter < 16:
print("- Du bist ein Jugendlicher.")
print("- Du darfst Filme ab 12 sehen.")
elif alter < 18:
print("- Du bist ein Jugendlicher.")
print("- Du darfst Filme ab 16 sehen.")
print("- Du darfst Moped fahren.")
else:
print("- Du bist volljaehrig.")
print("- Du darfst waehlen.")
print("- Du darfst Auto fahren.")
if alter >= 21:
print("- Du darfst in den USA Alkohol kaufen.")
Praxis: Notenberechnung
# Notenberechnung mit Punkten
punkte = float(input("Erreichte Punkte (0-100): "))
if punkte < 0 or punkte > 100:
print("Ungueltige Punktzahl!")
else:
if punkte >= 92:
note = 1.0
elif punkte >= 81:
note = 2.0
elif punkte >= 67:
note = 3.0
elif punkte >= 50:
note = 4.0
else:
note = 5.0
bestanden = "Bestanden" if note <= 4.0 else "Nicht bestanden"
print(f"Punkte: {punkte}")
print(f"Note: {note}")
print(f"Ergebnis: {bestanden}")
Haeufige Fehler
Fehler 1: = statt ==
x = 10
# FALSCH: = ist Zuweisung, nicht Vergleich!
# if x = 10: # SyntaxError!
# RICHTIG: == ist der Vergleichsoperator
if x == 10:
print("x ist 10")
Fehler 2: Fehlende Einrueckung
x = 5
# FALSCH:
# if x > 3:
# print("Groesser als 3") # IndentationError!
# RICHTIG:
if x > 3:
print("Groesser als 3") # 4 Leerzeichen Einrueckung
Fehler 3: Doppelpunkt vergessen
x = 5
# FALSCH:
# if x > 3 # SyntaxError: Doppelpunkt fehlt!
# RICHTIG:
if x > 3:
print("Groesser als 3")
Fehler 4: Unnoetig mit True/False vergleichen
ist_aktiv = True
# UMSTAENDLICH:
if ist_aktiv == True:
print("Aktiv")
# BESSER:
if ist_aktiv:
print("Aktiv")
# UMSTAENDLICH:
if ist_aktiv == False:
print("Nicht aktiv")
# BESSER:
if not ist_aktiv:
print("Nicht aktiv")
Uebungen
Uebung 1: Gerade oder ungerade
Schreibe ein Programm, das den Benutzer nach einer Zahl fragt und ausgibt, ob sie gerade oder ungerade ist.
Loesung anzeigen
zahl = int(input("Gib eine Zahl ein: "))
if zahl % 2 == 0:
print(f"{zahl} ist gerade.")
else:
print(f"{zahl} ist ungerade.")
Uebung 2: Groesste von drei Zahlen
Schreibe ein Programm, das drei Zahlen einliest und die groesste ausgibt.
Loesung anzeigen
a = float(input("Erste Zahl: "))
b = float(input("Zweite Zahl: "))
c = float(input("Dritte Zahl: "))
if a >= b and a >= c:
print(f"Die groesste Zahl ist {a}")
elif b >= a and b >= c:
print(f"Die groesste Zahl ist {b}")
else:
print(f"Die groesste Zahl ist {c}")
# Oder einfacher mit max():
# print(f"Die groesste Zahl ist {max(a, b, c)}")
Uebung 3: Schaltjahr
Schreibe ein Programm, das prueft, ob ein Jahr ein Schaltjahr ist. Ein Jahr ist ein Schaltjahr, wenn es durch 4 teilbar ist, AUSSER es ist durch 100 teilbar — es sei denn, es ist auch durch 400 teilbar.
Loesung anzeigen
jahr = int(input("Gib ein Jahr ein: "))
if (jahr % 400 == 0) or (jahr % 4 == 0 and jahr % 100 != 0):
print(f"{jahr} ist ein Schaltjahr.")
else:
print(f"{jahr} ist kein Schaltjahr.")
Uebung 4: Taschenrechner
Schreibe einen einfachen Taschenrechner, der zwei Zahlen und einen Operator (+, -, *, /) einliest und das Ergebnis berechnet. Beruecksichtige Division durch Null!
Loesung anzeigen
zahl1 = float(input("Erste Zahl: "))
operator = input("Operator (+, -, *, /): ")
zahl2 = float(input("Zweite Zahl: "))
if operator == "+":
ergebnis = zahl1 + zahl2
elif operator == "-":
ergebnis = zahl1 - zahl2
elif operator == "*":
ergebnis = zahl1 * zahl2
elif operator == "/":
if zahl2 == 0:
print("Fehler: Division durch Null!")
ergebnis = None
else:
ergebnis = zahl1 / zahl2
else:
print(f"Unbekannter Operator: {operator}")
ergebnis = None
if ergebnis is not None:
print(f"{zahl1} {operator} {zahl2} = {ergebnis}")
Pro-Tipp: Guard Clauses
Statt tief verschachtelte if-Anweisungen zu schreiben, verwende “Guard Clauses” — pruefe zuerst die Fehlerfaelle und steige frueh aus:
# Verschachtelt (schwer lesbar):
def berechne_rabatt(alter, ist_mitglied):
if alter > 0:
if alter >= 65:
return 0.20
elif ist_mitglied:
return 0.10
else:
return 0.0
else:
return 0.0
# Mit Guard Clauses (besser lesbar):
def berechne_rabatt(alter, ist_mitglied):
if alter <= 0:
return 0.0
if alter >= 65:
return 0.20
if ist_mitglied:
return 0.10
return 0.0