Ga naar hoofdinhoud

6d Stoppen met break

saldo = 0

for week in range(1, 11):
saldo = saldo + 3
print(f"Week {week}: {saldo} euro")
if saldo >= 20:
print("Genoeg gespaard.")
break

De loop staat op tien weken, maar hij haalt er zeven. Zodra saldo de 20 bereikt, stapt break uit de loop en gaat het programma verder onder de loop.

saldo = 0

for week in range(1, 11):
    saldo = saldo + 3
    print(f"Week {week}: {saldo} euro")
    if saldo >= 20:
        print("Genoeg gespaard.")
        break

Wat break precies stopt​

for getal in range(1, 6):
if getal == 3:
break
print(getal)

print("Klaar")
Voorspel
Wat zet dit programma op het scherm?
Kies wat jij denkt. Bij het goede antwoord zie je de uitleg.
for getal in range(1, 6):
    if getal == 3:
        break
    print(getal)

print("Klaar")

break versus continue​

Je kent continue al uit 6c. De twee lijken op elkaar en doen iets heel anders:

continuebreak
Wat stopt erdeze rondede hele loop
Gaat verder bijde volgende rondede eerste regel ná de loop
Rest van de rondeskomt gewoonvervalt

break gebruik je als je iets gevonden hebt of als er een grens bereikt is: doorzoeken heeft dan geen zin meer.

Tip: break werkt ook in een while-loop, en die komt in de volgende les. In het project Raad het getal stopt de speler zo het spel.

Er gaat iets mis​

SyntaxError: 'break' outside loop

Oorzaak: je break staat niet in een loop. Meestal is hij te ver naar links ingesprongen en hoort hij bij de if binnen de loop.

Oplossing: zet break binnen het ingesprongen blok van de for of while.

# FOUT
for getal in range(5):
print(getal)
break

# GOED
for getal in range(5):
print(getal)
break

Opdracht 6d.1: Stop bij de eerste​

Print de getallen 1 tot en met 20, maar stop zodra je een getal tegenkomt dat groter is dan 6.

Verwachte uitvoer:

1
2
3
4
5
6
# Schrijf hier je code
Klik hier voor een tip.

Loop met range(1, 21). Zet de if met break bóven de print, anders wordt de 7 nog geprint voordat je stopt.

Klik hier voor de oplossing.
for getal in range(1, 21):
if getal > 6:
break
print(getal)

De volgorde binnen de loop bepaalt alles: controleren en dan pas printen.

for getal in range(1, 21):
    if getal > 6:
        break
    print(getal)

Opdracht 6d.2: Wachtwoord raden​

Je hebt drie pogingen om het getal 4 te raden. De pogingen staan vast: eerst 2, dan 4, dan 7. Print bij elke poging wat je probeert, en stop met break zodra het klopt. Print daarna Binnen!.

Verwachte uitvoer:

Poging: 2
Poging: 4
Binnen!
# Schrijf hier je code
Klik hier voor een tip.

Lijsten heb je nog niet gehad. Tel daarom met range(1, 4) en bepaal met if/elif welk getal bij die poging hoort.

Klik hier voor de oplossing.
for poging in range(1, 4):
if poging == 1:
getal = 2
elif poging == 2:
getal = 4
else:
getal = 7

print(f"Poging: {getal}")

if getal == 4:
print("Binnen!")
break

De derde poging wordt nooit uitgevoerd: break stopt de loop na de tweede.

for poging in range(1, 4):
    if poging == 1:
        getal = 2
    elif poging == 2:
        getal = 4
    else:
        getal = 7

    print(f"Poging: {getal}")

    if getal == 4:
        print("Binnen!")
        break

Opdracht 6d.3: Break of continue? (uitdaging)​

Print de getallen 1 tot en met 10, maar sla 5 over en stop helemaal bij 8.

Verwachte uitvoer:

1
2
3
4
6
7
# Schrijf hier je code
Klik hier voor een tip.

Je hebt allebei nodig: continue voor de 5, break voor de 8. Let op dat de 8 zelf níét geprint wordt.

Klik hier voor de oplossing.
for getal in range(1, 11):
if getal == 5:
continue
if getal == 8:
break
print(getal)

Bij 5 slaat hij één ronde over en gaat door met 6. Bij 8 stopt de loop, dus 8, 9 en 10 komen er niet.

for getal in range(1, 11):
    if getal == 5:
        continue
    if getal == 8:
        break
    print(getal)
Waar kom je dit later weer tegen?

Binair zoeken springt met break uit de while-lus zodra het doel gevonden is. Bubble sort doet hetzelfde als een hele ronde niets meer wisselt, en Dijkstra zodra er geen onbezochte knoop meer over is.