I artikkelen om å gjennomløpe lister har vi koden i eksempel 1 under, som sjekker om ei liste inneholder Fibonaccis tallfølge.
Eksempel 1:
# Sjekker om lista fibo inneholder Fibonaccis tallfølge
er_fibo = True
for n in range(2, len(fibo)):
if fibo[n] != fibo[n - 1] + fibo[n - 2]:
er_fibo = False
if er_fibo == True:
print("Lista inneholder Fibonaccis følge.")
else:
print("Lista inneholder ikke Fibonaccis følge.")
Koden virker ved å sjekke om alle elementer fra og med element 2 er lik summen av de to foregående. Hvis vi finner et element der det ikke er tilfelle, settes variabelen er_fibo til False.
En ulempe med koden er at den fortsetter å gjennomløpe lista selv etter at vi har avgjort at den ikke inneholder Fibonaccis følge. La oss si at lista begynner med 1, 1, 10, og så har enda 1 million elementer. Da vil vi allerede ved første gjennomløp av løkka ha at fibo[2] != fibo[1] + fibo[0], og er_fibo blir satt til False. Likevel vil koden fortsette å gjennomløpe løkka til siste element er nådd. Det kan vi unngå ved å sette inn kodeordet break. break sørger for at gjennomløpet av ei løkke avsluttes umiddelbart. Eksempel 2 under viser hvordan det kan gjøres med koden fra eksempel 1, markert med gult.
Eksempel 2:
# Sjekker om lista fibo inneholder Fibonaccis tallfølge er_fibo = True for n in range(2, len(fibo)): if fibo[n] != fibo[n - 1] + fibo[n - 2]: er_fibo = False break if er_fibo == True: print("Lista inneholder Fibonaccis følge.") else: print("Lista inneholder ikke Fibonaccis følge.")
Dersom vi har flere løkker inni hverandre, vil break bare avbryte løkka den er i, ikke ytre løkker, som illustrert under.

Vi kan imidlertid forenkle koden i eksempel 2 ytterligere ved hjelp av en spesiell mekanisme som finnes i Python. Vi kan nemlig knytte en else-betingelse til løkker, både for– og while-løkker. Blokka som tilhører else, vil bare bli utført hvis løkka ikke er avbrutt med break. Siden vi i eksempel 2 bare avbryter løkka hvis den ikke inneholder Fibonaccis følge, kan vi benytte dette til å styre utskriften, slik det er vist i eksempel 3:
Eksempel 3:
# Sjekker om lista fibo inneholder Fibonaccis tallfølge
for n in range(2, len(fibo)):
if fibo[n] != fibo[n - 1] + fibo[n - 2]:
print("Lista inneholder ikke Fibonaccis følge.")
break
else:
print("Lista inneholder Fibonaccis følge.")
Vi trenger ikke lenger variabelen er_fibo til å flagge at en feil er funnet. Straks vi oppdager et tilfelle der fibo[n] != fibo[n - 1] + fibo[n - 2], får vi skrevet ut teksten Lista inneholder ikke Fibonaccis følge, og gjennomløpet av løkka avbrytes med break. else-blokka blir da ikke utført. Hvis løkka ikke blir avbrutt, men kjøres til sluttverdien i range() nås, blir else-blokka utført, og teksten Lista inneholder Fibonaccis følge skrives ut.
Legg merke til at else i eksempel 3 står rett under for, siden else er en del av mekanismen for–else. Rykker vi else inn, blir else knyttet til if, og logikken blir feil.
Vi kan bruke løkkemekanismen for … in også sammen med strenger. Tegnene i strengen blir da én for én tildelt løkkevariabelen når løkka gjennomløpes. For eksempel vil koden
streng = "hei"
for tegn in streng:
print(tegn)
skrive ut bokstavene h, e og i, på hver sin linje.
En student har skrevet koden under, som er ment å la brukeren skrive inn en streng, og så skrive ut en melding om strengen inneholder minst én vokal:
# Leser inn streng og sjekker om den inneholder vokal
streng = input("Streng å søke i: ")
for vokal in "aeiouyæøå":
if vokal in streng:
print("Strengen inneholder vokal.")
else:
print("Strengen inneholder ingen vokaler.")
Men koden virker ikke som tenkt. Forklar hva problemet er, og skriv så koden riktig.
Et annet kodeord som kan brukes i løkker, er continue. continue gjør at Python hopper direkte til neste gjennomløp av løkka. Dersom vi har flere løkker inni hverandre, vil continue bare påvirke løkka den er i, ikke ytre løkker, som illustrert under.

Kilder
-
- Matthes A. (2019). Python Crash Course. no starch press
Mekanismene break og continue finnes også i programmeringsspråkene C og JavaScript, og virker på samme måte. Disse språkene har imidlertied ikke mekanismene for–else og while–else.