Programmering med løkker
En løkke er kode som gjentas. Når du forstår løkker, kan du få Python til å telle, gjenta beskjeder, lage tabeller, regne summer og styre små spill.
for runde in range(3):
print("Prøv igjen!")
Hvorfor bruker vi løkker?
Programmering handler ofte om å gi datamaskinen tydelige instruksjoner. Noen ganger skal den gjøre noe én gang. Andre ganger skal den gjøre det samme mange ganger. Da bruker vi en løkke.
Uten løkke må vi skrive samme linje flere ganger:
print("Hei!")
print("Hei!")
print("Hei!")
print("Hei!")
print("Hei!")
Det virker, men det blir fort tungvint. Med en løkke kan vi skrive det kortere og ryddigere:
for i in range(5):
print("Hei!")
Hei!
Hei!
Hei!
Hei!
Hei!
Viktig idé: En løkke gjør at vi slipper å kopiere samme kode mange ganger. Hvis vi vil skrive ut «Hei!» åtte ganger, trenger vi bare å endre range(5) til range(8).
For-løkker: når vi vet hvor mange ganger
En for-løkke passer godt når vi vet hvor mange ganger noe skal gjentas. Her ber vi Python telle gjennom tallene i range(10).
for tall in range(10):
print(tall)
0
1
2
3
4
5
6
7
8
9
Legg merke til noe litt rart: Programmet starter på 0 og stopper før 10. Derfor blir ikke 10 skrevet ut.
range(5)
Starter på 0 og stopper før 5. Gir tallene 0, 1, 2, 3, 4.
range(3, 8)
Starter på 3 og stopper før 8. Gir tallene 3, 4, 5, 6, 7.
range(2, 11, 2)
Starter på 2, stopper før 11 og hopper med 2. Gir 2, 4, 6, 8, 10.
Start, stopp og hopp
Når vi bruker range(), kan vi bestemme hvor løkka starter, hvor den stopper og hvor stort hoppet skal være.
Eksempel 1: Telle fra 5 til 12
for tall in range(5, 13):
print(tall)
Eksempel 2: Tallene i 2-gangen
for tall in range(2, 51, 2):
print(tall)
Eksempel 3: Telle baklengs
for tall in range(10, 0, -1):
print(tall)
10
9
8
7
6
5
4
3
2
1
Innrykk bestemmer hva som gjentas
I Python er innrykk veldig viktig. Innrykk betyr at koden står litt lenger inn på linjen. Det viser hvilke linjer som hører til løkka.
Begge linjene gjentas
Her har begge print-linjene innrykk. Derfor kjører begge hver runde.
for tall in range(3):
print(tall)
print("Inne i løkka")
Én linje kjøres etterpå
Her står den siste linjen uten innrykk. Den kjøres først når løkka er ferdig.
for tall in range(3):
print(tall)
print("Løkka er ferdig")
Huskeregel: Kode med innrykk hører til løkka. Kode uten innrykk ligger utenfor løkka.
While-løkker: så lenge noe er sant
En while-løkke brukes når noe skal gjentas så lenge en betingelse er sann. En betingelse er noe Python kan sjekke, for eksempel tall < 5.
tall = 0
while tall < 5:
print(tall)
tall = tall + 1
0
1
2
3
4
Variabelen tall starter på 0.
Python sjekker om tall < 5 er sant.
Hvis det er sant, kjøres koden med innrykk.
Når tall blir 5, stopper løkka.
Pass på evige løkker
Hvis betingelsen aldri blir usann, stopper ikke programmet. Dette kalles en evig løkke.
tall = 0
while tall < 5:
print(tall)
Når bruker vi for, og når bruker vi while?
Mange elever blander disse to. En enkel huskeregel er: Bruk for når du vet antallet. Bruk while når du venter på at noe skal skje.
| Løkketype | Brukes når ... | Eksempel |
|---|---|---|
| for-løkke | du vet hvor mange ganger noe skal gjentas. | Skriv ut tallene fra 1 til 20. |
| for-løkke | du skal gå gjennom en fast tallrekke. | Skriv ut 5-gangen fra 5 til 100. |
| while-løkke | du skal fortsette så lenge en betingelse er sann. | Fortsett så lenge saldoen er større enn 0. |
| while-løkke | du ikke vet hvor mange forsøk som trengs. | Fortsett til brukeren skriver riktig kodeord. |
Eksempel: Legg sammen flere tall
Løkker er nyttige når vi skal gjøre samme handling flere ganger. Her lager vi et program som spør etter fem tall og legger dem sammen.
sum = 0
for i in range(5):
tall = float(input("Skriv et tall: "))
sum = sum + tall
print("Summen er", sum)
Programmet starter med at sum er 0. Hver gang brukeren skriver inn et tall, legges tallet til summen. Etter fem runder skrives svaret ut.
Hvorfor float? Vi bruker float fordi brukeren da kan skrive inn desimaltall, for eksempel 3.5.
Kort oppsummert
En løkke brukes når kode skal gjentas.
En for-løkke passer når vi vet hvor mange ganger koden skal gjentas.
range() brukes ofte til å lage tallrekker i for-løkker.
En while-løkke passer når koden skal gjentas så lenge en betingelse er sann.
Innrykk bestemmer hvilke linjer som hører til løkka.
I while-løkker må vi passe på at løkka faktisk kan stoppe.