Evige løkker

Med while kan vi risikere å lage evige løkker, det vil si løkker der betingelsen for gjennomløp av løkka alltid er sann, slik at gjennomløpet aldri avsluttes. Dette er tilfellet i Python-koden under, som skriver ut kvadratet av oddetall:

n = 1
while n != 6:
    print(n**2)
    n += 2

Tanken er at løkka skal gjennomløpes inntil løkkevariabelen n blir 6, men n vil få verdiene 1, 3, 5, 7, 9, … , så betingelsen n != 6 vil alltid være sann, og gjennomløpet av løkka vil fortsette i det uendelige.

Dersom kode inneholder ei evig løkke, vil den bare gå og gå, og vi får aldri promptet, >>>, tilbake i kommandovinduet. Kode som går i evig løkke, eller av en annen grunn tar veldig lang tid, kan vi stoppe ved å trykke <ctrl>c i kommandovinduet, eller klikke på «stopp»-symbolet i Thonny.

Hvis det er mulig, bør vi bruke betingelser knyttet til intervaller i stedet for enkeltverdier, altså <, <=, > eller >= i stedet for == eller !=. Med betingelsen n < 6 i stedet for n != 6, vil for eksempel løkka i eksemplet over bare bli gjennomløpt 3 ganger. Hvis en betingelse er knyttet til flyttall, bør vi aldri sammenlikne med == eller !=, da risikerer vi feil på grunn av avrundingsfeil.

En typisk grunn til evige løkker er at vi glemmer å oppdatere løkkevariabelen inni løkka.

Oppgave 1:

Python-koden under er ment å skrive ut 2-gangen, altså 2, 4, 6, 8, 10, 12, 14, 16, 18, 20. Men den inneholder en feil som forårsaker ei evig løkke. Forklar hva feilen er og hvordan den kan rettes.

# Skriver ut 2-gangen
n = 1
while n <= 10:
    print(n * 2)

Se løsningsforslag

Kilder

    • Matthes A. (2019). Python Crash Course. no starch press