0%

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:

Try it

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:

ArtBeispiel, das als falsch gilt
boolescher WertFalse
kein WertNone
Zahl0 oder 0.0
String""
Liste[]
Dictionary{}
Setset()

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).

  1. Erstelle clean_query mit query.strip().

  2. Wenn catalog leer ist, gib "The catalog is empty." zurück.

  3. Andernfalls, wenn clean_query leer ist, gib "Enter a title to search." zurück.

  4. 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.