8. Input van de gebruiker#
In de voorgaande hoofdstukken hebben we veelvuldig gebruik gemaakt van de functie print() om tekst op het scherm te tonen. Het wordt een stuk interessanter wanneer je de gebruiker de mogelijkheid geeft om zelf tekst te typen, waarmee het programma vervolgens iets doet. Op die manier maak je je programma interactief.
Wat leer je in dit hoofdstuk
Hoe laat je met de functie
input()de gebruiker iets typen.Hoe geef je de vraagtekst mee aan de functie
input().Waarom heb je soms typecasting nodig bij deze functie.
De functie input()#
De werking van de functie input() kun je het beste begrijpen door er meteen mee aan de slag te gaan. Maak een nieuw codebestand, met bijvoorbeeld de naam input.py en probeer de volgende code uit:
1# Demonstratie van de functie input()
2
3print('Hoe heet je?')
4naam = input()
5print(f'Aangenaam kennis te maken {naam}!')
De aanroep input in regel 4 zorgt ervoor dat de gebruiker data kan invoeren; in dit geval een naam. De invoer van de gebruiker wordt met het assignment statement opgeslagen in de variabele naam .
In het bovenstaande voorbeeld gebruikten we twee coderegels voor de vraagstelling: regel 3 zorgde voor het tonen van de vraag en regel 4 voor het opslaan van de gebruikersinvoer in de variabele naam. Het kan echter ook met slechts één coderegel:
1# Demonstratie van de functie input()
2
3naam = input('Hoe heet je?')
4print(f'Aangenaam kennis te maken {naam}!')
Run deze versie van de code en let op het verschil met de eerste versie!
Tussen de haakjes van een input() aanroep kun je de vraagtekst meegeven, maar het gevolg hiervan is dat de gebruiker direct achter die vraagtekst kan typen:
Dit ziet er niet zo mooi uit. Je kunt het verbeteren door aan het einde van je vraagtekst een extra spatie te plaatsen:
naam = input('Hoe heet je? ')
Maar je kunt ook het escape karakter \n gebruiken om een regeleinde in te voegen, zodat de gebruiker het antwoord op een nieuwe regel typt (zoals in de eerste versie van input.py):
naam = input('Hoe heet je?\n')
Altijd een string#
Wijzig de inhoud van input.py als volgt:
1# Demonstratie van de functie input()
2
3getal1 = input('Geef het eerste getal: ')
4getal2 = input('Geef het tweede getal: ')
5print(f'De som van deze getallen is {getal1 + getal2}.')
Run deze code, voer twee getallen in en bekijk het resultaat. Had je dit verwacht?
Wanneer we de getallen 4 en 2 invoeren, is het resultaat van de optelling niet 6 maar 42! Wanneer je tijdens het runnen van de code in de CLI de waarden van getal1 en getal2 opvraagt, wordt de oorzaak duidelijk:
De variabelen getal1 en getal2 bevatten niet de integers 4 en 2 maar de strings '4' en '2'. Uiteraard kunnen we dit oplossen met typecasting:
1# Demonstratie van de functie input()
2
3getal1 = input('Geef het eerste getal: ')
4getal2 = input('Geef het tweede getal: ')
5getal1 = int(getal1)
6getal2 = int(getal2)
7print(f'De som van deze getallen is {getal1 + getal2}.')
of korter (maar misschien moeilijker te doorgronden):
1# Demonstratie van de functie input()
2
3getal1 = int(input('Geef het eerste getal: '))
4getal2 = int(input('Geef het tweede getal: '))
5print(f'De som van deze getallen is {getal1 + getal2}.')
Onthouden
De functie input() retourneert altijd een stringwaarde; ook wanneer de gebruiker getallen typt. Je moet deze dus zelf typecasten naar het gewenste datatype.
Het programma laten crashen
Wanneer je de gebruiker iets laat invoeren, loop je het gevaar dat je programma daar niet goed op reageert. De laatste versie van ons programma input.py kun je bijvoorbeeld heel gemakkelijk laten crashen door in plaats van een getal een letter in te vullen:
Een manier om dit te voorkomen is de volgende:
1# Demonstratie van de functie input()
2
3try:
4 getal1 = int(input('Geef het eerste getal: '))
5 getal2 = int(input('Geef het tweede getal: '))
6except:
7 print('U dient een getal in te vullen!')
8else:
9 print(f'De som van deze getallen is {getal1 + getal2}.')
We gaan nu niet verder in op deze constructie (je hoeft dit namelijk nog geenszins te kunnen), maar wellicht komen we er later op terug.
Opdrachten#
Opdracht 01
Maak in Mu editor een nieuw codebestand en sla het op onder de naam begroeting.py. Schrijf een programma dat het volgende doet:
Vraag de gebruiker om zijn/haar voornaam te typen.
Vraag de gebruiker om zijn/haar achternaam te typen.
Toon een begroeting waarin je de voornaam en achternaam verwerkt.
Een voorbeeld:
Opdracht 02
Maak in Mu editor een nieuw codebestand en sla het op als verhaal.py. Kopieer de onderstaande code naar het bestand:
1# Input - opdracht 02
2
3# Uitleg van het programma:
4print('*** Dit programma maakt een verhaal met jouw input! ***')
5print()
6
7# Input van de gegevens:
8dag = input('Wat is je favoriete dag van de week: ')
9hoofdpersoon = input('Welke meisjesnaam kom je weinig tegen: ')
10winkel = input('Bij welke supermarkt kom je wel eens: ')
11
12# Het verhaal:
13print()
14print(f'Op een zonnige {dag} fietste {hoofdpersoon} naar de {winkel}.')
15print(f'{hoofdpersoon} was dol op boodschappen doen en ze kwam bijna dagelijks bij de {winkel}.')
16print(f'Maar wat {hoofdpersoon} niet wist, was dat er vandaag iets heel bijzonders zou gebeuren.')
Run en test de code. Dit programma produceert de eerste drie regels van een verhaal met ingrediënten die de gebruiker typt. Merk op dat in regels 5 en 13 een lege print() aanroep staat. Daarmee wordt een witregel geprint.
Breid de code zodanig uit dat:
er nog meer gegevens voor het verhaal aan de gebruiker worden gevraagd (voeg code in na regel
10);het verhaal tenminste acht zinnen telt en een duidelijk einde heeft.
Eventueel mag je ook de eerste drie zinnen wijzigen als dat beter past bij jouw verhaal.
Opdracht 03
Maak in Mu editor een nieuw codebestand en sla het op als gemiddelde.py. Schrijf een programma dat:
de gebruiker vraagt de laatste drie behaalde schoolcijfers te typen;
het gemiddelde van die drie cijfers toont.
Afronden van het gemiddelde op één cijfer achter de komma levert bonuspunten op!
Voorbeeld: