Ga naar hoofdinhoud

Stap 6: Twee talen (functies)

info

Deze stap gebruikt functies met parameters en return, uit Functies, Parameters en Return, en not uit And, or en elif.

Je hebt ook Franse woordjes:

frans = {"huis": "maison", "boom": "arbre", "kat": "chat"}

Het overhoren gaat precies zo als bij Engels. Alleen de woordenlijst en de naam van de taal in de vraag verschillen. Je hele programma kopiëren en Engels vervangen door Frans werkt, maar elke verbetering moet je dan twee keer maken. Met functies schrijf je het overhoren één keer.

Opdracht: vraag en overhoor​

Plak je programma uit stap 5 in het veld. Ben je het kwijt, neem dan de oplossing van stap 5.

  1. Schrijf een functie vraag(woord, vertaling, taal). Die stelt één vraag, zegt Goed. of Fout, het is …, en geeft met return terug of het antwoord goed was: True of False.
  2. Schrijf een functie overhoor(woorden, taal) met de rondes uit stap 5. Die gebruikt vraag, en geeft het aantal rondes terug.
  3. Overhoor eerst Engels en dan Frans, en print na elke taal Engels: klaar na 2 rondes. (met de goede taal en het goede aantal).

Verwachte uitvoer als je bij Engels house, three, cat en tree typt, en bij Frans maison, arbre en chat:

Ronde 1
Wat is huis in het Engels? house
Goed.
Wat is boom in het Engels? three
Fout, het is tree.
Wat is kat in het Engels? cat
Goed.
Ronde 2
Wat is boom in het Engels? tree
Goed.
Engels: klaar na 2 rondes.
Ronde 1
Wat is huis in het Frans? maison
Goed.
Wat is boom in het Frans? arbre
Goed.
Wat is kat in het Frans? chat
Goed.
Frans: klaar na 1 rondes.
# Plak hier je programma uit stap 5
Klik hier voor een tip.

Begin met vraag. Zoek in je programma het stuk dat één woord vraagt en nakijkt: dat wordt de functie. Waar je nu Goed. of Fout print, weet je ook wat de functie moet teruggeven. Binnen de functie zijn de woorden niet meer altijd Nederlands en Engels, dus kies namen die bij elke taal passen.

Daarna overhoor: dat zijn de rondes. Het nakijken in de ronde doet nu vraag voor je, en wat vraag teruggeeft, zegt of het woord in de lijst met fouten moet. Kijk in And, or en elif hoe je met not een voorwaarde omdraait.

Klik hier voor de oplossing.
engels = {"huis": "house", "boom": "tree", "kat": "cat"}
frans = {"huis": "maison", "boom": "arbre", "kat": "chat"}


def vraag(woord, vertaling, taal):
antwoord = input(f"Wat is {woord} in het {taal}? ")
if antwoord.lower() == vertaling:
print("Goed.")
return True
else:
print(f"Fout, het is {vertaling}.")
return False


def overhoor(woorden, taal):
te_doen = []
for woord in woorden:
te_doen.append(woord)

ronde = 0
while len(te_doen) > 0:
ronde += 1
print(f"Ronde {ronde}")
fout = []
for woord in te_doen:
if not vraag(woord, woorden[woord], taal):
fout.append(woord)
te_doen = fout
return ronde


rondes = overhoor(engels, "Engels")
print(f"Engels: klaar na {rondes} rondes.")
rondes = overhoor(frans, "Frans")
print(f"Frans: klaar na {rondes} rondes.")

Uitvoer:

Ronde 1
Wat is huis in het Engels? house
Goed.
Wat is boom in het Engels? three
Fout, het is tree.
Wat is kat in het Engels? cat
Goed.
Ronde 2
Wat is boom in het Engels? tree
Goed.
Engels: klaar na 2 rondes.
Ronde 1
Wat is huis in het Frans? maison
Goed.
Wat is boom in het Frans? arbre
Goed.
Wat is kat in het Frans? chat
Goed.
Frans: klaar na 1 rondes.

Een derde taal is nu één woordenlijst en twee regels onderaan. En verbeter je het nakijken, bijvoorbeeld zodat een spatie achter het woord niet meer telt, dan doe je dat één keer, in vraag.

Verder bouwen​

Je programma werkt. Wil je verder, kies dan iets uit dit lijstje:

  • Bij één ronde staat er klaar na 1 rondes. Laat het dan klaar na 1 ronde. zeggen.
  • Overhoor de andere kant op: van Engels naar Nederlands. Maak daarvoor met een for-loop een nieuwe dictionary waarin sleutel en waarde zijn omgedraaid.
  • Een spatie achter je antwoord telt nu als fout. Haal die weg met .strip(), die de spaties aan het begin en het eind van een tekst weghaalt.
  • Vraag aan het begin welke taal je wilt oefenen.

Terug naar het overzicht van de projecten.