In deze les zullen we leren hoe we ervoor kunnen zorgen dat een programma maar in bepaalde omstandigheden iets doet.
Zo iets van ... als dit waar is, doe dan dit, anders doe dan dat.
Wat zou je ervan denken dat we dit in de vorm van een spelletje doen?
Bijvoorbeeld: hoger - lager.
Het spelletje gaat als volgt: De computer denkt aan een getal tussen 1 en 100. Daarna tik je een cijfer in.
Afhankelijk van wat de computer denkt krijg je een bericht dat het getal hoger of lager is. En zo gaat het verder tot het getal overeenkomt met het getal dat de computer in gedachten heeft.
OK, beginnen we er aan?
Start alvast de python IDLE op en open ook de editor met Ctrl-N. In les 8 hebben we geleerd doe je dat kunt doen.
Om dit programma te maken zullen we verschillende nieuwe opdrachten leren en uiteraard ook al bekende opdrachten gebruikt.
Ook hier is het mogelijk om tot verschillende oplossingen te komen.
Oplossing 1
import random
print ("Hallo, zin in een spelletje hoger - lager?")
ikdenkaan = random.randrange(1,100)
rarara = 0; aantal = 0
print ("Ik heb zojuist aan een getal tussen 1 en 100 gedacht")
rarara = int(input('Raad eens aan welk getal ik denk?'))
aantal = aantal + 1
while rarara != ikdenkaan:
if rarara < ikdenkaan:
print("Sorry, te klein")
if rarara > ikdenkaan:
print("Sorry, te groot")
rarara = int(input('Raad eens aan welk getal ik denk?'))
aantal = aantal + 1
print("Goed geraden!")
print ("Geraden in ", aantal, "keer")
Uitleg oplossing 1
Heel belangrijk. Op verschillende plaatsen zie je dat er ingesprongen wordt. Daar moet je zeker op letten, anders zal het programma niet goed werken. Het inspringen gebeurd telkens met 4 spaties, de grote balk onderaan het toetsenbord. Zullen we eens bekijken wat hier allemaal staat? Of wil je eerst eens het spelletje spelen? Druk maar op F5 als je het spelletje eerst wil spelen.
Even naar het programma kijken. Het eerste wat we moeten doen is dat de computer aan een getal denkt tussen 1 en 100.
Dat kan met de functie random.randrange(). Maar deze functie zit in een module "random" die we eerst moeten laden.
Modules laden wordt gedaan met een import. Laat ons dat even doen:
>>> import random
Nu kunnen we de computer aan een getal doen denken met dit commando:
>>> random.randrange(1,100)
36
Kun je het nog een keer uitvoeren:
>>> random.randrange(1,100)
90
Er zijn 2 getallen die de computer moet bijhouden:
De variable "ikdenkaan" wordt gebruikt voor het getal dat we moeten raden.
De variable "rarara" is het cijfer dat we intikken als de computer vraagt (input) "Raad eens aan welk getal ik denk?"
Ik heb er een 3de variable "aantal" toegevoegd zodat we kunnen bijhouden hoeveel opgingen er zijn gedaan om het getal te raden.
Het lusje maken we met het while commando. While betekent hetzelfde als zolang.
Zolang we het juist cijfer niet hebben geraden blijft de lust doorgaan: while rarara != ikdenkaan:
Merk je ook deze tekens op: !=
Als je getallen met elkaar wil vergelijken kun je dit doen als volgt:
A == B Als A gelijk is aan B
A != B Als A niet gelijk is aan B
A < B Als A kleiner is dan B
A <= B Als A kleiner is of gelijk aan B
A > B Als A groter is dan B
A >= B Als A groter is of gelijk aan B
Voor de while lus gaan we eens vragen naar een getal.
rarara = int(input('Raad eens aan welk getal ik denk?'))
Met de int() functie converteren we de invoer van een string naar een getal.
De variable aantal wordt gebruikt om bij te houden hoeveel pogingen we hebben gedaan.
aantal = aantal + 1
Dit wil zeggen: open het doosje aantal, kijk wat er in zit en tel daar 1 bij.
Nu komt de IF instructie. IF wil zeggen als in het Nederlands.
if rarara < ikdenkaan:
print("Sorry, te klein")
Als variable rarara kleiner is dan ikdenkaan, dan is het getal te klein.
Zo doen we de test met de IF instructie 3 keer want:
- we moeten controleren of het getal te klein is
- een controle of het getal te groot is
- een controle of het getal overeenkomt is niet nodig door de while lus die de controle doet.
Als we uit de lust zijn worden twee commando's uitgevoerd:
print("Goed geraden!")
print ("Goed gedaan, geraden in ", aantal, "keer"
Er verschijnt een bericht met het aantal pogingen die er nodig waren om het juiste getal te raden.
Oplossing 2
Een andere manier om dit programma te maken zou ook als volgt kunnen zijn:
import random
print ("Hallo, zin in een spelletje hoger - lager?")
ikdenkaan = random.randrange(1,100)
rarara = 0; aantal = 0
print ("Ik heb zojuist aan een getal tussen 1 en 100 gedacht")
while 1:
rarara = int(input('Raad eens aan welk getal ik denk?'))
aantal = aantal + 1
if rarara == ikdenkaan:
print("Goed geraden!")
break
else:
if rarara < ikdenkaan:
print("Sorry, te klein")
else:
print("Sorry, te groot")
print ("Goed gedaan, geraden in ", aantal, "keer")
Zie je de verschillen? Deze zitten in de while lus.
while 1:
Dit wil eigenlijk zeggen dat de lus oneindig blijft doorgaan. Eigenlijk is dit hier niet zo goed.
Daarom is een extra controle nodig.
Er wordt eerst een controle gedaan of het getal goed werd geraden.
Is het niet het juiste getal, dan is ofwel het getal te klein of het is te groot.
Als er maar 2 opties zijn, dan kun je gebruik maken van de IF ... ELSE combinatie. Als het getal niet te klein is, dan moet het wel te groot zijn.
Enkele oefeningen
Kun je oplossing 1 ook zo aanpassen dat er maar één IF ... ELSE combinatie wordt gebruikt?
Kun je het programma uitbreiden dat ook naar je naam wordt gevraagd en dat dan telkens je naam wordt gebruikt?
Zou je het programma kunnen uitbreiden dat je maar 10 pogingen hebt om het juiste cijfer te raden?
Wat hebben we geleerd?
- Een spelletje hoger - lager maken in Python is niet zo moeilijk.
- We kunnen de computer aan een willekeurig getal laten denken
- Met tekentjes als <, >, !=, <=, >= kunnen we variables vergelijken.