Dictionaries en andere verzamelingen · oefening
Wanneer waarden als waar of onwaar gelden
Voorwaarden hebben niet altijd een expressie nodig die de letterlijke waarde True of False oplevert.
Je kunt een andere waarde rechtstreeks in een voorwaarde plaatsen:
catalog = []
if catalog:
print("The catalog has items.")
else:
print("The catalog is empty.")
De lege lijst volgt het pad van else. Python behandelt sommige waarden als onwaar wanneer het een beslissing moet nemen.
Vraag hoe Python een waarde ziet
De functie bool() toont het booleaanse resultaat dat Python gebruikt. Voer dit voorbeeld uit, vervang vervolgens een van de waarden en voer het opnieuw uit:
De uitvoer is:
False
True
False
True
Een lege string en een lege lijst gelden als onwaar. Een niet-lege string en een niet-lege lijst gelden als waar.
De termen zijn:
een falsy waarde geldt als
Falsein een voorwaarde;een truthy waarde geldt als
Truein een voorwaarde.
Deze woorden beschrijven hoe een waarde zich in een voorwaarde gedraagt. Ze veranderen het type van de waarde niet. Een lege lijst blijft een lijst.
Veelvoorkomende falsy waarden
Deze bekende waarden zijn falsy:
| Soort | Falsy voorbeeld |
|---|---|
| booleaanse waarde | False |
| geen waarde | None |
| getal | 0 of 0.0 |
| string | "" |
| lijst | [] |
| dictionary | {} |
| set | set() |
De meeste andere waarden van deze typen zijn truthy. Zo zijn 5, "Python", [0] en {"ready": False} allemaal truthy.
Kijk goed naar [0]. Het getal in de lijst is falsy, maar de lijst zelf is niet leeg, dus de lijst is truthy.
Wat drukt dit af?
values = [0]
if values:
print("Has an item")
else:
print("Empty")Gebruik not voor het lege geval
Je leerde dat not een booleaans resultaat omkeert. Het keert ook het booleaanse resultaat van een truthy of falsy waarde om:
query = " "
clean_query = query.strip()
if not clean_query:
print("Enter a title to search.")
Na .strip() is clean_query gelijk aan "". Die lege string is falsy, dus not clean_query is True.
Dit is een veelgebruikte en leesbare manier om te controleren of een string of verzameling leeg is:
if not catalog:
print("The catalog is empty.")
Behoud expliciete controles wanneer het onderscheid ertoe doet
Truthiness groepeert meerdere waarden. Dat is handig wanneer de regel echt “leeg of niet leeg” betekent. Het kan te ruim zijn wanneer verschillende falsy waarden verschillende betekenissen hebben.
De zoekles gebruikte:
if match is None:
print("No matching title.")
Behoud die expliciete controle. Een zoekresultaat van None betekent dat er geen record is gevonden. Een lege dictionary zou een andere waarde zijn, ook al zijn beide falsy.
Kies de voorwaarde die de werkelijke regel van het programma uitdrukt:
gebruik
if not itemswanneer de regel betekent dat de verzameling leeg is;gebruik
if value is Nonewanneer de regel betekent dat er geen waarde is teruggegeven;gebruik
if score == 0wanneer nul een specifieke betekenis heeft die je expliciet wilt benoemen.
Waarom is if match is None na een zoekopdracht duidelijker dan if not match?
Beschrijf of een zoekopdracht kan beginnen
De oefening combineert de twee nuttige controles op leegte uit deze les. Controleer eerst of de catalogus leeg is. Schoon daarna de zoekterm op en controleer of er tekst overblijft. Geef een bericht terug in plaats van binnen de functie af te drukken.
Opdracht
Maak search_status(catalog, query) af.
Maak
clean_querymetquery.strip().Geef
"The catalog is empty."terug alscatalogleeg is.Geef anders
"Enter a title to search."terug alsclean_queryleeg is.Geef anders
"Ready to search N items for QUERY."terug met de lengte van de catalogus en de opgeschoonde zoekterm.
Gebruik truthiness met if not catalog en if not clean_query. Verander de catalogus of de zoekterm niet.