In de demo heb je voor het eerst een while
-lus geprogrammeerd. Een while
-lus is een voorbeeld van voorwaardelijke
herhaling: je weet op voorhand niet hoeveel keer de lus uitgevoerd wordt.
Hieronder vind je de pseudocode van de while
-lus:
input() # deel 1: invoer opvragen
while booleaanse expressie: # deel 2: invoer testen
python statement # deel 3: lus uitvoeren
python statement
...
input() # deel 4: invoer opvragen
python statement # deel 5: lus is ten einde
python statement
Hoe werkt het?
while
-lus vraag je invoer aan de gebruiker.while
test je de invoer in een booleaanse expressie. De geteste variabele(n) noemt men soms
ook de lus-controle variabele(n).True
evalueert, worden de statements in de lus uitgevoerd.False
evalueert, dan gaat het programma verder onder de while
-lus.In delen 1 en 4 van de while
-lus wordt invoer verwacht van de gebruiker van het programma. Dit hoeft niet
steeds zo te zijn. Delen 1 en 4 kunnen ook een berekening zijn die geëvalueerd moet worden in de booleaanse expressie bij
de while
-lus opdat de code in de lus opnieuw uitgevoerd kan worden.
Pas je deze opbouw van de while
-lus toe op het probleem van de waterverzachter (beschrijving zie onderaan), dan
onderscheid je makkelijk de 5 delen van de while-lus
:
zout = int(input("Gewicht zout in waterverzachter: "))
aantal_zakken = 0
gewicht_zoutzak = int(input("Gewicht zak zout: ")) # deel 1: invoer opvragen
while zout + gewicht_zoutzak <= 100: # deel 2: invoer testen
zout += gewicht_zoutzak # deel 3: lus uitvoeren
aantal_zakken += 1
gewicht_zoutzak = int(input("Gewicht zak zout: ")) # deel 4: invoer opvragen
print(f"{aantal_zakken=} {zout=}") # deel 5: lus is ten einde
Wanneer meerdere zoutzakken toegevoegd worden, krijgt je het volgende schema:
1 → 2 → (3 → 4) → 2 → (3 → 4) … → 2 → (3 → 4) → 2 → 5
Indien de booleaanse expressie onmiddellijk naar False
evalueert, krijg je het volgende schema:
1 → 2 → 5.
Een veel voorkomende fout is het gebruiken van de selectie in de while
-lus om de lus-controle variabele een
waarheidswaarde (True
of False
) te geven.
Een voorbeeld:
status = True
while status:
if zout + gewicht_zoutzak > 100:
status = false
...
Het werk die eigenlijk door de while
-lus gedaan wordt, verplaats je naar een if
-statement. Bovenstaande code kan
je als volgt herschrijven:
while zout + gewicht_zoutzak <= 100:
...
Waterverzachter
Iemand schrijft een programma die aan de gebruiker vraagt hoeveel kilogram zout er nog in de waterverzachter zit. Vervolgens kan je het zout aanvullen met zakken van een willekeurig aantal kilogram. De waterverzachter kan maximaal 100 kg zout bevatten. Indien je zoutzak wil toevoegen die het toegelaten gewicht zout overschrijdt, dan stopt het programma. Het programma schrijft uit hoeveel zoutzakken er gebruikt werden en hoeveel kilogram zout er nu in de waterverzachter zit.