Een trefwoord
In 1966 bouwde Joseph Weizenbaum Eliza, een programma waarmee je kon chatten. Veel mensen dachten dat Eliza hen begreep. Toch deed het programma iets heel kleins: het zocht in je zin naar trefwoorden en gaf bij elk trefwoord een vast antwoord. Zo'n chatbot bouw je hier zelf, in vier kleine stappen. In deze eerste stap reageert hij op één trefwoord.
In dit project gebruik je if en else uit
If en else, elif, or en and uit
And, or en elif, en .lower() uit
String-methoden. Voor deze
eerste stap heb je alleen if nodig.
Voorspel
zin = "hoi, hoe gaat het?"
if "hoi" in zin:
print("Hallo, leuk dat je er bent.")
Wat print dit programma? En wat print het als zin de tekst
"goedemorgen" is?
Antwoord
Bij "hoi, hoe gaat het?" print het Hallo, leuk dat je er bent., want
"hoi" staat in de zin. Bij "goedemorgen" print het niets: de if past
niet, en er staat geen andere regel onder.
Zo werkt het
Het nieuwe stuk is in op tekst:
print("hoi" in "hoi, hoe gaat het?") # True
print("doei" in "hoi, hoe gaat het?") # False
"hoi" in zin is True als het stukje tekst ergens in de zin staat, en
False als het er nergens in staat. Alleen bij True voert de if zijn
print uit.
De chatbot begrijpt dus niets van je zin. Hij kijkt alleen of de letters van het trefwoord ergens in de zin achter elkaar staan.
Onderzoek
- Verander
zinin"Hoi, hoe gaat het?", met een hoofdletter. Wat gebeurt er? - Verander het trefwoord
"hoi"in"hoe gaat". Past de regel nog op de zin? - Verander het trefwoord in
"o", en probeer een paar andere zinnen. Wanneer antwoordt de chatbot?
Antwoorden
- De chatbot zegt niets. Voor Python zijn
henHtwee verschillende letters, dus"hoi"staat niet in"Hoi, hoe gaat het?". In hoofdletters los je dat op. - Ja. Een trefwoord mag ook uit twee woorden bestaan:
inzoekt naar het hele stukje tekst, met de spatie erbij. - Bij bijna elke zin, want bijna elke zin heeft een
o. Een trefwoord dat te kort is, past op te veel zinnen.
Opdracht: een tweede trefwoord
Laat de chatbot ook reageren op "weer": dan antwoordt hij
Ik kan niet naar buiten kijken. Met de zin uit de editor wordt de uitvoer:
Ik kan niet naar buiten kijken.
Begin klein, en breid de code stap voor stap uit:
- Draai de code. De zin gaat over het weer, maar de chatbot zegt niets: hij kent alleen
"hoi". - Zet onder de eerste
ifeen tweedeifvoor"weer", met een eigenprint. Draai opnieuw. - Verander
zinin"hoi, hoe is het weer?". Nu geeft de chatbot twee antwoorden.
Tip
Komt het antwoord over het weer niet? Kijk of de tweede if helemaal links
begint, op dezelfde hoogte als de eerste. Staat hij ingesprongen onder de
eerste print, dan hoort hij bij de eerste if, en die past niet.
Antwoord
zin = "wat voor weer wordt het morgen?"
if "hoi" in zin:
print("Hallo, leuk dat je er bent.")
if "weer" in zin:
print("Ik kan niet naar buiten kijken.")
Ik kan niet naar buiten kijken.
Bij "hoi, hoe is het weer?" passen beide regels, en krijg je twee
antwoorden onder elkaar. In de volgende stap kiest de chatbot er één.
Er gaat iets mis
NameError: name 'hoi' is not defined
Oorzaak: de aanhalingstekens om het trefwoord ontbreken. Zonder
aanhalingstekens denkt Python dat hoi een variabele is, en die bestaat
niet.
Oplossing: zet het trefwoord tussen aanhalingstekens.
# FOUT
zin = "hoi daar"
if hoi in zin:
print("Hallo.")
# GOED
zin = "hoi daar"
if "hoi" in zin:
print("Hallo.")
Meer uitleg: Variabelen.
Door naar meer regels.