Zurück


Boolsche Werte und Bedingungen Logo von Python

Boolsche Werte


Python hat einen Variablentyp namens Bool, dieser kann zwei mögliche Werte haben: True oder False (Wahr oder Falsch).

x = True
print(x)
print(type(x))
True
<class 'bool'>

Normalerweise fügen wir nicht selbst einen True oder False Wert in unseren Code ein, sondern die kriegen wir von
Booleschen Operatoren. Diese Operatoren können Ja oder Nein Fragen beantworten. Schauen wir uns ein paar an.

Vergleichsoperatoren

Operation

Beschreibung

 

Operation

Beschreibung

a == b

a ist gleich b

 

a != b

a ist nicht gleich b

a < b

a ist kleiner als b

 

a > b

a ist größer als b

a <= b

a kleiner oder gleich groß wie b

 

a >= b

a größer oder gleich groß wie b

def kann_gewählt_werden(alter):
"""Kann jemand mit diesem Alter Bundespräsident werden?"""
#Man muss 35 Jahre alt sein, damit man in Österreich Bundespräsident werden kann
return age >= 35
print("Kann ein 20 jähriger als Bundespräsident gewählt werden?", kann_gewählt_werden(20))
print("Kann ein 50 jähriger als Bundespräsident gewählt werden?", kann_gewählt_werden(50))
Kann ein 20-Jähriger als Bundespräsident gewählt werden? False
Kann ein 50-jähriger als Bundespräsident gewählt werden? True

Vergleiche funktionieren meistens, wie man sich es erhofft.

3.0 == 3
True

Es ist aber manchmal ein wenig knifflig

'3' == 3
False


Vergleichsoperatoren können mit mathematischen Operationen kombiniert werden und wie wir bereits gesehen haben,
können wir mit unseren mathematischen Operationen fast alles anstellen. Zum Beispiel können wir prüfen,
ob eine Zahl ungerade ist. Mit Modulo 2 ist gleich 1:

def ist_ungerade:
return(n % 2) == 1

print("Ist 100 rund?", ist_ungerade(100))
print("Ist -5 rund?", ist_ungerade(-5))
Ist 100 rund? False
Ist -5 rund


Wenn du vergleichst, solltest du niemals = statt == verwenden, weil sonst würdest du nicht den Wert prüfen,
sondern den Wert ändern. a == 4 prüft ob a gleich 4 ist und a = 4 ändert den Wert von a zu 4.

Boolesche Werte vergleichen


Man kann in deutschen Fragen "und", "oder" und "nicht" als Kriterien anlegen, also wenn das Wetter schön ist,
und wir Zeit haben, dann wandern wir. Das sind auch genau die Wörter, die wir für unsere Booleschen Werte nutzen dürfen:
and, or und not.

Hiermit können wir unseren Kandidaten besser bezeichnen und wir können auch mehr abfragen.
def kann_gewählt_werden(alter, hat_eine_österreichische_Staatsbürgerschaft):
"""Kann jemand mit diesem Alter und dieser Staatsbürgerschaft Bundespräsident werden?"""
#Man muss 35 Jahre alt sein und eine österreichische Staatsbürgerschaft haben, damit man in Österreich Bundespräsident werden kann.
return hat_eine_österreichische_Staatsbürgerschaft and (age >= 35)

print(kann_gewählt_werden(20, True))
print(kann_gewählt_werden(50, False))
print(kann_gewählt_werden(50, True))

False
False
True


Fordere dich selbst heraus! Versuche so schnell wie möglich das untere Ergebnis herauszufinden.

True or True and False? FALSE


Hast du das Ergebnis herausgefunden?

Wenn du die Reihenfolge der Operationen verstanden hast, kannst du das ziemlich einfach herausfinden.

and wird vor or in der Reihenfolge gezählt. Daher war die obere Abfrage True. Wenn Python es von links nach rechts
lesen würde, hätten wir einmal True or True, was True bedeuten würde und True and False, was es zu False ändern würde.

Nun, du könntest dir die Reihenfolge für jede Interaktion auswendig lernen, oder du könntest Klammern nutzen.
Das ist auch die sicherste Methode, vermeidet viele Bugs und es macht auch das, was du erreichen möchtest, deutlicher für jeden der deinen Code liest.

