Les 5 · Module 1 · Fundament (alleen Python)
Herhalen met lussen
Werk herhalen met while en for, en range() gebruiken.
🎯 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:
- Begin:
teller = 1 - Voorwaarde:
teller <= 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
- Maak
sparen.py. - Vraag het spaardoel, het startbedrag en het bedrag dat je per week inlegt.
- Gebruik een
while-lus om te berekenen na hoeveel weken het doel bereikt is. - Print elke week een regel:
Week 1: € 35.00. - Print aan het eind:
Doel bereikt na 7 weken. - Wat gebeurt er als het startbedrag al boven het doel ligt? Zorg dat je programma dan
Doel bereikt na 0 weken.print. - 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 metrange()loopt een vast aantal keer; de stopwaarde doet niet mee. +=is een korte schrijfwijze voorx = 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.
Klaar? Controleer je werk met:
$ beetje check concepten-les5