Ga naar hoofdinhoud

6a For-loop

Wil je tien keer hetzelfde doen, bijvoorbeeld de getallen 0 tot en met 9 printen, dan hoef je geen tien regels te typen. Met een for-loop herhaalt Python het werk voor je.

Opwarmen
  • Op lightbot.lu programmeer je een robotje met blokjes in plaats van tekst. Je merkt al snel dat je dezelfde stappen steeds opnieuw neerlegt, en dat is precies wat een for-loop je bespaart.
  • Op pydle.net staat elke dag een nieuwe puzzel: een raster van gekleurde vakjes dat je namaakt met code. De dubbele for-loop staat er al klaar; jij schrijft de if-statements die bepalen welk vakje welke kleur krijgt, en die ken je al. Kijk eens hoe de loops het hele raster aflopen. De site is Engelstalig en sommige dagen zijn pittig; een puzzel overslaan is prima.

Een simpele for-loop​

for i in range(5):
print(i)
Voorspel
Welke getallen zet dit programma op het scherm?
Kies wat jij denkt. Bij het goede antwoord zie je de uitleg.
  • range(5) betekent: "geef vijf getallen, beginnend bij 0" — dus 0, 1, 2, 3, 4.
  • i is de loop-variabele. Python vult hem elke ronde met het volgende getal.
  • De code binnen de loop springt 4 spaties in, net als bij if.

Let op: range(5) stopt bij 4, niet bij 5. De stop-waarde is exclusief. Wil je tot en met 5 tellen? Gebruik range(6).

De naam i is geen wet: je mag de variabele ook teller of getal noemen. i is traditie (van index).

Er gaat iets mis​

De dubbele punt vergeten

for i in range(5)
print(i)

Uitvoer:

SyntaxError: expected ':'

Net als bij if staat achter de for-regel een dubbele punt.

range vergeten

for i in 5:
print(i)

Uitvoer:

TypeError: 'int' object is not iterable

Een for-loop loopt iets af, en een los getal valt niet af te lopen. Met range(5) maak je er vijf getallen van.

Een regel te veel ingesprongen

for i in range(3):
print(i)
print("Klaar")

Uitvoer:

0
Klaar
1
Klaar
2
Klaar

Geen foutmelding, maar Klaar staat drie keer op het scherm. Alles wat inspringt hoort bij de loop. Moet een regel één keer na de loop, laat hem dan niet inspringen.

Eerst op papier

Speel dit eerst na zonder computer, met losgeknipte regels code: Codestroken leggen. Je docent kan de hand-out printen.


Opdracht 6a.1: Vijf keer hoera​

Schrijf een for-loop die 5 keer "Hoera!" print.

# Schrijf hier je code
Klik hier voor een tip.

De loop-variabele heb je niet nodig in de print: zet print("Hoera!") in de loop.

Klik hier voor de oplossing.
for i in range(5):
print("Hoera!")
for i in range(5):
    print("Hoera!")

Opdracht 6a.2: Tellen tot klaar​

Print de getallen 0 t/m 4 met een for-loop, en print daarna "Klaar!".

Verwachte uitvoer:

0
1
2
3
4
Klaar!
# Schrijf hier je code
Klik hier voor een tip.

range(5) geeft 0, 1, 2, 3, 4. Print i in de loop. De regel print("Klaar!") staat buiten de loop (niet ingesprongen).

Klik hier voor de oplossing.
for i in range(5):
print(i)

print("Klaar!")
for i in range(5):
    print(i)

print("Klaar!")

Opdracht 6a.3: Tafel van 2​

Print de eerste tien resultaten van de tafel van 2, met een f-string.

Verwachte uitvoer:

2 x 0 = 0
2 x 1 = 2
2 x 2 = 4
...
2 x 9 = 18
# Schrijf hier je code
Klik hier voor een tip.

range(10) loopt van 0 t/m 9. Gebruik een f-string: f"2 x {i} = {2 * i}".

Klik hier voor de oplossing.
for i in range(10):
print(f"2 x {i} = {2 * i}")

In de volgende les leer je hoe je range met een begin-getal en een stapgrootte gebruikt, zodat je niet altijd bij 0 hoeft te beginnen.

for i in range(10):
    print(f"2 x {i} = {2 * i}")
Waar kom je dit later weer tegen?

Lineair zoeken, het eerste algoritme van de algoritmes-cursus, is een for-loop met een if erin. Bijna elk algoritme daar begint met dezelfde regel: for waarde in lijst: — de conceptenkaart laat zien welke.