Presentationer Slide 1/1

Kapitel 6

Loopar

Upprepa kod med while, for och range().

Mål

Efter kapitlet ska du kunna...

  • förklara varför loopar behövs
  • skriva while- och for-loopar
  • använda start, stopp och steg i range()
  • undvika oändliga loopar
  • kombinera loopar med villkor och summor
  • avsluta en loop med break

6.1

En loop upprepar kod

Utan loop måste samma instruktion skrivas flera gånger.

print(1)
print(2)
print(3)
print(4)
print(5)

Samma resultat

Kortare kod med en loop

for i in range(5):
    print(i + 1)

Den indragna instruktionen är print(i + 1).

Den körs fem gånger med olika värden på i.

Två typer

Välj loop efter problemet

forwhile
När antalet varv är känt.När ett villkor bestämmer hur länge.
Går igenom en talföljd.Kontrollerar villkoret före varje varv.

6.2 · Hela programmet

Räkna med while

count = 1

while count <= 5:
    print(count)
    count = count + 1
1
2
3
4
5

while · steg 1

Startvärde

count = 1

Variabeln skapas före loopen.

Den håller reda på vilket varv programmet befinner sig i.

while · steg 2

Villkoret kontrolleras

while count <= 5:

Om villkoret är True körs loopens kod.

Om villkoret är False avslutas loopen.

while · steg 3

Värdet måste förändras

count = count + 1

Det gamla värdet används för att räkna ut ett nytt.

1 → 2 → 3 → 4 → 5 → 6

När värdet blir 6 är villkoret falskt.

Spåra loopen

Vad händer varje varv?

count före testcount <= 5Händelse
1Trueskriv 1, öka
2–5Trueskriv, öka
6Falseavsluta

6.3 · Hela programmet

Räkna med for

for i in range(5):
    print(i)
0
1
2
3
4

for · steg för steg

i får ett nytt värde varje varv

i = 0i = 1i = 2i = 3i = 4

När talföljden är slut fortsätter programmet efter loopen.

Indrag

Endast indragen kod upprepas

for i in range(3):
    print("Varv", i)
    print("Inne i loopen")

print("Efter loopen")

De två indragna raderna körs tre gånger.

Den sista raden körs en gång.

6.4

range(stopp)

for i in range(5):
    print(i)

range(5) börjar på 0.

Stoppvärdet 5 ingår inte.

Följden blir 0, 1, 2, 3, 4.

range()

Start och stopp

for i in range(1, 6):
    print(i)

Startvärdet 1 ingår.

Stoppvärdet 6 ingår inte.

Följden blir 1, 2, 3, 4, 5.

range()

Start, stopp och steg

for i in range(0, 10, 2):
    print(i)

Start: 0

Stopp före: 10

Steg: 2

Följden blir 0, 2, 4, 6, 8.

Interaktiv kontroll

Bygg en talföljd

Terminal
Tryck på knappen för att köra.

Räkna baklänges

Använd ett negativt steg

for i in range(10, 0, -1):
    print(i)
10
9
8
7
6
5
4
3
2
1

Starten är 10, steget är -1.

Stoppvärdet 0 ingår inte.

Kontrollfråga

Vilka tal skapas?

range(2, 12, 3)

Börja på 2 och öka med 3.

Svar: 2, 5, 8, 11.

Nästa tal hade varit 14, som ligger efter stoppvärdet.

6.5

En oändlig loop tar aldrig slut

while True:
    print("Detta fortsätter för alltid")

Villkoret är alltid sant.

En sådan loop behöver ett annat sätt att avslutas, exempelvis break.

Oändlig av misstag

Variabeln ändras inte

count = 0

while count < 5:
    print(count)

count förblir 0.

Villkoret 0 < 5 fortsätter därför att vara sant.

Rätta loopen

För villkoret mot False

count = 0

while count < 5:
    print(count)
    count = count + 1

Efter fem varv blir count lika med 5.

Då blir villkoret falskt och loopen avslutas.

6.6

Villkoret kan ändra varje varv

for i in range(1, 11):
    if i % 2 == 0:
        print(f"{i} är jämnt")
    else:
        print(f"{i} är udda")

Loopen väljer en gren för varje tal.

Loop och input

Användaren bestämmer antalet varv

number = int(input("Hur många tal? "))

for i in range(1, number + 1):
    if i % 2 == 0:
        print(f"{i} är jämnt")
    else:
        print(f"{i} är udda")

number + 1 behövs eftersom stoppvärdet inte ingår.

6.7 · Ackumulator

Bygg en summa över flera varv

total = 0

for i in range(5):
    number = int(input("Skriv ett tal: "))
    total = total + number

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

Spåra summan

total minns tidigare varv

Inmatningtotal företotal efter
303
538
2810

En variabel som samlar ett resultat kallas ofta ackumulator.

Räkna träffar

Räkna jämna tal

count = 0

for i in range(1, 11):
    if i % 2 == 0:
        count = count + 1

print(f"Antal jämna tal är {count}")

Räknaren ökar bara när villkoret är sant.

6.8

break avslutar loopen direkt

while True:
    number = int(input("Skriv ett tal (0 avslutar): "))
    if number == 0:
        break
    print(f"Du skrev talet {number}")

När användaren skriver 0 lämnar programmet loopen.

break · körning

Stoppvärdet skrivs inte ut

Skriv ett tal (0 avslutar): 5
Du skrev talet 5
Skriv ett tal (0 avslutar): 8
Du skrev talet 8
Skriv ett tal (0 avslutar): 0

break körs innan den sista print()-raden.

6.9 · Övning

Multiplikationstabell

Läs in ett tal från användaren.

Använd en for-loop från 1 till 10.

3 x 1 = 3
3 x 2 = 6
3 x 3 = 9

Använd en f-sträng för varje rad.

Fördjupningsövning

FizzBuzz

  • Delbart med både 3 och 5: skriv FizzBuzz.
  • Annars delbart med 3: skriv Fizz.
  • Annars delbart med 5: skriv Buzz.
  • Annars: skriv talet.

Kontrollera det mest specifika villkoret först.

Sammanfattning

Kom ihåg

  • while upprepar så länge ett villkor är sant.
  • for går igenom en talföljd eller samling.
  • Stoppvärdet i range() ingår inte.
  • En while-loop måste kunna nå ett falskt villkor.
  • Loopar kan innehålla villkor och bygga summor eller räknare.
  • break avslutar den aktuella loopen direkt.