In de vorige lessen hebben we gewerkt met tekst (strings) en nummers (numbers). Ook hebben we gekeken hoe je code conditioneel kunt uitvoeren. Dat kun je doen met behulp van if..elif..else. Weet je het nog? Zo niet, dan is het wellicht handig om eerst les 1 en les 2 nog even door te nemen!

We gaan in deze les ons eerste spelletje programmeren! We gaan een raad-spelletje maken waarbij we een getal tussen 1 en 10 moeten raden. Maar voordat we dat kunnen, moeten we eerst nog een paar dingen behandelen.

While loop

Vaak willen we dat de computer bepaalde stappen herhaald. Denk bijvoorbeeld aan het raad spelletje dat we gaan maken. Het programma moet eigenlijk steeds hetzelfde doen, als het getal niet is geraden. Het programma moet steeds een getal als input vragen en daarna controleren of het getal goed is. Als dat niet zo is, dan moet het opnieuw een getal vragen. Het is natuurlijk niet handig als we steeds nieuwe regels code hiervoor moeten schrijven, die eigenlijk hetzelfde doen. En denk er ook eens aan, wat het zou betekenen als je niet een getal tussen 1 en 10 moet raden, maar tussen 1 en 100. Dan zou je opeens 90 extra code blokken moeten schrijven. Een getal tussen 1 en 1000 is dan een regelrechte ramp. Niet meer te doen!

Er zijn natuurlijk manieren om dit te handig te doen. De while loop is voor dit scenario perfect. De “while loop” blijft zichzelf herhalen totdat er niet meer aan de conditie wordt voldaan. Hieronder een voorbeeld van een while loop.

x = 0

print(x)

while x < 10:
 x = x + 1

print(x)

We krijgen nu de output 0 en op de volgende regel 10. Wat is hier gebeurd?

Eerst maken we een variabele x. Deze is gelijk aan 0. We printen x en krijgen logischerwijs als output 0. Dan beginnen we met een “while loop”. Bovenaan de while loop staat de conditie. De code herhaalt zich dus zolang x kleiner is dan 10.

Hieronder, ingesprongen, staat de code die bij iedere herhaling wordt uitgevoerd. Telkens stellen we x gelijk aan x + 1. Dus de eerste keer dat deze regel wordt uitgevoerd, staat er x = 0 + 1. Na de eerste regel is x dus 1. Python controleert dan de conditie, en deze is waar want 1 is kleiner dan 10. Dus wordt de code nogmaals uitgevoerd. De tweede keer dat de while loop zich herhaalt, staat er x = 1 + 1, want x is aan het begin van de tweede herhaling 1. Na de tweede herhaling is x = 2. De conditie wordt dan weer gecontroleerd en is wederom waar, want 2 is kleiner dan 10. Dit gaat zo door tot de negende herhaling. Aan het begin van de 9de herhaling is x = 9 en aan het einde van de 9de herhaling is x = 10 (controleer of je dit begrijpt!). Python controleer dan de conditie, en deze is niet waar (False) want 10 < 10 is niet waar. De code wordt dus niet herhaalt en Python gaat onder de while loop verder.

Onder de while loop staat de laatste regel code (print). Aangezien x = 10 zien we nog een tweede output namelijk 10.

Handig om te weten: het optellen van 1 bij een getal wordt vaak gebruikt in Python. Het is bijvoorbeeld erg handig om de telling bij te houden hoe vaak een loop zich heeft herhaald, of om de loop met behulp daarvan te laten stoppen. Daarom is er een “shorthand” notatie voor x = x + 1, namelijk x += 1.

x = x + 1

#same result, zelfde resultaat

x += 1

Input vragen

Om het raadspel te kunnen maken, moeten we ook nog steeds een getal kunnen invoeren. Hoe doe je dit?

Je kunt input vragen door middel van de “input” functie.

input('your name')

Je ziet dan een invoerveld verschijnen waar je tekst in kunt voeren.

Het is natuurlijk handig om ook op te slaan wat er hier wordt ingevuld. Want waarschijnlijk wil je hier nog iets mee gaan doen. Je moet dan dus een variabele gelijk stellen aan deze input!

name = input('your name')

print(name)

Nu zie je dat wat er wordt ingevuld ook daarna weer kan worden gebruikt in latere regels code. Want in het print statement staat nu wat er in de input is ingevuld!

Voor ons raadspelletje is er nog een complicatie: input is standaard een string (tekst). Zelfs als je een getal invoert, dan slaat Python dit toch op als string. Daarna is het niet direct mogelijk om het getal te vergelijken met het willekeurige getal. Je moet het eerst converteren naar een getal.

number_as_string = input('give a number between 1 and 10')

number = int(number_as_string)

We vragen eerst om een getal tussen 1 en 10. Dit is echter standaard een string (tekst)! We kunnen dit nog niet gebruiken om het getal te vergelijken met ons willekeurige getal. De functie “int” vormt de string (tekst) om naar een integer (geheel getal). Nu is de variabele “number” wel geschikt om de vergelijking te maken.

Import statements

