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- ochfor-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
for | while |
|---|---|
| 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 test | count <= 5 | Händelse |
|---|---|---|
| 1 | True | skriv 1, öka |
| 2–5 | True | skriv, öka |
| 6 | False | avsluta |
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 = 0→i = 1→i = 2→i = 3→i = 4Nä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
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
1Starten ä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
| Inmatning | total före | total efter |
|---|---|---|
| 3 | 0 | 3 |
| 5 | 3 | 8 |
| 2 | 8 | 10 |
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
whileupprepar så länge ett villkor är sant.forgå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.
breakavslutar den aktuella loopen direkt.