Hoofdstuk 7a - Iteraties: While-loop
Let op: log eerst in bij repl.itMeteen naar de Afsluitende Opgaven over While loops
Terug naar de cursus pagina
Computers raken niet verveeld. Als een computer een taak honderdduizenden malen moet herhalen, protesteert hij niet. Mensen daarentegen houden juist niet van veel herhaling. Daarom moeten herhalende taken aan een computer worden overgelaten. Een programmeerconstructie die herhalingen mogelijk maken heet een “loop” of “iteratie”.
Dit hoofdstuk legt uit wat je moet weten over loops in Python. Je zult wellicht het gevoel krijgen dat loops een lastig onderwerp zijn. Als dat zo is, neem dan de tijd voor dit hoofdstuk, en werk eraan totdat je zeker weet dat je alles snapt. Loops zijn zo’n belangrijk basis programmeerconcept dat je ze goed moet begrijpen. Elk hoofdstuk dat hierna komt maakt gebruik van loops.
Kennis maken met een while
loop
Stel dat je vijf keer een strafregel moet schrijven, wellicht zou je dat als volgt coderen:
Maar wat als je 500 strafregels moet schrijven? Hiervoor kun je een loop gebruiken.
De eerste loop die we bespreken is de while
loop. De syntax is:
while < boolean voorwaarde >: < acties >
Een while
statement begint met een test, en als de voorwaarde True
oplevert, wordt het blok code onder de while
uitgevoerd. Wanneer het blok code uitgevoerd is, gaat Python terug naar de test na de while
, en test die opnieuw. Als de voorwaarde nog steeds True
oplevert, dan wordt het blok code nogmaals uitgevoerd. En als het is uitgevoerd, keert Python wederom terug naar de test. Dit wordt steeds herhaald, totdat, tijdens het testen, de voorwaarde False
oplevert. Pas op dat moment slaat Python het blok code onder de while
over en gaat eronder verder.
Merk op dat als de boolean voorwaarde meteen de eerste keer False
oplevert, dan wordt het blok code onder de while
onmiddellijk overgeslagen.
Vaak maak je bij de while
herhaling gebruik van de volgende opbouw:
De variabele:
1a) Bepaal wat de variabele is, dus wat veranderd er steeds (vaak is dit een teller om te tellen hoe vaak je al herhaalt hebt).
1b) Geef de variabele een begin waarde (meestal is dit 0, maar soms een ander getal)
De herhaling
while
:
2a) Bepaal wat de voorwaarde voor herhaling is. Wat moet True
zijn (vaak is dit dat de teller kleiner is dan een bepaalde waarde). Dit is de boolean voorwaarde schrijf je meteen na de while
.
2b) Bepaal wat je steeds wilt herhalen, de acties.
2c) Verander de variabele (meestal verhogen met 1).
< variabele initialiseren > while < boolean voorwaarde >: < acties > < variabele aanpassen >
Het bovenstaande voorbeeld wordt met een while
loop dan:
Opgave 7.1.1.0a Hallo!
Klik hier om je eigen oplossing te vergelijken met een model oplossing.Opgave 7.1.1.0 Tellen tot 10.
Deze opdracht wordt nog niet automatisch gecontroleerd. Klik hier om je eigen oplossing te vergelijken met een model oplossing.while
loop voorwaarde
Bij de while
loop moet je altijd voorzichtig zijn met de voorwaarde. Daar worden ook de meeste fouten gemaakt.
Opgave 7.1.1.1 Tot en met 10 tellen
Deze opdracht wordt nog niet automatisch gecontroleerd. Klik hier om je eigen oplossing te vergelijken met een model oplossing.Stroomdiagram voor de while
loop
Het printen van de nummers 0 tot en met 4 kun je met een while
loop als volgt doen:
Deze code wordt ook weergegeven in het onderstaande stroomdiagram.

