Skip to main content

While-loop

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 < 3 verandert in teller <= 3?
  • Wat gebeurt er als je teller += 1 weghaalt?
Bekijk het antwoord
  • Met teller <= 3 wordt ook 3 geprint. De output wordt: 0 1 2 3.
  • Zonder teller += 1 verandert teller nooit, dus de loop stopt nooit. Je krijgt eindeloos 0 0 0 0.... Dit is de meest voorkomende fout bij een while-loop! Druk op Ctrl + C om te stoppen.
warning

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:

  1. Python checkt de voorwaarde (bijv. teller < 3)
  2. Als de voorwaarde True is, wordt de ingesprongen code uitgevoerd
  3. Daarna gaat Python terug naar stap 1
  4. Als de voorwaarde False is, 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 herhalen
  • while-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 += 1
Tip

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 * 2
Tip

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