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?

  1. Voor de while-lus vraag je invoer aan de gebruiker.
  2. Na het sleutelwoord while test je de invoer in een booleaanse expressie. De geteste variabele(n) noemt men soms ook de lus-controle variabele(n).
  3. Indien de booleaanse expressie naar True evalueert, worden de statements in de lus uitgevoerd.
  4. Op het einde van de lus vraag je opnieuw invoer zodat de booleaanse expressie opnieuw geëvalueerd kan worden. Je keert nu terug naar stap (2).
  5. Als de booleaanse expressie naar 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.

Waterverzachter

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.

Veel voorkomende fout

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.