Stap 6: Twee talen (functies)
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.
- Schrijf een functie
vraag(woord, vertaling, taal). Die stelt één vraag, zegtGoed.ofFout, het is …, en geeft metreturnterug of het antwoord goed was:TrueofFalse. - Schrijf een functie
overhoor(woorden, taal)met de rondes uit stap 5. Die gebruiktvraag, en geeft het aantal rondes terug. - 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 danklaar 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.