Manchmal reicht eine einzelne Bedingung nicht aus. Was, wenn du prüfen möchtest, ob jemand sowohl alt genug als auch im Besitz eines Tickets ist? Oder ob eine Zahl entweder negativ oder null ist? Dafür gibt es logische Operatoren.
Die drei logischen Operatoren
Python hat drei logische Operatoren: and, or und not.
and — und
and ist nur True, wenn beide Bedingungen wahr sind:
alter = 17
hat_ticket = True
if alter >= 18 and hat_ticket:
print("Eintritt erlaubt")
else:
print("Eintritt verweigert") # Wird ausgegeben, da alter < 18
Wahrheitstabelle für and:
| A | B | A and B |
|---|---|---|
| True | True | True |
| True | False | False |
| False | True | False |
| False | False | False |
or — oder
or ist True, wenn mindestens eine Bedingung wahr ist:
ist_wochenende = True
ist_feiertag = False
if ist_wochenende or ist_feiertag:
print("Keine Schule!") # Wird ausgegeben
Wahrheitstabelle für or:
| A | B | A or B |
|---|---|---|
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | False |
not — nicht
not kehrt einen booleschen Wert um:
ist_angemeldet = False
if not ist_angemeldet:
print("Bitte zuerst anmelden!")
| A | not A |
|---|---|
| True | False |
| False | True |
In der Logik heißen diese Operationen auch AND (Konjunktion), OR (Disjunktion) und NOT (Negation). Sie bilden die Grundlage der Booleschen Algebra, die auch in der Computerhardware verwendet wird.
Kombinierte Bedingungen
Du kannst mehrere logische Operatoren in einem Ausdruck kombinieren:
alter = 15
noten_gut = True
genehmigung = True
darf_teilnehmen = alter >= 13 and alter <= 18 and noten_gut and genehmigung
print(darf_teilnehmen) # True
Python wertet and- und or-Ausdrücke von links nach rechts aus und stoppt, sobald das Ergebnis feststeht. Das nennt sich Kurzschlussauswertung: Bei False and ... wird der Rest nicht mehr geprüft, weil das Ergebnis schon False ist.
Reihenfolge der Auswertung
Wie in der Mathematik gibt es eine Reihenfolge:
not(höchste Priorität)andor(niedrigste Priorität)
print(True or False and False)
# = True or (False and False) (and zuerst)
# = True or False
# = True
Wenn du unsicher bist, verwende Klammern, um die gewünschte Reihenfolge klarzumachen:
ergebnis = (True or False) and False # False
ergebnis = True or (False and False) # True
Achte auf die Auswertungsreihenfolge bei komplexen Bedingungen. Ein häufiger Fehler ist zu schreiben: if x == 1 or 2: anstatt if x == 1 or x == 2:. Der erste Ausdruck ist immer wahr, weil 2 (eine nicht-null Zahl) allein als True gewertet wird!
Praktisches Beispiel
def darf_leihen(alter, hat_ausweis, buecher_ausstehend):
"""Prüft, ob eine Person Bücher ausleihen darf."""
if not hat_ausweis:
return "Kein Bibliotheksausweis vorhanden."
if buecher_ausstehend > 3:
return "Zu viele ausstehende Bücher."
if alter < 6:
return "Zu jung für eigenständige Ausleihe."
return "Ausleihe genehmigt!"
print(darf_leihen(14, True, 1)) # Ausleihe genehmigt!
print(darf_leihen(14, False, 0)) # Kein Bibliotheksausweis vorhanden.
Übungsaufgaben
Welchen Wert hat der Ausdruck: True and False or True?
Antwort anzeigen
Warum ist 'if alter == 16 or 17:' ein häufiger Fehler, und wie schreibt man es richtig?