Direct naar de hoofdinhoud
Module 2 · Les 1 van 45/36 in de cursus~10 min
Modulelessen (1/4)

voor loops en bereik

De for lus in Python wordt gebruikt om een reeks items te doorlopen: een lijst, een string, een bereik, een dictaat... alles wat "itereerbaar" is.

Python
parole = ["ciao", "mondo", "!"]
for p in parole:
    print(p)
# ciao
# mondo
# !

Het patroon is altijd hetzelfde: for <variable> in <iterable>: gevolgd door het ingesprongen blok dat voor elk item één keer wordt uitgevoerd.

range(...): genereren van gehele intervallen

range produceert een luie reeks gehele getallen. Drie vormen:

Python
range(5)         # 0, 1, 2, 3, 4
range(2, 6)      # 2, 3, 4, 5
range(0, 10, 2)  # 0, 2, 4, 6, 8     (step)
range(5, 0, -1)  # 5, 4, 3, 2, 1     (negative step)

range is exclusief aan de rechterkant, zoals slice. Het is een lui object: het wijst geen geheugen toe voor alle getallen, het produceert ze één voor één.

Python
totale = 0
for i in range(1, 11):
    totale = totale + i
totale  # 55  (1+2+...+10)

Itereren met een index: enumerate

Als je het item en de index ervan samen nodig hebt, gebruik dan enumerate:

Python
parole = ["ciao", "mondo", "!"]
for i, p in enumerate(parole):
    print(i, p)
# 0 ciao
# 1 mondo
# 2 !

enumerate produceert (index, value) paren die we rechtstreeks aan twee toewijzen variabelen via tuple unpacking (we zullen het zien in de module gewijd aan datastructuren).

Twee reeksen parallel herhalen: zip

Python
nomi = ["Ada", "Linus", "Grace"]
anni = [36, 54, 79]
for n, a in zip(nomi, anni):
    print(f"{n} ha {a} anni")

zip stopt bij de kortste reeks.

range() en de luiheid van Python

In Python wijst de functie range() geen daadwerkelijke lijst in het geheugen toe: het retourneert een luie generator die de getallen één voor één oplevert, zoals gevraagd (bijvoorbeeld in een lus for). Dit maakt iteratie over miljoenen gehele getallen mogelijk zonder het RAM-geheugen op te blazen. Als u bereikwaarden als lijst wilt inspecteren, kunt u deze expliciet casten met list(range(5)).

Probeer het zelf

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

Bereken de som van de getallen van 1 tot en met 100 met behulp van een for-lus over range(...), wijs deze toe aan `total` en evalueer deze.

Editor laden…
Toon hint

range(1, 101) genereert 1, 2, ..., 100 (exclusief aan de rechterkant).

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

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

Gegeven de lijst `words = ['uno', 'due', 'tre']`, bouwt u een lijst `paren` van strings zoals '0:uno', '1:due', '2:tre' met behulp van enumerate. Evalueer 'paren'.

Editor laden…
Toon hint

enumerate(woorden) retourneert (index, waarde) bij elke iteratie.

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

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

Calculate the sum of all even numbers from 2 to 20 inclusive using a `for` loop over a `range`. Store the final sum in `even_sum` and evaluate it.

Editor laden…
Toon hint

Gebruik range(2, 21, 2) om alleen over even gehele getallen van 2 tot en met 20 te itereren.

Oplossing beschikbaar na 3 pogingen