Modulelessen (2/4)
terwijl lussen
De lus while herhaalt een blok zolang een voorwaarde waar blijft. Gebruik
while als je van tevoren niet weet hoeveel iteraties je nodig hebt: de
Het aantal rondes hangt af van iets dat binnen de lus verandert.
Syntaxis
n = 1
while n < 1000:
n = n * 2
n # 1024Het ingesprongen blok wordt herhaaldelijk uitgevoerd. Vóór elke iteratie Python evalueert de voorwaarde: zodra deze onwaar wordt, wordt de lus beëindigd en de uitvoering gaat door na het blok.
Algemene patronen
Handmatige teller — equivalent aan een klassieke for in andere talen:
i = 0
while i < 5:
print(i)
i = i + 1Oneindige lus + interne uitgangsvoorwaarde — handig als de voorwaarde aanwezig is geëvalueerd nadat je iets hebt gedaan:
acc = 0
while True:
acc = acc + 1
if acc * acc > 100:
break
acc # 11 (11*11 = 121 is the first square > 100)break verlaat onmiddellijk de binnenste lus (we zullen het in de volgende
les).
De klassieke fout: de oneindige lus
Als de variabele in de voorwaarde niet verandert binnen de lus, wordt de
programma eindigt nooit. Het is de grootste bug met while:
n = 0
while n < 10:
print(n) # n is never modified → infinite loop!In onze oefeningen is er een uitvoeringstime-out, dus een oneindige lus zal mislukken met een duidelijke boodschap in plaats van dat de browser vastloopt. Maar in productie an oneindige lus is een ernstige bug.
Risico van oneindige lussen en beëindigingsvoorwaarden
Een while-lus wordt uitgevoerd zolang de voorwaarde de waarde True oplevert. Als u vergeet de variabelen bij te werken die van invloed zijn op de voorwaarde, loopt uw lus oneindig door, waardoor de runtime wordt bevroren. Zorg er altijd voor dat het luslichaam vooruitgang boekt in de richting van de uitgangstoestand.
Probeer het zelf
Zoek het kleinste gehele getal `n >= 1` zodat 2**n groter is dan één miljoen. Wijs het toe aan 'resultaat' en evalueer het (het zou 20 moeten zijn).
Toon hint
2**20 = 1.048.576 is de eerste die de 1.000.000 overschrijdt.
Oplossing beschikbaar na 3 pogingen
Oefening beoordelen
Beginnend met `n = 1000`, halveer n met deling van gehele getallen (n // 2) totdat het 0 wordt. Tel hoeveel iteraties er nodig zijn in `stappen`. Evalueer ‘stappen’.
Toon hint
1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0: tien stappen.
Oplossing beschikbaar na 3 pogingen
Extra uitdaging
Given the variable `n = 32`, write a `while` loop to count how many times you can divide `n` by 2 (using floor division `//`) before `n` becomes less than or equal to 1. Store the count in `divisions` and evaluate it.
Toon hint
The while condition is n > 1. Inside the loop, divide n by 2 and increment divisions by 1.
Oplossing beschikbaar na 3 pogingen