Direct naar de hoofdinhoud
Module 2 · Les 2 van 46/36 in de cursus~8 min
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

Python
n = 1
while n < 1000:
    n = n * 2
n  # 1024

Het 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:

Python
i = 0
while i < 5:
    print(i)
    i = i + 1

Oneindige lus + interne uitgangsvoorwaarde — handig als de voorwaarde aanwezig is geëvalueerd nadat je iets hebt gedaan:

Python
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:

Python
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

Oefening#python.m2.l2.e1
Pogingen: 0Laden…

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).

Editor laden…
Toon hint

2**20 = 1.048.576 is de eerste die de 1.000.000 overschrijdt.

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#python.m2.l2.e2
Pogingen: 0Laden…

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’.

Editor laden…
Toon hint

1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0: tien stappen.

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

Oefening#python.m2.l2.e3
Pogingen: 0Laden…

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.

Editor laden…
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