Meer regels
In de vorige stap gaf de chatbot bij "hoi, hoe is het weer?" twee
antwoorden. Met elif en else kiest hij er precies één: het antwoord van
de eerste regel die past.
Je gebruikt hier elif uit
And, or en elif, en else uit
If en else.
Voorspel
zin = "hallo, hoe is het weer?"
if "hallo" in zin:
print("Hallo, leuk dat je er bent.")
elif "weer" in zin:
print("Ik kan niet naar buiten kijken.")
else:
print("Daar weet ik niets van.")
Wat print dit programma? En wat print het bij
"wat voor weer wordt het morgen?", en bij "ik heb honger"?
Antwoord
Bij "hallo, hoe is het weer?" print het Hallo, leuk dat je er bent. De
zin past op twee regels, maar alleen de eerste telt. Bij de vraag over
morgen staat er geen "hallo" in de zin, wel "weer", dus print het
Ik kan niet naar buiten kijken. Bij "ik heb honger" past geen enkele
regel, en krijg je het antwoord van de else: Daar weet ik niets van.
Zo werkt het
elif betekent "anders, als". Python loopt de regels van boven naar beneden
af. De eerste regel die past, bepaalt het antwoord, en de regels daaronder
slaat hij over. Past er geen enkele, dan voert hij de else uit. Een else
heeft geen trefwoord: hij vangt alles op wat overblijft.
De volgorde van je regels telt dus. Zet je de regel over het weer bovenaan,
dan praat de chatbot bij "hallo, hoe is het weer?" over het weer.
Onderzoek
- Wissel de twee regels om:
"weer"komt bij deif,"hallo"bij deelif, elk met zijn eigenprint. Wat antwoordt de chatbot nu? - Verander
zinin"ik ga weer naar huis". Snapt de chatbot wat je bedoelt? - Haal de
elseen deprinteronder weg, en probeer"ik heb honger". Wat zegt de chatbot?
Antwoorden
Ik kan niet naar buiten kijken.De zin past nog steeds op twee regels, en nu staat die over het weer bovenaan.- Nee. De chatbot ziet
"weer"en praat over het weer, terwijl je "opnieuw" bedoelt. Hij zoekt naar letters, niet naar betekenis. - Niets. Zonder
elseheeft de chatbot geen antwoord als geen regel past.
Opdracht: twee regels erbij
Geef de chatbot een regel voor "naam", die Ik heet Bot. En jij?
antwoordt, en een voor "doei", die Doei, tot de volgende keer.
antwoordt. Alle andere zinnen krijgen Daar weet ik niets van. Met de zin
uit de editor wordt de uitvoer:
Ik heet Bot. En jij?
Begin klein, en breid de code stap voor stap uit:
- Draai de code. Bij deze zin zegt de chatbot nog niets: er is maar één regel.
- Zet onder de
ifeenelifvoor"naam", en draai opnieuw. - Voeg een
eliftoe voor"doei". Veranderzinin"doei bot"om hem te testen. - Zet er een
elseonder voor alle andere zinnen, en test met een zin zonder trefwoord.
Tip
Een elif staat op dezelfde hoogte als de if, met de print eronder
ingesprongen. Achter else staat geen trefwoord, alleen een dubbele punt.
Antwoord
zin = "wat is je naam?"
if "hoi" in zin:
print("Hallo, leuk dat je er bent.")
elif "naam" in zin:
print("Ik heet Bot. En jij?")
elif "doei" in zin:
print("Doei, tot de volgende keer.")
else:
print("Daar weet ik niets van.")
Ik heet Bot. En jij?
De else staat altijd onderaan: hij is voor de zinnen waar geen regel
boven hem op paste.
Er gaat iets mis
SyntaxError: expected ':'
Oorzaak: je gaf de else een trefwoord. Een else heeft geen
voorwaarde, dus Python verwacht direct na else de dubbele punt.
Oplossing: gebruik elif voor een regel met een trefwoord, en houd de
else kaal.
# FOUT
zin = "doei"
if "hoi" in zin:
print("Hallo.")
else "doei" in zin:
print("Doei.")
# GOED
zin = "doei"
if "hoi" in zin:
print("Hallo.")
elif "doei" in zin:
print("Doei.")
Meer uitleg: And, or en elif.
Door naar hoofdletters.