Beetje Coderen

Les 5 · Module 1 · Fundament (alleen Python)

Herhalen met lussen

Werk herhalen met while en for, en range() gebruiken.

⏱ 45–60 minuten leestijd + oefenen

🎯 Na deze les kun je

  • een while-lus met stopvoorwaarde schrijven
  • een for-lus met range() gebruiken
  • een oneindige lus herkennen en stoppen

Computers zijn goed in één ding waar mensen slecht in zijn: precies hetzelfde duizend keer doen zonder fouten. Daarvoor heb je een lus (loop). In deze les leer je twee soorten: de while-lus, die doorgaat zolang een voorwaarde waar is, en de for-lus, die een vast aantal keer loopt.

while: zolang het waar is

teller = 1
while teller <= 3:
    print(f"Ronde {teller}")
    teller = teller + 1
print("Klaar")
Ronde 1
Ronde 2
Ronde 3
Klaar

Een while werkt als een if die zichzelf herhaalt. Python controleert de voorwaarde, voert het ingesprongen blok uit, en gaat dan terug naar boven om opnieuw te controleren. Is de voorwaarde onwaar, dan gaat het programma verder na de lus.

Het patroon heeft altijd drie onderdelen:

  1. Begin: teller = 1
  2. Voorwaarde: teller <= 3
  3. Stap die de voorwaarde ooit onwaar maakt: teller = teller + 1

teller = teller + 1 komt zo vaak voor dat er een kortere schrijfwijze is: teller += 1. Ook -=, *= en /= bestaan.

Lopende totalen

Bij een lus hoort vaak een variabele die bij elke ronde groeit: een lopend totaal (running total).

saldo = 100.0
week = 0
while saldo < 150:
    saldo += 15
    week += 1
print(f"Na {week} weken heb je € {saldo:.2f}")

Voorspel eerst. Daarna:

Na 4 weken heb je € 160.00

Na 3 weken is het saldo 145, nog onder de 150, dus er volgt nog een ronde.

for met range()

Weet je vooraf hoe vaak je wilt herhalen, dan is for korter en veiliger:

for i in range(3):
    print(f"Ronde {i}")
Ronde 0
Ronde 1
Ronde 2

range(3) levert de getallen 0, 1 en 2. De variabele i krijgt elke ronde het volgende getal. Je hoeft zelf niets op te hogen.

range() kent drie vormen:

Aanroep Getallen Let op
range(5) 0, 1, 2, 3, 4 begint bij 0
range(1, 6) 1, 2, 3, 4, 5 de stop (6) doet niet mee
range(0, 20, 5) 0, 5, 10, 15 stap van 5
range(5, 0, -1) 5, 4, 3, 2, 1 aftellen

Uitgewerkt voorbeeld: tafel van 7

for i in range(1, 11):
    print(f"{i} x 7 = {i * 7}")
1 x 7 = 7
2 x 7 = 14
3 x 7 = 21
4 x 7 = 28
5 x 7 = 35
6 x 7 = 42
7 x 7 = 49
8 x 7 = 56
9 x 7 = 63
10 x 7 = 70

En een som: alle getallen van 1 tot en met 100 optellen.

totaal = 0
for getal in range(1, 101):
    totaal += getal
print(totaal)
5050

while of for?

Situatie Kies
Je weet hoe vaak (10 keer, voor elk getal van 1 tot 100) for
Je herhaalt tot er iets gebeurt (doel bereikt, juiste invoer) while

Typische fouten

Oneindige lus. Vergeet je de stap, dan blijft de voorwaarde altijd waar:

teller = 1
while teller <= 3:
    print(teller)

Dit print eindeloos 1. Stop het programma met Ctrl+C; je ziet dan KeyboardInterrupt. Controleer bij elke while: wat in het blok zorgt ervoor dat de voorwaarde ooit onwaar wordt?

Off-by-one. Eén ronde te veel of te weinig is de meest gemaakte lusfout. range(1, 10) stopt bij 9, niet bij 10. En while teller < 3 loopt één keer minder dan while teller <= 3. Test daarom altijd de randen: klopt de eerste ronde, en klopt de laatste?

for i in range(1, 10):
    pass
print(i)
9

pass betekent "doe niets". Je gebruikt het als Python een blok verwacht maar je (nog) niets te doen hebt.

Oefenen

Oefening 1. Voorspel de uitvoer:

for i in range(10, 0, -3):
    print(i)
Modelantwoord oefening 1
10
7
4
1

De volgende stap zou -2 zijn, en dat valt buiten het bereik (stop is 0).

Oefening 2. Print alle even getallen van 2 tot en met 20 met één for-lus.

Modelantwoord oefening 2
for getal in range(2, 21, 2):
    print(getal)

De stop is 21, niet 20, anders doet 20 niet mee.

Oefening 3. Een bacteriekolonie verdubbelt elk uur, beginnend bij 1 bacterie. Hoeveel uur duurt het tot er meer dan een miljoen zijn? Schrijf een while-lus.

Modelantwoord oefening 3
aantal = 1
uren = 0
while aantal <= 1_000_000:
    aantal *= 2
    uren += 1
print(f"Na {uren} uur: {aantal} bacteriën")
Na 20 uur: 1048576 bacteriën

Het liggende streepje in 1_000_000 is alleen voor de leesbaarheid; Python negeert het.

Lab: spaardoel-simulator

  1. Maak sparen.py.
  2. Vraag het spaardoel, het startbedrag en het bedrag dat je per week inlegt.
  3. Gebruik een while-lus om te berekenen na hoeveel weken het doel bereikt is.
  4. Print elke week een regel: Week 1: € 35.00.
  5. Print aan het eind: Doel bereikt na 7 weken.
  6. Wat gebeurt er als het startbedrag al boven het doel ligt? Zorg dat je programma dan Doel bereikt na 0 weken. print.
  7. Controleer met beetje check concepten-les5.

Samenvatting

  • Een while-lus herhaalt zolang de voorwaarde waar is. Zorg altijd voor een stap die de lus laat eindigen.
  • Een for-lus met range() loopt een vast aantal keer; de stopwaarde doet niet mee.
  • += is een korte schrijfwijze voor x = x + ....
  • Met een lopend totaal tel je bij elke ronde iets op.
  • Ctrl+C stopt een oneindige lus. Test de randen om off-by-one-fouten te vinden.

In les 6 leer je lussen sturen met break en continue, en zet je een lus in een lus.

Lab

Spaardoel-simulator: hoeveel weken sparen tot je doel?

🔒 Het live lab hoort bij de volledige cursus. Met één aankoop (€ 29,00, eenmalig) krijg je alle lessen, de live labs en het certificaat. Geen abonnement. Je kunt dit lab altijd gratis lokaal met Docker doen.

Cursus kopen en verdergaan

Klaar? Controleer je werk met:

$ beetje check concepten-les5

📝 Quiz: herhalen met lussen

6 vragen · 70% nodig om te slagen

1. Welke getallen levert `range(2, 6)`?
2. Waarom stopt deze lus nooit: `t = 0` / `while t < 5:` / `print(t)`?
3. Hoe vaak wordt het blok uitgevoerd bij `for i in range(10):`?
4. Je wilt blijven vragen tot de gebruiker 'stop' typt. Welke lus past het best?
5. Wat is de waarde van totaal na: `totaal = 0`, `for x in range(1, 4): totaal += x`?
6. Hoe stop je een programma dat in een oneindige lus zit?