Slik bruker du while-løkker i Python

Lær while-løkker i Python. Betingelser, tellere, uendelige løkker og forskjellen fra for-løkker.

Videoforhåndsvisning

Opprett konto for å se video

Det er helt gratis og tar under 30 sekunder

Opprett gratis kontoHar du konto? Logg inn

Programmet skal spørre brukeren om et partall, og det skal fortsette å spørre helt til svaret faktisk er et partall. Du vet ikke på forhånd hvor mange forsøk det tar. En while-løkke i Python kjører så lenge en betingelse er sann, og stopper av seg selv når betingelsen blir usann.

Slik skriver du en while-løkke

En while-løkke starter med nøkkelordet while, etterfulgt av en betingelse og et kolon. Koden under (innrykket) kjører gjentatte ganger så lenge betingelsen evalueres til True:

indeks = 0

while indeks < 4:

    print(indeks)

    indeks += 1

Her starter indeks på 0 og øker med 1 for hver runde. Når indeks når 4, er betingelsen indeks < 4 ikke lenger sann, og løkken stopper. Du får tallene 0, 1, 2 og 3.

Legg merke til at du selv må oppdatere variabelen som styrer betingelsen. Glemmer du indeks += 1, forblir indeks 0 for alltid, og betingelsen er alltid sann. Da har du en uendelig løkke.

Uendelige løkker og hvordan du unngår dem

En uendelig løkke oppstår når betingelsen aldri blir usann. Det kan skje med vilje, men som oftest er det en feil. Et typisk eksempel:

kondisjon = True

while kondisjon:

    print("hei")

Denne løkken skriver "hei" i all evighet, fordi ingenting endrer kondisjon til False. Hvis du havner i en uendelig løkke, stopper du programmet med Ctrl+C i terminalen.

For å unngå uendelige løkker, sørg alltid for at noe inne i løkken påvirker betingelsen. Enten ved å oppdatere en teller, endre en variabel basert på brukerinput, eller bruke break for å avslutte manuelt.

Iterere gjennom tekst med while

Du kan bruke en while-løkke til å gå gjennom en streng bokstav for bokstav. Det krever en indeksvariabel som du øker manuelt:

tekst = "heisann"

indeks = 0

while indeks < len(tekst):

    print(tekst[indeks])

    indeks += 1

Her bruker du len(tekst) for å finne lengden, og tekst[indeks] for å hente bokstaven på den posisjonen. Rekkefølgen er viktig. Plasserer du indeks += 1 før print-linjen, hopper du over den første bokstaven og risikerer en IndexError på slutten. Til sammenligning gjør en for-løkke det samme med mindre kode: for bokstav in tekst. While-varianten gir deg mer kontroll, men krever mer arbeid.

While-løkke med brukerinput

Det vanligste bruksområdet for while-løkker er å vente på riktig input fra brukeren. Her er et program som spør etter partall:

riktig = False

while not riktig:

    tall = int(input("Skriv et partall: "))

    if tall % 2 == 0:

        print("Riktig!")

        riktig = True

    else:

        print("Feil, prøv igjen")

Betingelsen not riktig betyr "så lenge riktig er False". Når brukeren gir riktig svar, settes variabelen til True, og løkken stopper neste gang betingelsen sjekkes. Modulo-operatoren % gir resten etter divisjon. Er resten 0 etter divisjon med 2, er tallet et partall.

Begrens antall forsøk

Noen ganger vil du sette en grense for hvor mange runder løkken skal kjøre. Kombiner betingelsen med en teller:

forsok = 0

riktig = False

while not riktig and forsok < 3:

    tall = int(input("Skriv et partall: "))

    forsok += 1

    if tall % 2 == 0:

        print("Riktig!")

        riktig = True

    else:

        print("Feil, prøv igjen")

if forsok == 3 and not riktig:

    print("Du har brukt opp alle forsøkene")

Her kreves to ting for at løkken skal fortsette: brukeren har ikke svart riktig, og forsøkstalleren er under 3. Begge betingelsene må være sanne (takket være and-operatoren). Treffer brukeren riktig, stopper løkken. Bruker de tre forsøk uten å treffe, stopper den også.

while True med break

Et vanlig mønster er å bruke while True og avslutte med break inne i løkken. Det gir deg full kontroll over nøyaktig når løkken skal stoppe, uten å måtte sette opp betingelsen på forhånd:

while True:

    tall = int(input("Skriv et partall: "))

    if tall % 2 == 0:

        print("Riktig!")

        break

    print("Feil, prøv igjen")

Denne versjonen er kortere enn varianten med en boolsk variabel, fordi du slipper å opprette og oppdatere en riktig-variabel. Break gjør jobben direkte. Mønsteret er spesielt nyttig for menyer og input-validering.

Forskjellen mellom while og for

Bruk for-løkker når du vet hvor mange ganger koden skal kjøre, eller når du itererer over en kjent sekvens. Bruk while-løkker når du ikke vet antall iterasjoner på forhånd, og løkken skal stoppe basert på en betingelse som endrer seg underveis.

I praksis brukes for-løkker mye oftere. Men while-løkker er uunnværlige for situasjoner som "gjenta til brukeren gir riktig svar", "les data til filen er tom" eller "prøv igjen til tilkoblingen lykkes".

Neste steg

Vil du avbryte en while-løkke før betingelsen blir usann, viser artikkelen om break og continue hvordan du gjør det. Break er spesielt nyttig i while-løkker der du oppdager midt i løkkekroppen at du vil stoppe. For fullstendig referanse, se while-setningen i Python-dokumentasjonen.

Denne videoen er hentet fra kurset Python for nybegynnere på Utdannet.no. I kurset jobber du med while-løkker i kombinasjon med brukerinput, betingelser og feilhåndtering, og bygger programmer som reagerer dynamisk på det brukeren gjør.