Schauen wir uns dieses Beispiel mal an:

wetter_vorbereitung = regenschirm_haben or regenstufe < 5 and kaptze_haben or not regenstufe > 0 and arbeitstag

Also was ich damit sagen möchte, ist, dass ich zur Sicherheit vom Wetter…
• einen Regenschirm brauche…
• oder wenn es nicht schlimm regnet und ich eine Kapuze habe…
• ansonsten geht's mir gut, außer es regnet und es ist ein Arbeitstag

Mein Code ist nicht nur schwer zum Lesen, sondern er hat auch einen Bug und beide Probleme können mit Klammern gelöst werden.

wetter_vorbereitung = regenschirm_haben or (regenstufe < 5 and kaptze_haben) or not (regenstufe > 0 and arbeitstag)

Wir könnten auch mehr Klammern setzen, wenn es der Lesbarkeit hilft.

wetter_vorbereitung = regenschirm_haben or ((regenstufe < 5 and kaptze_haben) or not (regenstufe > 0 and arbeitstag))

Wir können es auch über mehrere Zeilen aufteilen um die vorherige 3-teil Struktur zu verdeutlichen:

wetter_vorbereitung = (
regenschirm_haben
or ((regenstufe < 5 and kaptze_haben)
or not (regenstufe > 0 and arbeitstag))


Bedingungen


Boolesche werte sind am nützlichsten, wenn sie mit Bedingungsstatements zusammen genutzt werden. Die wichtigen Bausteine hierfür sind if, elif und else.
Bedingungsstatements, öfter if-then (wenn-dann) Statements genannt, erlauben dir teile des Codes, die mit Booleschen Werten Bedingungen durchführen zu kontrollieren:

def ueberpruefen(x):
if x == 0:
print(x, "ist Null")
elif x > 0:
print(x, "ist positiv")
elif x < 0:
print(x, "ist negativ")
else:
print(x, "unbekannt, was sollen wir machen…")


ueberpruefen(0)
ueberpruefen(-20)

0 ist Null
-20 ist negativ

Die if und else Bausteine werden öfters in anderen Programmiersprachen verwendet, jedoch wird hier das "else if" zu elif umbenannt.
Else und elif sind nicht nötig, aber sind sehr hilfreich und wie man im oberen Beispiel erkennen kann, kann man so oft wie man will elif nutzen.

Vielleicht hast du erkannt, dass es nach dem Doppelpunkt beim if einen Abstand wie bei einer Funktion gibt. Die folgenden Zeilen,
die ebenso diesen Abstand haben sind Teil der if Funktion.

def f(x):
if x > 0:

print("Nur wiedergeben, wenn x positiv ist; x =", x)
print("Auch nur wiedergeben, wenn x positiv ist; x =", x)
print("immer wiedergeben, der Wert von x ist hier egal; x =", x)

f(1)
f(0)

Nur wiedergeben, wenn x positiv ist; x = 1
Auch nur wiedergeben, wenn x positiv ist; x = 1
immer wiedergeben, der Wert von x ist hier egal; x = 1
immer wiedergeben, der Wert von x ist hier egal; x = 1


Boolesche Konvertierung


Wir haben bereits int() und float() gesehen und jetzt kommt, wie du es dir sicher schon denken konntest bool(). bool() ist eine Funktion,
die Sachen zu bools umformt.
print(bool(1)) #Alle Zahlen außer null haben den Wert true
print(bool(0))
print(bool("asf"))#Ein String ist true, solange er nicht ein leerer ist("").
print(bool(""))
#Um es sich einfach merken zu können, solange es etwas beinhaltet, ist es echt und daher
wahr (true) und wenn es nichts beinhaltet, ist es unecht und daher falsch (false).
True
False
True
False

Das bedeutet, dass Python automatisch bei Abzweigungen und anderen Funktionen, wo booleschewerte erwartet werden,
strings, ints, etc. zu boolschen Werten umwandelt.

if 0:
print(0)

elif "spam":
print("spam")

spam
linkcode