0%

Hoofdstuk 7

Werk herhalen met lussen

Herhaal zonder te kopiëren

Aan het einde van het vorige hoofdstuk drukte je de organizer af met vier bijna gelijke regels:

print(f"1. {items[0]}")
print(f"2. {items[1]}")
print(f"3. {items[2]}")
print(f"4. {items[3]}")

Dat werkte en het uitschrijven was bewust. Maar je ziet ook al een probleem. Het programma kan maar vier items afdrukken. Voeg een vijfde toe en dat blijft onzichtbaar totdat je nog een print-regel schrijft. Verwijder een item en het programma stopt met een IndexError.

Het aantal items hoort bij de gegevens. Nu staat dat aantal vast in de code.

Hoe herhalend werk eruitziet

Bekijk de vier regels opnieuw en let op wat er werkelijk verandert. Het woord print blijft hetzelfde. De f-string blijft hetzelfde. Alleen het nummer en de index tussen de haken veranderen.

Als je bijna dezelfde regel meerdere keren schrijft, heeft Python een beter hulpmiddel. Dat heet een lus en daarmee schrijf je het herhaalde werk maar één keer.

Een eerste for-lus

Hier is hetzelfde idee als lus:

Try it

Vier uitvoerregels uit twee regels code.

Lees de eerste regel als de Engelse zin ‘for each item in items’: voor elk item in items. Dat komt dicht bij wat Python doet. Het neemt de lijst, geeft je de eerste waarde, voert het ingesprongen blok uit, geeft je de volgende waarde en gaat door totdat de lijst klaar is.

De onderdelen van de regel

for item in items:
OnderdeelBetekenis
forHet sleutelwoord waarmee de lus begint
itemDe lusvariabele, een naam die je zelf kiest
inHet sleutelwoord dat de naam van de verzameling scheidt
itemsDe lijst die Python doorloopt
:De dubbele punt aan het einde, net als bij een if-instructie

Alles wat onder die regel inspringt, is het lusblok. Python voert dat hele blok één keer per waarde uit.

De inspringregel ken je al van if. Ingesprongen regels horen bij de lus. Regels terug aan de linkerkant worden uitgevoerd nadat de lus klaar is:

Try it

Done verschijnt één keer, aan het einde. Die regel springt niet in en hoort dus niet bij het herhaalde werk.

Je kiest zelf de naam van de lusvariabele

item en color zijn geen speciale woorden. Het zijn gewone variabelenamen waaraan Python de waarden één voor één toewijst. Kies een naam die één onderdeel van de verzameling beschrijft:

Try it

Een meervoud voor de lijstnaam en een enkelvoud voor de lusvariabele lezen prettig en helpen om beide uit elkaar te houden.

Het aantal maakt voor de lus niet uit

Dit lost het probleem van de organizer op. Dezelfde twee regels werken voor drie waarden of dertig:

Try it

Nergens in de lus staat een aantal. Voeg items toe aan de lijst of verwijder ze en de lus volgt vanzelf.

Als de lijst leeg is, zijn er geen waarden om langs te gaan en wordt het blok nul keer uitgevoerd. Regels na de lus worden nog wel uitgevoerd. Probeer tasks in het voorbeeld hierboven te vervangen door [].

Hoe vaak wordt de ingesprongen regel uitgevoerd?

sizes = [8, 12, 16, 20]
for size in sizes:
    print(size)

Welke regel of regels horen bij het lusblok?

animals = ["otter", "heron"]
for animal in animals:
    print(animal)
    print("Seen")
print("Walk finished")

Wat je erbij hebt geleerd

De lus is kort, maar geeft je programma’s veel nieuwe mogelijkheden. Tot nu toe deed een programma een vaste hoeveelheid werk die je met de hand uitschreef. Vanaf nu kan één klein codeblok een verzameling van elke grootte verwerken.

In de volgende les schrijf je zelf lussen en bekijk je hoe de lusvariabele bij elke ronde een andere waarde krijgt.

Opdracht

Voer elk voorbeeld uit en probeer een lijst te veranderen voordat je verdergaat. Zorg dat je kunt uitleggen:

  • welke onderdelen van de vier printregels van de organizer werkelijk werden herhaald;

  • wat de lusvariabele bevat tijdens elke ronde door het blok;

  • hoe Python bepaalt welke regels in de lus staan en welke erna komen;

  • waarom een item toevoegen aan de lijst geen wijziging van de lus vereist.