Dictionaries und andere Sammlungen · Übung
Wann Werte als wahr oder falsch gelten
Bedingungen brauchen nicht immer einen Ausdruck, der den wörtlichen Wert True oder False liefert.
Du kannst einen anderen Wert direkt in eine Bedingung einsetzen:
catalog = []
if catalog:
print("The catalog has items.")
else:
print("The catalog is empty.")
Die leere Liste nimmt den else-Pfad. Python behandelt manche Werte als falsch, wenn es eine Entscheidung treffen muss.
Herausfinden, wie Python einen Wert sieht
Die Funktion bool() zeigt das boolesche Ergebnis, das Python verwendet. Führe dieses Beispiel aus, ersetze dann einen der Werte und führe es erneut aus:
Die Ausgabe lautet:
False
True
False
True
Ein leerer String und eine leere Liste gelten als falsch. Ein nicht leerer String und eine nicht leere Liste gelten als wahr.
Die Begriffe dafür sind:
Ein falsy-Wert gilt in einer Bedingung als
False.Ein truthy-Wert gilt in einer Bedingung als
True.
Diese Wörter beschreiben, wie sich ein Wert in einer Bedingung verhält. Sie ändern nicht den Typ des Wertes. Eine leere Liste ist weiterhin eine Liste.
Häufige Werte, die als falsch gelten
Diese vertrauten Werte gelten als falsch:
| Art | Beispiel, das als falsch gilt |
|---|---|
| boolescher Wert | False |
| kein Wert | None |
| Zahl | 0 oder 0.0 |
| String | "" |
| Liste | [] |
| Dictionary | {} |
| Set | set() |
Die meisten anderen Werte dieser Typen gelten als wahr. Zum Beispiel gelten 5, "Python", [0] und {"ready": False} alle als wahr.
Schau dir [0] genau an. Die Zahl in der Liste gilt als falsch, aber die Liste selbst ist nicht leer, deshalb gilt die Liste als wahr.
Was gibt das aus?
values = [0]
if values:
print("Has an item")
else:
print("Empty")not für den leeren Fall verwenden
Du hast gelernt, dass not ein boolesches Ergebnis umkehrt. Es kehrt auch das boolesche Ergebnis eines Wertes um, der als wahr oder falsch gilt:
query = " "
clean_query = query.strip()
if not clean_query:
print("Enter a title to search.")
Nach .strip() ist clean_query gleich "". Dieser leere String gilt als falsch, deshalb ist not clean_query gleich True.
Das ist eine übliche und gut lesbare Möglichkeit zu prüfen, ob ein String oder eine Sammlung leer ist:
if not catalog:
print("The catalog is empty.")
Ausdrückliche Prüfungen beibehalten, wenn die Unterscheidung zählt
Die Wahrheitsprüfung fasst mehrere Werte zusammen. Das ist nützlich, wenn die Regel tatsächlich „leer oder nicht leer“ meint. Es kann zu weit gefasst sein, wenn verschiedene als falsch geltende Werte unterschiedliche Bedeutungen haben.
Die Lektion zur Suche verwendete:
if match is None:
print("No matching title.")
Behalte diese ausdrückliche Prüfung bei. Das Suchergebnis None bedeutet, dass kein Datensatz gefunden wurde. Ein leeres Dictionary wäre ein anderer Wert, obwohl beide als falsch gelten.
Bevorzuge die Bedingung, die die tatsächliche Regel des Programms ausdrückt:
Verwende
if not items, wenn die Regel bedeutet, dass die Sammlung leer ist.Verwende
if value is None, wenn die Regel bedeutet, dass kein Wert zurückgegeben wurde.Verwende
if score == 0, wenn null eine bestimmte Bedeutung hat, die ausdrücklich benannt werden sollte.
Warum ist if match is None nach einer Suche klarer als if not match?
Beschreiben, ob eine Suche beginnen kann
Die Übung kombiniert die beiden nützlichen Prüfungen auf leere Werte aus dieser Lektion. Prüfe zuerst, ob der Katalog leer ist. Bereinige dann die Suchanfrage und prüfe, ob Text übrig bleibt. Gib eine Nachricht zurück, statt sie innerhalb der Funktion auszugeben.
Aufgabe
Vervollständige search_status(catalog, query).
Erstelle
clean_querymitquery.strip().Wenn
catalogleer ist, gib"The catalog is empty."zurück.Andernfalls, wenn
clean_queryleer ist, gib"Enter a title to search."zurück.Gib andernfalls
"Ready to search N items for QUERY."zurück und verwende dabei die Kataloglänge und die bereinigte Suchanfrage.
Verwende die Wahrheitsprüfung mit if not catalog und if not clean_query. Verändere weder den Katalog noch die Suchanfrage.