Abschnitt 3 · Lektion 5
Leer und None
if antwort == "j" or "J": lässt jeden durch, auch bei einem n. Ein "J" allein, ganz ohne
Vergleich, reicht Python als Bedingung, und der Text zählt dann, als stünde dort True. Das liegt
daran, dass ein if mit jedem Wert etwas anfangen kann, nicht nur mit True und False. Manche
Werte gelten dabei als wahr, andere als falsch. Und dann gibt es noch einen besonderen Wert, der
„hier ist noch nichts“ bedeutet.
Was als falsch gilt
print(bool(0), bool(0.0), bool(""), bool(None))
print(bool(7), bool(-1), bool("0"), bool(" "), bool("Nein")) bool() verwandelt einen Wert in True oder False, und zwar genau so, wie ein if ihn sehen
würde. Es funktioniert wie int() und float() aus Lektion 2.5, nur dass am Ende eben wahr oder
falsch herauskommt.
Die Regel dahinter ist kürzer, als man denkt. Falsch ist, was leer ist oder null:
Falseselbst- die Zahl
0, auch als0.0 - der leere Text
"" None, dazu gleich mehr- und alles andere, was leer sein kann, etwa eine leere Liste, die in Abschnitt 5 dazukommt
Alles andere gilt als wahr. In der zweiten Zeile im Beispiel stehen die Fälle, die überraschen. Eine
negative Zahl ist wahr. Der Text "0" ist wahr, weil er nicht leer ist. Er enthält ja ein Zeichen.
Ein Text aus einem einzigen Leerzeichen ist wahr. Und sogar der Text "Nein" ist wahr. Python liest
keine Wörter, es schaut nur, ob etwas da ist.
Damit ist auch das "J" aus der letzten Lektion geklärt. Weil es ein Text ist, der nicht leer ist,
gilt es als wahr, sodass die ganze Bedingung immer erfüllt war.
Wenn nichts eingegeben wurde
name = input("Wie heißt du? ")
if name:
print(f"Hallo {name}!")
else:
print("Hallo Unbekannt!") Am nützlichsten ist die Regel bei Eingaben. Wenn jemand auf eine Frage nur Enter drückt, kommt ein
leerer Text an. if name: ist also die kurze Form von „wenn etwas eingegeben wurde“. Ausgeschrieben
hieße es if name != "":, und beides tut dasselbe. In Python ist die kurze Form die übliche.
In eingabe.txt steht diesmal eine leere Zeile, so als hätte jemand nur Enter gedrückt. Die Frage
bleibt deshalb ohne Antwort stehen, und darunter kommt der Gruß an Unbekannt. Mit einem Namen in der
Datei wird der Gruß persönlich. Wenn dagegen gar nichts darin steht, nicht einmal eine leere Zeile,
kommt der EOFError aus Lektion 2.6. Dann fehlt nicht nur die Antwort, sondern die ganze Zeile.
Noch kein Wert mit None
preis = 20
rabatt = None
print(rabatt)
print(type(rabatt))
print(rabatt is None)
print(preis - rabatt) Manchmal gibt es für eine Variable noch keinen Wert, und das soll man ihr ansehen. Ein Rabatt, der
noch nicht feststeht. Ein Name, nach dem noch niemand gefragt hat. Dafür hat Python einen eigenen
Wert, None, auf Deutsch „keiner“. Er hat einen eigenen Typ, NoneType, und von diesem Typ gibt
es nur ihn.
None ist etwas anderes als 0 oder "". Null ist eine Zahl, mit der man rechnen kann. Ein leerer
Text ist ein Text. None heißt, hier steht noch gar nichts. Rechnen geht damit deshalb schief, so
wie in der letzten Zeile des Beispiels:
TypeError: unsupported operand type(s) for -: 'int' and 'NoneType'. Minus geht nicht zwischen
einer ganzen Zahl und None. Wenn du diese Meldung siehst, und das wird noch öfter passieren, hat
fast immer eine Variable nicht den Wert bekommen, den du erwartet hast.
Ob eine Variable None ist, fragt man mit is None und nicht mit ==. Beides funktioniert fast
immer, aber is None ist die übliche Form und sagt genauer, was gemeint ist, nämlich ob hier
wirklich das Nichts steht. Das Gegenstück heißt is not None.
Null ist nicht nichts
rabatt = 0
if rabatt:
print(f"Rabatt: {rabatt} Prozent")
else:
print("Noch kein Rabatt eingetragen")
if rabatt is None:
print("Noch kein Rabatt eingetragen")
else:
print(f"Rabatt: {rabatt} Prozent") Die kurze Form hat eine Falle. Im Beispiel steht der Rabatt fest, und er beträgt 0 Prozent. Nach der
ersten Bedingung, if rabatt:, ist trotzdem noch keiner eingetragen. Für sie sehen 0 und „nichts“
gleich aus, beides ist falsch.
Die zweite Bedingung fragt genauer, if rabatt is None:, und hält die beiden auseinander. None
heißt „steht noch nicht fest“. 0 heißt „steht fest, und zwar null“.
Die kurze Form passt also nur, wo leer und null wirklich dasselbe bedeuten. Überall sonst ist null
eine echte Antwort. Ein if menge: hält sie aber für „nichts eingegeben“, egal ob null Brötchen
bestellt, null Euro Trinkgeld gegeben oder null Fehler gefunden wurden.
Zum Mitnehmen
Für ein if ist nicht nur False falsch, sondern auch 0, ein leerer Text und None. Das macht viele Bedingungen kurz und manche falsch, nämlich dann, wenn 0 eine echte Antwort ist.
Jetzt du
Basis Konto, kostenlosZu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.
Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.
In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.
Was in dieser Lektion steckt
-
Artikel mit 4 Beispielen zum Ausprobieren
Steht hier, ohne Konto lesbar.
-
Aufgabe, dein Code läuft auf einem Server
Öffnet sich mit dem Basis Konto.