While-loop

Met een while-loop herhaal je code zolang een voorwaarde waar is.
While True
De simpelste while-loop is eentje die altijd doorloopt:
while True:
print("Dit stopt nooit!")
True is altijd waar, dus deze loop herhaalt zich eindeloos. Dit heet een oneindige loop.
Voer de code hierboven uit en druk op Ctrl + C om het programma te stoppen.
Een voorwaarde gebruiken
In plaats van True kun je een voorwaarde gebruiken. Dan stopt de loop vanzelf:
Predict
Bekijk de volgende code. Wat denk je dat er geprint wordt?
teller = 0
while teller < 3:
print(teller)
teller += 1
Bekijk het antwoord
0
1
2
De loop herhaalt zolang teller < 3 waar is. Bij elke herhaling wordt teller met 1 verhoogd. Zodra teller gelijk is aan 3, stopt de loop.
Investigate
Probeer de volgende aanpassingen en kijk wat er verandert:
- Wat gebeurt er als je
teller < 3verandert inteller <= 3? - Wat gebeurt er als je
teller += 1weghaalt?
Bekijk het antwoord
- Met
teller <= 3wordt ook3geprint. De output wordt:0 1 2 3. - Zonder
teller += 1veranderttellernooit, dus de loop stopt nooit. Je krijgt eindeloos0 0 0 0.... Dit is de meest voorkomende fout bij eenwhile-loop! Druk opCtrl + Com te stoppen.
Zorg er altijd voor dat de variabele in de voorwaarde verandert binnen de loop. Anders krijg je een oneindige loop.
Hoe werkt het?
Een while-loop werkt als volgt:
- Python checkt de voorwaarde (bijv.
teller < 3) - Als de voorwaarde
Trueis, wordt de ingesprongen code uitgevoerd - Daarna gaat Python terug naar stap 1
- Als de voorwaarde
Falseis, stopt de loop
teller = 0 # Startwaarde
while teller < 3: # Voorwaarde
print(teller) # Code die herhaald wordt
teller += 1 # Variabele aanpassen!
Wanneer while, wanneer for?
for-loop: als je van tevoren weet hoe vaak je wilt herhalenwhile-loop: als je wilt herhalen totdat iets verandert
Dezelfde taak kan op beide manieren. Print de getallen 1 tot en met 5:
# Met een for-loop:
for i in range(1, 6):
print(i)
# Met een while-loop:
getal = 1
while getal <= 5:
print(getal)
getal += 1
De for-loop is korter als je het aantal herhalingen weet. De while-loop is flexibeler als je dat niet weet.
Oefening 1
Print de even getallen van 2 tot en met 20 met een while-loop (stappen van 2).
2
4
6
...
20
getal = 2 while ...: print(getal) ...
Tip
De voorwaarde is getal <= 20. Gebruik getal += 2 om steeds 2 op te tellen.
Oplossing
getal = 2
while getal <= 20:
print(getal)
getal += 2
Oefening 2
Tel af van 10 naar 1 en print daarna "Go!".
10
9
8
...
1
Go!
getal = 10
while ...:
print(getal)
...
print("Go!")Tip
Begin bij 10 en gebruik getal -= 1 om af te tellen. De voorwaarde is getal >= 1.
Oplossing
getal = 10
while getal >= 1:
print(getal)
getal -= 1
print("Go!")
If in een while-loop
Je kunt een if-statement in een while-loop plaatsen. Zo kun je bij elke herhaling een keuze maken.
Predict
Wat print de volgende code?
getal = 1
while getal <= 6:
if getal % 2 == 0:
print(f"{getal} is even")
else:
print(f"{getal} is oneven")
getal += 1
Bekijk het antwoord
1 is oneven
2 is even
3 is oneven
4 is even
5 is oneven
6 is even
Bij elke herhaling checkt de if of het getal even of oneven is. Let op de inspringen: de if en else staan ingesprongen binnen de while, en de print staat nog een keer ingesprongen binnen de if/else.
Investigate
Bekijk deze foutieve versie. Wat gaat er mis?
getal = 1
while getal <= 6:
if getal % 2 == 0:
print(f"{getal} is even")
getal += 1
else:
print(f"{getal} is oneven")
getal += 1
Bekijk het antwoord
Dit werkt toevallig nog wel, maar het is slechte code: getal += 1 staat nu twee keer (in de if én de else). Als je per ongeluk één van de twee vergeet, krijg je een oneindige loop.
Zet getal += 1 daarom altijd buiten de if/else, maar nog binnen de while:
while getal <= 6:
if getal % 2 == 0:
print(f"{getal} is even")
else:
print(f"{getal} is oneven")
getal += 1 # ← buiten de if, binnen de while
Hoe ziet dat eruit?
De structuur is:
while voorwaarde:
# code in de loop
if andere_voorwaarde:
# dit gebeurt alleen als de if-voorwaarde True is
else:
# dit gebeurt als de if-voorwaarde False is
# code na de if (nog steeds in de loop)
Let goed op de dubbele inspringing: de code binnen de if is twee keer ingesprongen (eenmaal voor de while, eenmaal voor de if).
Oefening 3
Print de getallen 1 tot en met 10. Als een getal deelbaar is door 3, print dan "Fizz" in plaats van het getal.
1
2
Fizz
4
5
Fizz
7
8
Fizz
10
getal = 1
while getal <= 10:
if ...:
print("Fizz")
else:
print(getal)
getal += 1Tip
Een getal is deelbaar door 3 als getal % 3 == 0. Zet de if binnen de while-loop.
Oplossing
getal = 1
while getal <= 10:
if getal % 3 == 0:
print("Fizz")
else:
print(getal)
getal += 1
Oefening 4
Tel hoeveel even getallen er zijn van 1 tot en met 20. Print aan het einde het aantal.
getal = 1
teller = 0
while getal <= 20:
if ...:
teller += 1
getal += 1
print(f"Aantal even getallen: {teller}")Tip
Gebruik getal % 2 == 0 om te checken of een getal even is. Verhoog teller alleen als het getal even is.
Oplossing
getal = 1
teller = 0
while getal <= 20:
if getal % 2 == 0:
teller += 1
getal += 1
print(f"Aantal even getallen: {teller}")
Oefening 5
Verdubbel een getal steeds totdat het groter is dan 1000. Print elke stap. Als het getal groter is dan 100, print er "groot!" achter.
Bijvoorbeeld met startgetal 1:
1
2
4
8
16
32
64
128 groot!
256 groot!
512 groot!
getal = 1
while getal <= 1000:
if ...:
print(f"{getal} groot!")
else:
print(getal)
getal = getal * 2Tip
Gebruik getal > 100 om te checken of het getal groot genoeg is. Verdubbel met getal = getal * 2.
Oplossing
getal = 1
while getal <= 1000:
if getal > 100:
print(f"{getal} groot!")
else:
print(getal)
getal = getal * 2
Oefening 6
Bereken de som van alle getallen van 1 tot en met 50, maar sla de getallen die deelbaar zijn door 7 over (tel ze niet mee). Print aan het einde de som.
som = 0
getal = 1
while getal <= 50:
if ...:
som += getal
getal += 1
print(f"De som is: {som}")Tip
Je wilt alleen optellen als het getal niet deelbaar is door 7. Gebruik getal % 7 != 0.
Oplossing
som = 0
getal = 1
while getal <= 50:
if getal % 7 != 0:
som += getal
getal += 1
print(f"De som is: {som}")
Make: Sterrendriehoek
Maak een driehoek van sterretjes met een while-loop. Bij hoogte = 5:
*
**
***
****
*****
Je hebt eerder geleerd dat "*" * 3 het resultaat "***" geeft.
hoogte = 5 rij = 1 while ...: print(...) ...
Tip
Gebruik "*" * rij om het juiste aantal sterretjes te printen. De voorwaarde is rij <= hoogte.
Oplossing
hoogte = 5
rij = 1
while rij <= hoogte:
print("*" * rij)
rij += 1