Ein wichtiger Datentyp sind die Boole’schen Werte wahr und falsch bzw. True und False in Python. Ein etwas fortgeschritteneres Konzept der truthy und falsy Werte in Python hängt eng damit zusammen. Und genau um dieses Konzept soll es in diesem Beitrag gehen.
In den folgenden Abschnitten möchten wir uns mit diesen Fragen beschäftigen: Welche Werte werden in Python als True oder False ausgewertet und gelten damit als ‘truthy’ oder ‘falsy’? Was bedeutet ‘Truthiness’ und ‘Falsiness’?
Die eingebauten Konstanten True und False
Zuerst nochmal von vorne. In Python gibt es die beiden built-in constants, also eingebauten Konstanten, True und False.
Diese gehören allgemein zum Datentyp Boole’scher Wert, auch Wahrheitswert genannt. Über die kannst du hier noch mehr lesen.
Mit diesen Wahrheitswerten können wir maßgeblich den Ablauf unserer Programme steuern.
Wollen wir zum Beispiel bestimmte Codeabschnitte nur unter bestimmten Bedingungen ausführen, dann müssen wir folglich Begriffe dafür haben, ob eine Bedingung in Form eines Ausdrucks wahr oder falsch, also True oder False ist.
Beispiel für Ausdrücke, die True oder False sind
Im folgenden Code sehen wir ein paar Ausdrücke und lassen uns auf der Console den zugehörigen Wahrheitswert ausgeben.
print(3 > 5) print("hallo" == "hi") print(2 >= 0 and 7 <= 8) print(1 not in [1, 2, 3])
Wie zu erwarten erscheint auf der Console folgende Ausgabe:
>> True
>> False
>> True
>> False
Wichtig ist hierfür, dass du dich mit den grundlegenden Datentypen auskennst und weißt, was Wahrheitswerte bzw. Boole’sche Werte sind.
Außerdem ist es hilfreich, die Vergleichsoperatoren in Python zu kennen, um die obigen Ausdrücke zu verstehen.
Die bool()-Funktion zum Bestimmen von Wahrheitswerten
In Python gibt es die eingebaute Funktion bool(), die dir den Wahrheitswert des Arguments ausgibt.
Sprich, du schreibst irgendeinen Ausdruck in die Klammer hinter dem Wort bool() und die Funktion gibt dir eine der beiden Möglichkeiten – True oder False – zurück.
Schau dir folgenden Code an:
print(bool(3 < 5))
x = 2
print(bool(x != 2))
print(bool(None))
Drücken wir auf ‘Run’ erscheint auf der Console:
True
False
False
Der erste Ausdruck 3 < 5 ist offensichtlich wahr und deshalb gibt die bool()-Funktion den Wert True zurück.
Die Variable x hat Wert 2 gespeichert und somit ist der Ausdruck x ≠ 2 falsch.
Und schließlich habe ich noch die eingebaute Konstante None in die bool()-Funktion eingesetzt und den Wert False zurückbekommen.
Für Python gilt, salopp gesagt, nichts (also None) ist falsch.
Dieser Fakt leitet uns über zu dem Konzept der truthy und falsy-Werte in Python.
truthy und falsy Werte in Python
Nun zum eigentlichen Thema dieses Beitrags. Nicht nur Ausdrücke, sondern einzelne Werte werden von Python in die Kategorien wahr und falsch eingeteilt.
Jeder Wert ist entweder wahr oder falsch, es gibt keine dritte Möglichkeit.
Wenn ein Element „leer“ ist und somit keinen Wert enthält oder null ist, dann wird dieses als falsy bezeichnet.
Das heißt, die bool()-Funktion würde ihm den Wert falsch zuweisen.
Schauen wir uns zum Verständnis diesen Code an:
# Die Zahl 0
var_1 = 0
print(bool(var_1))
# Eine leere Liste
var_2 = []
print(bool(var_2))
# Eine Liste mit Inhalt
var_3 = [1, 2, 3]
print(bool(var_3))
# Eine Kommazahl, die nicht 0 ist
var_4 = 0.8
print(bool(var_4))
Das Ergebnis auf der Console sieht folgendermaßen aus:
False
False
True
True
Merke:
- Leere Objekte, wie z. B. leere Listen, Strings, Tupel, Sets oder Dictionaries sind ‘falsy’. Wird die bool()-Funktion auf sie angewendet, erhalten wir den Wert False zurück.
- Die Konstante None (umgangssprachlich einfach an das Wort „nichts“ denken) gibt auch den Wert False zurück, wenn wir die bool()-Funktion auf sie anwenden.
- Die Zahl 0 ist auch ‘falsy’. Genauso die komplexe Zahl 0 + 0j.
- Umgekehrt sind alle Zahlen, die nicht 0 sind, ‘truthy’. Und genauso alle Sequenztypen, die nicht leer sind. Also Listen, Strings, Tupel, Sets und Dictionaries, die irgendwelche Werte enthalten.
Besonderheiten von truthy und falsy Werten in Python
Manchmal kann das Konzept der truthy und falsy Werte ganz schön verwirrend sein.
Beispielsweise hat die Zahl 0 den Wert False, und eine leere Liste auch.
Allerdings hat eine Liste, die die Zahl 0 enthält, den Wert True.
x = 0
print(bool(x))
y = []
print(bool(y))
z = [0]
print(bool(z))
Das ergibt:
False
False
True
An sich eine logische Sache, aber man muss auch ziemlich genau hinschauen.
Das Konzept der ‘Truthiness’ und ‘Falsiness’ in Python
Grundsätzlich ist das Konzept der ‘Truthiness’ und ‘Falsiness’ nur eine logische Erweiterung des binären Konzepts in der Informatik.
Logisch gesehen kann etwas nur wahr oder falsch sein, 1 oder 0, Strom fließt oder er fließt nicht, etc.
Für Anfänger*innen ist das Konzept der ‘Truthiness’ bzw. ‘Falsiness’ manchmal schwer zu verstehen, aber das ist auch völlig in Ordnung am Anfang.
Aber, wenn man guten Pythoncode schreiben will, dann ist es essenziell dieses Konzept zu kennen.
Es vereinfacht auf eine „pythonische“ Weise, wie wir Code schreiben und denken.
Folgendes Beispiel:
liste = [1, 2, 3]
i = 1
while liste:
liste.pop()
print("Das ist Durchgang Nr.:", i)
i += 1
print(liste)
Anstatt in der while-Schleife die Bedingung “while liste == True” zu wählen, können wir einfach kurz “while liste:” schreiben.
Das ist möglich, da Python dem Element liste einen Wahrheitswert zuweist. Solange die Liste Elemente enthält, ist sie ‘truthy’, sprich sie hat den Wert True.
Sobald sie kein Element mehr enthält, ist sie ‘falsy’ und die while-Schleife wird nicht weiter durchlaufen.
Auf der Console erscheint:
Das ist Durchgang Nr.: 1
Das ist Durchgang Nr.: 2
Das ist Durchgang Nr.: 3
[]
Wir sehen, dass am Ende des Codes die Liste leer ist. Da die Liste genau drei Elemente zu Beginn hat, war sie für drei Durchgänge der while-Schleife ‘truthy’.
Kurzer Einschub: Selbst die erste Variante “while liste == True” ist schon sehr elegant und verkörpert das Konzept der ‘Truthiness’. Hätten wir dieses Konzept nicht zur Verfügung, müssten wir eine komplizierte Bedingung schreiben, wie etwa: “while liste enthält Elemente…”.
Das Konzept der ‘Truthiness’ gibt es auch in anderen Programmiersprachen, aber hier geht es vor allem um Python und da vereinfacht es die Ausdrücke in Kontrollstrukturen enorm.
Vielen Dank fürs Lesen! Lass gern einen Kommentar da. Falls du auf der Suche nach Python-Übungsaufgaben mit Lösungen bist, dann melde dich für meinen Newsletter an.