We hebben het in les 1 gehad over waarom het handig is om Python te gebruiken. Eén van de redenen die toen werd genoemd, was de beschikbaarheid van zeer veel hulpmiddelen ofwel “libraries”. Ze worden ook wel “packages” genoemd. Wat zijn dat nou, die “libraries”? En hoe kun je ze gebruiken?

Python Libraries bieden allerlei functionaliteiten aan die je kunt gebruiken in jouw code. Het zijn er in totaal letterlijk te veel om op te noemen, maar laten we eens als voorbeeld Matplotlib nemen.

Met behulp van Matplotlib kun je in je Python code mooie grafieken maken. Bijvoorbeeld deze grafiek “Scores by group and gender”. Het zou zeer lastig zijn om een dergelijke grafiek helemaal zelf te programmeren. Gelukkig biedt Matplotlib deze functionaliteit en kun je met een paar regels code zulke grafieken toch maken!

Naast Matplotlib zijn er nog duizenden andere handige “libraries”. Andere bekende libraries zijn NumPy om wiskundige berekeningen te doen en Tkinter om user interfaces te maken. Er zijn veel “libraries” die gratis kunnen worden gebruikt, zogenaamde Open Source projecten. Deze libraries worden onderhouden door een groep ontwikkelaars, vaak op vrijwillige basis. Soms worden ze ondersteund door grote bedrijven. Niet alle libraries of packages zijn gratis, er zijn ook commerciële. Hiervoor heb je een betaalde licentie nodig.

We gaan nu gebruik maken van een package/library genaamd “random”. Dit gaan we gebruiken om een willekeurig getal te kiezen aan het begin van ons spel. Eerst importeer je random op de volgende manier:

import random

Na het import statement kun je gebruik maken van alle functies die random biedt. De functie die we gaan gebruiken is “randint”. Dit is een functie die een random integer (geheel getal) kiest tussen de waarden die je kiest. Hieronder kiezen we een willekeurig getal tussen 1 en 10.

import random

x = random.randint(1,10)

print(x)

Als je de play knop meerdere keren aanklikt, zie je steeds een ander getal tussen 1 en 10. Hoe werkt dit? Eerst importeren we random. We maken daarna een variable x aan die we gelijk stellen aan random.randint(1,10). Dit ziet er wellicht erg vreemd uit. “randint” is een functie van het random pakket. Omdat we random hebben geïmporteerd, kunnen we deze functie gebruiken. Maar hoe weet je nu welke functies random allemaal kan uitvoeren? Dit is een kwestie van het lezen van de documentatie, of googelen. Bij de documentatie van random staat:

random.randint(ab)

Return a random integer N such that a <= N <= b. Alias for randrange(a, b + 1).

Vaak begin je met jezelf af te vragen wat je wilt doen. Je gaat googelen en je vindt dan (hopelijk) een handige library die dit voor je kan doen. Dit scheelt een hoop werk, want zo hoef je het niet allemaal zelf te programmeren! Als je de beste library hebt gekozen, dan lees je nauwkeurig de documentatie en kun je de functie op de juiste manier gebruiken!

Guessing game

En nu hebben we genoeg informatie om het raadspel te gaan maken. De opdracht is als volgt:

Programmeer een raadspel waarbij je een getal moet raden tussen 1 en 10. Het programma kiest eerst een getal tussen 1 en 10 met behulp van een random functie. Daarna voert het programma een loop uit waarin telkens om input wordt gevraagd. Het programma stopt als het juiste getal is geraden. Je geeft dan met behulp van een print statement aan dat het juiste getal is geraden.

Probeer het eerst eens zelf! Het is nog best lastig. De oplossing (beter gezegd, een oplossing) voor het raadspelletje vind je in dit Python notebook en ook hieronder:

import random

x = random.randint(1,10)

y = 0

while x != y:
  z = input('number between 1 and 10')
  y = int(z)

print('you have guessed it! the right number was indeed ' + str(x))

We importeren eerst random. We kiezen een random getal tussen 1 en 10 en slaan dit getal op in de variabele x. Daarna maken we een nieuwe variabele y en stellen deze eerst gelijk aan 0 (zodat de while loop in ieder geval 1 keer gaat uitvoeren). Je zult vaak zien dat leerlingen deze stap overslaan (en misschien heb je dit zelf ook gedaan). Je krijgt dan het probleem dat de variabele waarmee je wilt gaan vergelijken, nog niet beschikbaar is om de while loop te maken. De regels binnen de while loop kunnen eventueel worden samengevoegd. Je kunt ook y = int(input(‘number between 1 and 10’)) schrijven. Zo wordt de input direct geconverteerd naar een integer.

Sommige leerlingen zullen if..else.. statements proberen te maken om te kijken of er input gevraagd moet worden ofwel dat er moet worden geprint dat het juiste getal is geraden. Dit is echter niet nodig, omdat je hiervoor de while loop kunt gebruiken! De while loop stopt namelijk op het moment dat het getal is geraden. Daaronder kun je de regel code schrijven om te laten weten dat het juiste getal is geraden.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *