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.
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:
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.
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:
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
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
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.
Toon hint
range(1, 101) genereert 1, 2, ..., 100 (exclusief aan de rechterkant).
Oplossing beschikbaar na 3 pogingen
Oefening beoordelen
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'.
Toon hint
enumerate(woorden) retourneert (index, waarde) bij elke iteratie.
Oplossing beschikbaar na 3 pogingen
Extra uitdaging
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.
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