Osa 3

Mera om loopar

break-instruktionen

Du har redan bekantat dig med break-instruktionen. Det kan användas för att direkt avsluta en loop. Ett exempel på ett användningsområde är då man ber användaren om någon information och loopen ska avslutas när ett visst värde matats in.

Samma funktionalitet kan skapas utan break-instruktionen genom att formulera ett lämpligt villkorsuttryck för while-loopen. Följande två program ber användaren mata in tal som adderas ihop tills användaren matar in -1.

# version 1 med break-instruktion

summa = 0

while True:
    tal = int(input("Ge ett tal, -1 avslutar programmet: "))
    if tal == -1:
        break
    summa += tal

print (f"Summan är {summa}")
# version 2 utan break-instruktion

summa = 0
tal = 0

while tal != -1:
    tal = int(input("Ge ett tal, -1 avslutar programmet: "))
    if tal != -1:
        summa += tal

print (f"Summan är {summa}")

Båda programmen ger samma utskrift med samma indata, exempelvis:

Exempelutskrift

Ge ett tal, -1 avslutar programmet: 2 Ge ett tal, -1 avslutar programmet: 4 Ge ett tal, -1 avslutar programmet: 5 Ge ett tal, -1 avslutar programmet: 3 Ge ett tal, -1 avslutar programmet: -1 Summan är 14

Båda programmen är alltså identiska till sin funktionalitet, men den första metoden är ofta enklare eftersom villkoret tal == 1 endast finns på ett ställe och variabeln tal inte behöver initieras utanför loopen.

break-instruktionen kan kombineras med ett lämpligt villkor. Till exempel körs följande loop så länge som summan av talen är högst 100, men avslutas också då man matar in -1.

Så här kan det se ut när programmet körs:

summa = 0

while summa <= 100:
    tal = int(input("Ge ett tal, -1 avslutar programmet: "))
    if tal == -1:
        break
    summa += tal

print (f"Summan är {summa}")

Exempel:

Exempelutskrift

Ge ett tal, -1 avslutar programmet: 15 Ge ett tal, -1 avslutar programmet: 8 Ge ett tal, -1 avslutar programmet: 21 Ge ett tal, -1 avslutar programmet: -1 Summan är 44

Exempelutskrift

Ge ett tal, -1 avslutar programmet: 15 Ge ett tal, -1 avslutar programmet: 8 Ge ett tal, -1 avslutar programmet: 21 Ge ett tal, -1 avslutar programmet: 45 Ge ett tal, -1 avslutar programmet: 17 Summan är 106

I det första exemplet avslutas loopen eftersom användaren matar in -1. I det andra exemplet avslutas loopen eftersom summan blir större än 100.

Som alltid inom programmering finns det flera sätt att uppnå samma resultat. Följande program fungerar på samma sätt som de två exemplen ovan:

summa = 0

while True:
    tal = int(input("Ge ett tal, -1 avslutar programmet: "))
    if tal == -1:
        break
    summa += tal
    if summa > 100:
        break

print (f"Summan är {summa}")

continue-instruktionen

Ett annat sätt att påverka hur en loop körs är continue-instruktionen. Det får loopen att hoppa till början av kodblocket, det vill säga så att villkoret kollas innan följande iteration körs. Det är alltså ett sätt att avbryta en given runda/iteration av loopen, utan att avbryta hela loopen.

3 3

Till exempel adderar följande program de tal som användaren matar in, men bara då det givna talet är mindre än tio. Om talet är tio eller större, hoppar man till början av loopen utan att lägga till talet.

summa = 0

while True:
    tal = int(input("Ge ett tal, -1 avslutar programmet: "))
    if tal == -1:
        break
    if tal >= 10:
        continue
    summa += tal

print (f"Summan är {summa}")
Exempelutskrift

Ge ett tal, -1 avslutar programmet: 4 Ge ett tal, -1 avslutar programmet: 7 Ge ett tal, -1 avslutar programmet: 99 Ge ett tal, -1 avslutar programmet: 5 Ge ett tal, -1 avslutar programmet: -1 Summan är 16

Nästlade loopar

Precis som med if-satser kan loopar placeras innanför andra loopar. Till exempel använder sig följande program av en loop för att fråga efter ett tal av användaren. Innanför denna loop finns en annan loop som räknar ner från det givna talet till ett:

while True:
    tal = int(input("Ge ett tal: "))
    if tal == -1:
        break
    while tal > 0:
        print(tal)
        tal -= 1
Exempelutskrift

Ge ett tal: 4 4 3 2 1 Ge ett tal: 3 3 2 1 Ge ett tal: 6 6 5 4 3 2 1 Ge ett tal: -1

I nästlade loopar är det bra att märka att break och continue endast påverkar den innersta loopen de finns i. Det föregående exemplet skulle kunna skrivas så här:

while True:
    tal = int(input("Ge ett tal: "))
    if tal == -1:
        break
    while True:
        if tal <= 0:
            break
        print(tal)
        tal -= 1

Här avslutar den andra break-instruktionen endast den inre loopen som används för att skriva ut talen.

Hjälpvariabler med loopar

Vi har redan använt oss av hjälpvariabler – som ökar eller minskar för varje iteration av en loop – flera gånger, så följande program borde till sin struktur se ganska bekant ut. Programmet skriver ut alla jämna tal från noll fram till det tal som användaren angett:

grans = int(input("Ge ett tal: "))
i = 0
while i < grans:
    print(i)
    i += 2
Exempelutskrift

Ge ett tal: 8 0 2 4 6

Hjälpvariabeln i har tilldelats värdet 0 före loopen, som ökar på talet med två för varje iteration.

När man använder kapslade loopar kan det uppstå ett behov för en ny hjälpvariabel för den inre loopen. Följande program skriver ut en "sifferpyramid" baserat på det tal som användaren angett:

tal = int(input("Ge ett tal: "))
while tal > 0:
    i = 0
    while i < tal:
        print(f"{i} ", end="")
        i += 1
    print()
    tal -= 1
Exempelutskrift

Ge ett tal: 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0

I programmet använder den yttre loopen hjälpvariabeln tal som minskar med ett tills dess värde blir 0. Hjälpvariabeln i tilldelas värdet 0 före man fortsätter till den inre loopen – varje gång den yttre loopen upprepas.

Den inre loopen använder sig av hjälpvariabeln i som ökar med talet 1 för varje iteration av den inre loopen. Den inre loopen fortsätter tills i är lika med tal, och skriver ut varje värde hos i med mellanslag emellan. När loopen avslutas skapar print-instruktionen i den yttre loopen en ny rad.

I och med att värdet på tal minskar för varje iteration av den yttre loopen, kommer antalet iterationer hos den inre loopen att minska. Vid varje upprepning blir sifferraden kortare, vilket bildar "pyramiden".

Nästlade loopar kan vara svårtolkade vid första anblicken, men det är viktigt att förstå hur de fungerar. Du kan använda dig av Python Tutors visualiseringsverktyg för att bättre förstå hur ovanstående exempel fungerar. Kopiera koden till kodfönstret och följ med hur utskriften formas och hur hjälpvariablernas värden ändras medan programmet körs.

Loading...
:
Loading...

Log in to view the quiz

Du har nått slutet av den här delen! Fortsätt till nästa del:

Se dina poäng genom att klicka på cirkeln nere till höger av sidan.