True und False — Fragen an dein Programm stellen
Vergleichsoperatoren, and / or / not, verkettete Vergleiche und welche Werte Python als falsch behandelt — das Fundament für das Schreiben von Bedingungen.
Wie möchtest du lernen?
Das Problem, das wir lösen
Ein Programm muss manchmal eine Entscheidung treffen: Bekommt diese Bestellung einen Rabatt? Ist das Passwort lang genug? Ist der Artikel auf Lager?
Der Code, der entscheidet, kommt im nächsten Kapitel (if). Vorher brauchst du aber das, worauf eine Entscheidung beruht — eine Frage, deren Antwort ja oder nein ist. In Python heißen diese Antworten True und False, und der Typ heißt bool.
Heute lernst du nur, Fragen zu stellen, noch nicht zu entscheiden. Diese Aufteilung ist bewusst so gewählt: Fast jeder Fehler, den Leute bei einem if machen, ist eigentlich ein Fehler in der Frage, nicht im if.
Am Ende dieses Kapitels kannst du
- Die sechs Vergleichsoperatoren verwenden
=und==auseinanderhalten- Kleine Fragen mit
and,orundnotzu größeren verbinden - Verkettete Vergleiche wie
18 <= age <= 60schreiben - Sagen, welche Werte Python als falsch behandelt, obwohl sie nicht
Falsesind
Voraussetzungen: Eingaben von deinen Nutzern einlesen — input() und Typumwandlung.
Die sechs Vergleiche
age = 22
print(age == 22)
print(age != 22)
print(age > 18)
print(age < 18)
print(age >= 22)
print(age <= 21)True
False
True
False
True
FalseJeder Vergleich liefert einen Wert — True oder False. Das heißt, ein Vergleich kann in einer Variablen gespeichert werden:
age = 22
is_adult = age >= 18
print(is_adult)
print(type(is_adult))True
<class 'bool'>Mit einem solchen Namen ist der Code viel leichter zu lesen: is_adult sagt, was geprüft wird, während age >= 18 den Leser zwingt, es selbst herauszufinden.
= und == — ein Zeichen, eine andere Bedeutung
total = 100 # an instruction: put 100 into total
print(total == 100) # a question: is total 100?True=speichert (Zuweisung)==fragt (Vergleich)
Schreibst du = dort, wo eine Bedingung stehen muss, bricht Python 3 mit einer klaren Fehlermeldung ab:
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?Gute Nachricht: Dieser Fehler bleibt nicht unbemerkt, er wird abgefangen.
Text vergleichen
print("rafi" == "rafi")
print("Rafi" == "rafi")
print("apple" < "banana")
print(len("password123") >= 8)True
False
True
TrueZwei Dinge sind dabei zu beachten:
Groß- und Kleinschreibung zählt. "Rafi" ist nicht gleich "rafi". Wenn du Text vergleichst, den eine Person eingegeben hat, ruf vorher .strip().lower() auf — sonst werden alle abgewiesen, die ihren Namen großgeschrieben oder ein überflüssiges Leerzeichen getippt haben:
typed = " RAFI "
print(typed == "rafi")
print(typed.strip().lower() == "rafi")False
True< funktioniert auch bei Text, und zwar nach alphabetischer Reihenfolge, wie in einem Wörterbuch — deshalb gilt "apple" < "banana". Darauf beruht das Sortieren einer Namensliste.
and, or, not
Drei Wörter verbinden kleine Fragen zu größeren:
age = 22
has_id = True
print(age >= 18 and has_id)
print(age >= 60 or has_id)
print(not has_id)True
True
Falseand— wahr, wenn beide wahr sindor— wahr, wenn mindestens eine wahr istnot— kehrt es um
Das ganze Bild auf einmal:
print(True and True)
print(True and False)
print(False and False)
print(True or False)
print(False or False)True
False
False
True
Falseorbedeutet „eins oder mehr“, nicht „genau eins“. Im Alltag impliziert „Tee oder Kaffee?“, dass man eins von beiden nimmt. PythonsoristTrue, auch wenn beide Seiten wahr sind. Wer das vergisst, wird von Bedingungen überrascht.
not bezieht sich immer auf das, was direkt danach kommt, und wird zuerst ausgeführt. Die Reihenfolge lautet: zuerst not, dann and, zuletzt or.
print(True or False and False)
print((True or False) and False)True
FalseIn der ersten Zeile wurde and zuerst ausgeführt, also las Python True or (False and False) — das ergibt True or False, also True. In der zweiten änderten die Klammern die Reihenfolge. Im Zweifel nimm Klammern — das gilt hier genauso wie bei der Rechnung.
Verkettete Vergleiche
Um zu prüfen, ob etwas zwischen zwei Grenzen liegt, erlaubt Python, es so zu schreiben, wie man es in der Mathematik tut:
marks = 72
print(0 <= marks <= 100)
print(marks > 60 and marks < 80)
print(60 < marks < 80)True
True
TrueDie zweite und dritte Zeile sagen dasselbe, die dritte liest sich aber besser. Viele Programmiersprachen erlauben das nicht; Python schon, und du solltest es nutzen.
Welche Werte Python als falsch behandelt
Es ist nicht nur False — auch einige ganz gewöhnliche Werte gelten als falsch:
print(bool(0))
print(bool(1))
print(bool(-5))
print(bool(""))
print(bool("hello"))
print(bool("0"))
print(bool("False"))False
True
True
False
True
True
TrueDie Regel in einem Satz: Null und leere Dinge sind falsch, alles andere ist wahr. Also ist 0 falsch und leerer Text "" ist falsch; -5 aber ist wahr (es ist nicht null), und "0" und "False" sind wahr — denn sie sind nicht leer, sie enthalten Zeichen.
Die letzten beiden Zeilen sind die eigentliche Falle. Alles, was von input() kommt, ist Text. Selbst wenn jemand 0 tippt, bekommst du "0" — und das betrachtet Python als wahr. Um Zahlen zu vergleichen, musst du vorher mit int() umwandeln.
Die Regel „leer ist falsch“ hat auch einen praktischen Nutzen: Sie erkennt, wenn jemand Enter gedrückt hat, ohne etwas zu tippen:
name = input("Name: ").strip()
print("Name was given:", bool(name))Name:
Name was given: FalseEin vollständiges Beispiel
eligibility.py:
# Check a discount rule without deciding anything yet
age = int(input("Age : "))
years_member = int(input("Years a member : "))
order_total = float(input("Order total : "))
is_adult = age >= 18
is_senior = age >= 60
is_loyal = years_member >= 2
is_large_order = order_total >= 1000
# The rule: adults who are either long-standing members or spending a lot
gets_discount = is_adult and (is_loyal or is_large_order)
print()
print(f"Adult : {is_adult}")
print(f"Senior : {is_senior}")
print(f"Loyal member : {is_loyal}")
print(f"Large order : {is_large_order}")
print(f"Gets discount : {gets_discount}")Age : 34
Years a member : 1
Order total : 1500
Adult : True
Senior : False
Loyal member : False
Large order : True
Gets discount : TrueBeachte, dass jede Bedingung zuerst einen eigenen Namen bekommt und die Regel danach aus diesen Namen zusammengesetzt wird. Als eine einzige Zeile — age >= 18 and (years_member >= 2 or order_total >= 1000) — würde der Code genauso laufen, aber die Regel sechs Monate später wieder herauszulesen wäre mühsam. Auch die Klammern sind wichtig: Ohne sie würde and zuerst ausgeführt, und die Regel selbst würde sich ändern.
Wenn etwas schiefgeht
SyntaxError: invalid syntax. Maybe you meant '==' ... Ein = steht dort, wo ein Vergleich hingehört. Verwende ==.
Die beiden sollten gleich sein, aber ich bekomme False Prüfe drei Dinge: überflüssige Leerzeichen (.strip()), Groß- und Kleinschreibung (.lower()) und den Typ — "22" == 22 ist immer False, denn Text und Zahl sind nie gleich.
TypeError: '<' not supported between instances of 'str' and 'int' Du hast Text mit einer Zahl verglichen, wahrscheinlich hast du vergessen, einen input() umzuwandeln. Wickle ihn in int() ein.
Zwei Dezimalzahlen werden mit == nicht als gleich erkannt Das ist zu erwarten — erinnere dich an die Dezimalfalle aus Kapitel 5. Vergleiche nach round().
Die Bedingung tut nicht, was sie sagt Prüfe die Reihenfolge von and/or: zuerst not, dann and, dann or. Mit Klammern machst du deine Absicht ausdrücklich deutlich.
Schritt 4 von 6 — Vorhersagen
Prüfe dein Verständnis
Welche Ausgabe erzeugen diese drei Zeilen?
print(5 > 3 and 2 > 4)
print(5 > 3 or 2 > 4)
print(not 5 > 3)- AFalse True True
- BFalse False True
- CTrue True False
- DFalse True False
Wie zählt jeder dieser drei Werte als wahr oder falsch?
print(bool("False"))
print(bool(""))
print(bool(0))- ATrue False False
- BTrue True False
- CFalse True False
- DFalse False False
Die Person hat Yes eingegeben (großes Y, ein Leerzeichen am Ende), und das Programm sagt Continuing: False. Warum, und was ist die beste Lösung?
answer = input("Type yes to continue: ")
print("Continuing:", answer == "yes")- A`answer` muss zuerst mit `bool()` umgewandelt werden
- BDas `==` müsste ein `=` sein
- CSowohl das Leerzeichen am Ende als auch der Großbuchstabe zählen bei einem Vergleich — es braucht `answer.strip().lower() == "yes"`
- DEin Wert von `input()` kann nie gleich `"yes"` sein, also muss stattdessen `in` verwendet werden
Zum Antworten brauchst du ein Konto
Melde dich an, um deine Antworten zu prüfen
Die Fragen stehen oben, und sie im Kopf durchzuarbeiten ist der wichtige Teil. Melde dich an, um die Antworten, die Erklärungen und die dreistufigen Hinweise zu sehen.
Jetzt bist du dran
Schreibe eine Datei namens password_check.py, die ein Passwort entgegennimmt und zu vier Fragen True oder False ausgibt:
- Die Länge ist mindestens 8
- Die Länge liegt zwischen 8 und 20 (schreibe das als verketteten Vergleich)
- Das Wort
"password"kommt nicht darin vor (du brauchst sowohlnotals auchin, und du solltest vor dem Vergleich in Kleinbuchstaben umwandeln) - Ob alle drei obigen gleichzeitig wahr sind
Starte es danach mit mindestens vier verschiedenen Passwörtern: eines sehr kurz, eines sehr lang, eines mit Password und großem Anfangsbuchstaben und eines, das alle Bedingungen erfüllt. Prüfe, ob alle vier Antworten stimmen — besonders die dritte, denn dort lauert die Falle mit der Groß- und Kleinschreibung.
In dieser Mission steckt noch mehr
Was du oben gelesen hast, ist die vollständige Mission – nichts wurde herausgekürzt. Pro ergänzt:
- Was wirklich unter der Haube passiert – wie Python das ausführt
- Die vollständige Lösung der Übung, Schritt für Schritt erklärt
- Schwierigere Zusatzübungen
- Die Interviewfrage zu diesem Thema, mit Musterantwort
Schritt 6 von 6
Herausforderung — das Kapitel-Quiz
Zehn Fragen von leicht bis schwer. Die letzten sind absichtlich knifflig.
Melde dich an, um das Quiz zu machen