Het is van belangrijk dat je deze code snapt, dus we nemen hem stap voor stap door.
Op de eerste regel initialiseren we een variabele nummer
. Dit is de variabele die de code gaat afdrukken, dus hij wordt geïnitialiseerd op 0, omdat 0 de eerste waarde is die afgedrukt moet worden.
Dan start de while
loop. De test controleert nummer <= 5
. Omdat nummer
0 is, en 0 kleiner is dan 5, levert de voorwaarde True
op. Dus wordt het blok code onder de while uitgevoerd.
De eerste regel van het blok code print de waarde van nummer
, dus 0. De tweede regel telt 1 op bij de waarde van nummer
, zodat nummer
nu 1 is. Python gaat daarna terug naar de boolean voorwaarde. De laatste regel van het programma, het printen van het woord “Klaar,” wordt dus (nog) niet uitgevoerd omdat hij niet in het code blok van de loop zit, en de loop nog niet afgelopen is.
- Omdat
nummer
gelijk aan 1 is, evalueert de boolean voorwaarde nog steeds alsTrue
. Het blok code wordt dus nogmaals uitgevoerd. 1 wordt afgedrukt,nummer
krijgt waarde 2, en de code keert terug bij de boolean voorwaarde. - Omdat
nummer
gelijk aan 2 is, evalueert de boolean voorwaarde nog steeds alsTrue
. Het blok code wordt dus nogmaals uitgevoerd. 2 wordt afgedrukt,nummer
krijgt waarde 3, en de code keert terug bij de boolean voorwaarde. - Omdat
nummer
gelijk aan 3 is, evalueert de boolean voorwaarde nog steeds alsTrue
. Het blok code wordt dus nogmaals uitgevoerd. 3 wordt afgedrukt, 'nummer
' krijgt waarde 4, en de code keert terug bij de boolean voorwaarde. - Omdat
nummer
gelijk aan 4 is, evalueert de boolean voorwaarde nog steeds alsTrue
. Het blok code wordt dus nogmaals uitgevoerd. 4 wordt afgedrukt, 'nummer
krijgt waarde 5, en de code keert terug bij de boolean voorwaarde. - Omdat
nummer
gelijk aan 5 is, evalueert de boolean voorwaarde alsFalse
(aangezien 5 niet kleiner dan 5 is). Het blok code wordt overgeslagen, en Python gaat verder met de eerste regel na het blok code. Dat is de laatste regel van het programma. Het woord “Klaar” wordt afgedrukt, en het programma eindigt.
Opgave 7.1.1.2 Even getallen afdrukken
Deze opdracht wordt nog niet automatisch gecontroleerd. Klik hier om je eigen oplossing te vergelijken met een model oplossing.Meer doen in een while
loop
Stel dat je de gebruiker moet vragen om drie getallen, ze moet optellen, en dan het totaal moet laten zien. Zonder while loop zou dat er zo uit zien:
Opgave 7.1.2.1 Som berekenen met een while
loop
Deze opdracht wordt nog niet automatisch gecontroleerd. Klik hier om je eigen oplossing te vergelijken met een model oplossing.
Nog meer doen in een while
loop
Als je de vorige voorbeeld begrijpt, begrijp je waarschijnlijk ook hoe je de gebruiker kunt vragen om vijf getallen, en dan de som van de vijf getallen te berekenen:
Bestudeer bovenstaande code. Er worden twee variabelen gebruikt:
-
totaal
wordt gebruikt om de vijf getallen in op te tellen.totaal
begint op nul, omdat bij de start van het programma nog geen getallen ingegeven zijn, dus het totaal is, als je begint, gelijk aan nul. aantal_getallen
wordt gebruikt om te tellen hoe vaak de loop doorlopen is. Omdat de loop vijf keer uitgevoerd moet worden, startaantal_getallen
op nul en de boolean voorwaarde voor de loop test ofaantal_getallen
kleiner is dan 5. Dusaantal_getallen
moet iedere keer dat de loop doorlopen wordt met 1 verhoogd worden, zodat na vijf keer doorlopen de testFalse
oplevert.
Opgave 7.1.2.2 Gemiddelde berekenen
Deze opdracht wordt nog niet automatisch gecontroleerd. Klik hier om je eigen oplossing te vergelijken met een model oplossing.De while
loop onder controle van de gebruiker
Als je van tevoren niet precies weet hoe vaak je iets wilt herhalen, dan moet je een while
loop gebruiken. Als je wel precies weet hoe vaak je iet wilt herhalen, kun je geen for
loop gebruiken (deze leer je later). Met een while
loop kan je veel meer dan met een for
loop, maar hij is wel iets lastiger.
Stel je wilt een gebruiker een aantal getallen laten invoeren en die getallen optellen. Je wil de gebruiker zoveel getallen laten ingeven als hij wil. Dan weet je niet weet hoe vaak de loop doorlopen moet worden. In plaats daarvan bepaalt de gebruiker hoe vaak de loop doorlopen wordt. Je kan met de gebruiker afspreken dat je steeds getallen blijft vragen totdat hij een -1
invoert.
Het algoritme is dan: zolang de gebruiker geen -1
invoert blijven we het volgende herhalen: vraag een getal en tel deze bij mijn totaal op.
De code hieronder laat zien hoe je een while
loop kunt opzetten die de gebruiker zoveel getallen laat ingeven als gewenst. De gebruiker stopt met het ingeven van getallen door een -1 in te geven. Het totaal wordt afgedrukt wanneer de loop beëindigd is.
Opgave 7.1.3 Bereken som, de gebruiker bepaalt hoeveel getallen
Deze opdracht wordt nog niet automatisch gecontroleerd. Klik hier om je eigen oplossing te vergelijken met een model oplossing.Eindeloze loops
De code hieronder drukt alle getallen van 0 tot 5 (tot en met 4) af. De loop bevat een fout. Kijk of je de fout weet te vinden (zonder de code uit te voeren!).
De titel boven deze paragraaf gaf het antwoord natuurlijk al weg: deze code bevat een loop die nooit eindigt. Als je hem uitvoert, lijkt het alsof het programma “hangt,” dus wel draait maar niks doet. Maar het doet niet niks, het is juist erg druk bezig met een nooit-eindigende aantal keer print uit te voeren. teller
begint bij 0, maar wordt in de loop niet gewijzigd. Daarom wordt de boolean voorwaarde nooit False
. Dit is een “eindeloze loop.” Dit is een veelgemaakte fout bij het maken van een while
loop.
Opgave 7.1.4 Fout herstellen in de loop
Deze opdracht wordt nog niet automatisch gecontroleerd. Klik hier om je eigen oplossing te vergelijken met een model oplossing.Loop controle met een logische vlag
Soms wil je dat het aantal keren dat iets herhaald wordt afhankelijk is van wat er tijdens de uitvoer gebeurt. Bijvoorbeeld, iemand moet steeds een getal raden totdat het goed geraden is. Raad de gebruiker het getal goed, dan spring je uit de lus.
Dit kun je voor elkaar krijgen door een logische vlag (in het Engels: Boolean Flag) te gebruiken. Als de lus niet meer herhaalt moet worden, krijgt deze een nieuwe waarde.
Bekijk het voorbeeld hieronder. In het voorbeeld heet de vlag 'goed_geraden'. Deze begint op 'False' (niet waar). In de conditie van de herhaling wordt gekeken of deze nog op 'False' staat, in dat geval wordt de herhaling uitgevoerd. Zodra er goed geraden is wordt de vlag 'goed_geraden' op 'True' gezet. Hierdoor zal de herhaling niet meer uitgevoerd worden.
Trouwens: in sommige online cursussen lees je misschien iets over een 'break' om uit een lus uit te springen. Dit is een zeer slechte gewoonte! Het maakt het namelijk moeilijker om goed over je code te kunnen redeneren, en wordt doorom in onze cursus als fout berekent.
Opgave 7.1.5.1a Gok het getal
Deze opdracht wordt nog niet automatisch gecontroleerd. Klik hier om je eigen oplossing te vergelijken met een model oplossing.Opgave 7.1.5.1 Wachtwoord controle
Deze opdracht wordt nog niet automatisch gecontroleerd. Klik hier om je eigen oplossing te vergelijken met een model oplossing.Uitgebreide conditie met logische vlag
Soms heb je een uitgebreidere conditie nodig. Bijvoorbeeld, dat de gebruiker hooguit drie pogingen krijgt voor het invoeren van een pincode. Je hebt dan een teller nodig om bij te houden hoe vaak er al (fout) geraden is. Je moet in de conditie van de herhaling controleren op:
de waarde van de logische vlag, en
de waarde van de teller.
Opgave 7.1.5.2 Hooguit 3 pogingen voor een pincode
Deze opdracht wordt nog niet automatisch gecontroleerd. Klik hier om je eigen oplossing te vergelijken met een model oplossing.Wat je geleerd hebt over Iteraties met een while-loop
In dit hoofdstuk is het volgende besproken:
- Wat loops zijn
while
loops en waarvoor je deze kan gebruiken- Het gevaar van eindeloze loops
- het gebruiken van een conditie met een logische vlag
Verder naar de Afsluitende Opgaven over While loops
Terug naar de cursus pagina