Modulelessen (3/4)
breken, doorgaan en anders in lussen
Binnen een lus (zowel for als while) kun je de normale stroom wijzigen met
drie constructies:
break— verlaat de lus onmiddellijk.continue— sla de rest van het lichaam over en springt naar de volgende iteratie.else(op de lus) — uitgevoerd wanneer de lus eindigt zonder eenbreak.
break
for n in [3, 7, 11, 4, 9]:
if n % 2 == 0:
primo_pari = n
break
primo_pari # 4break stopt de lus zo snel mogelijk. Alles na break in de
de hoofdtekst van de huidige iteratie wordt NIET uitgevoerd.
continue
risultati = []
for n in range(1, 11):
if n % 2 == 0:
continue # skip evens
risultati.append(n * n)
risultati # [1, 9, 25, 49, 81]Beschouw continue als "ga naar de volgende iteratie". Het wordt gebruikt om items te filteren
zonder nog een inspringingsniveau toe te voegen.
else op de lus (pythonisch idioom)
Een eigenaardigheid van Python: lussen kunnen ook een else hebben, alleen uitgevoerd als de
lus natuurlijk beëindigd (zonder break). Het is perfect voor zoekopdrachten:
target = 7
for n in [2, 4, 6, 8]:
if n == target:
trovato = True
break
else:
trovato = False
trovato # FalseLees het als: "voor elke n in de lijst; als je de tak break neemt, sla deze dan over
de anders; voer anders de else" uit.
Geneste lussen: break verlaat alleen de binnenste
for x in range(3):
for y in range(3):
if x == y == 1:
break
print(x, y)break verlaat alleen de for y, niet de for x. Om beide af te sluiten, moet u a gebruiken
vlag of een functie + return.
De ongebruikelijke lus...anders-constructie
In Python kunnen zowel de for als de while lussen een optionele else clausule bevatten. Het blok else wordt alleen uitgevoerd als de lus normaal wordt voltooid (d.w.z. zonder een instructie break tegen te komen). Dit is erg handig voor zoekalgoritmen (bijvoorbeeld 'zoeken naar een element: indien gevonden, breek het; anders rapporteer dat het niet is gevonden').
Probeer het zelf
Gegeven de lijst 'getallen = [10, 15, 20, 25, 30, 35]', zoek het eerste getal dat deelbaar is door 7 en wijs dit toe aan 'resultaat'. Als er geen bestaat, wijs dan -1 toe.
Toon hint
35 is de eerste (en enige) deelbare waarde door 7 in de lijst.
Oplossing beschikbaar na 3 pogingen
Oefening beoordelen
Bouw de lijst 'oneven_getallen' op met de oneven getallen van 1 tot en met 20 met behulp van een for-lus over bereik(1, 21) en ga door met het overslaan van de even getallen.
Toon hint
Als n even is, ga dan verder; anders bijvoegen.
Oplossing beschikbaar na 3 pogingen
Extra uitdaging
Given the list `numbers = [7, 11, 14, 21, 25]`, write a `for` loop to find the first number that is divisible by 7 and also strictly greater than 10. When you find it, store it in `found` and exit the loop using `break`. Finally, evaluate `found`.
Toon hint
Inside the loop, check if num % 7 == 0 and num > 10:, assign it to found and trigger break.
Oplossing beschikbaar na 3 pogingen