Skip to main content

Løkker

Datamaskiner er veldig gode på å repetere identiske eller lignende arbeidsoppgaver uten å gjøre feil, mens vi mennesker ikke alltid er like flinke. Det er en av grunnene til at datamaskiner ofte brukes for å automatisere gjentagende oppgaver. I Python brukes løkker for å repetere arbeidsoppgaver.

While-løkke

While-løkker kjører "så lenge" en betingelse er sann.

while betingelse:
# kode som gjennomføres så lenge betingelsen er sann

For eksempel bruker programmet under en while-løkke for å telle ned fra 5, og deretter si "lift off!":

oppgave

Trykk på Next-knappen et par ganger i vinduet over. Hva skjer?

Så lenge n er større enn 0 skal programmet kjøre.

While-løkker brukes som oftest når vi ikke vet hvor lenge vi skal holde på. F.eks helt til en spiller dør i et spill, eller så lenge spilleren ikke har gjettet riktig, som i eksemplet under.

hemmelig = 5
gjett = int(input("Hvilket tall tenker jeg på? 1-100: "))

while hemmelig != gjett:
gjett = int(input("Feil, prøv igjen! 1-100: "))

print("Riktig!")
Klikk for Pythontutor

Uendelige løkker

While-løkkene kjører så lenge betingelsen er sann (True). Hvis betingelsen aldri blir usann (False), vil en løkke kjøre for alltid. Slike løkker kalles uendelige løkker (fra eng. infinite loops). Hvis vi ender opp i en uendelig løkke vil PCen fryse, og vi får ikke kjørt resten av programmet.

Eksempel 1:

while True:
print("Inn i evigheten!")

Eksempel 2:

n = 20
while n > 0:
print(n)
merk

I eksempel 1 vil True alltid forbli True.

I eksempel 2 vil n alltid forbli større enn 0, fordi 20 er større enn 0.

For-løkker

En for-løkke er en løkke som kan brukes for å gå gjennom ting, for eksempel kan vi bruke en for-løkke for å gå gjennom hver bokstav i en tekst, hver ting i en liste eller hvert opplslagsord i en ordbok.

Koden under bruker en for-løkke og går gjennom hver bokstav i teksten Ja, vi elsker og teller antall mellomrom.

Inne i en for-løkke lages en variabel, for eksempel bokstav. For hver runde i løkken oppdateres variabelsen verdi, i eksempelene over har variabelen bokstav først verdien "J", så "a", så ",", så " " og så videre. Følg med på hva som skjer i minnet (global frame) i eksempelet under.

Vi kan også bruke for-løkker for å gå gjennom lister. Da vil variabelen vi oppretter i løkken få verdiene til hvert element i listen, en verdi om gangen. Legg merke til hvilke verdier variabelen elev har i eksempelet under.

En liste i python skrives mellom firkantparenteser ["dette", "er", "en", "liste"].
Firkantparenteser skrives med option/alt + shift + 8 på mac.
Firkantparenteser skrives med Alt gr + 8 på windows.

Det er også mulig å bruke for-løkker på lister med tall. Eksempelet under skriver ut syv-gangen.

print("7-gangen")
for tall in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
gange = 7 * tall
print(f"7 * {tall} = {gange}")
Klikk for Pythontutor

I lengden blir det litt slitsomt å skrive alle tallene i listen. Vi kan heller bruke den innebygde funksjonen range(start, slutt_før), som gir oss et intervall fra og med start opp til slutt_før.

range() er en innebygd funksjon som lager en rekke med tall. Rekken starter på det første tallet og slutter ett tall før det andre tallet. Eks: range(1,3) gir rekken 1 2. range(5,7) gir rekken 5 6. Det er også mulig å droppe første tallet i range, slik range(3), da lager range en rekke som starter på 0 og slutter før tallet mellom parantesene. Eks: range(3) gir rekken 0 1 2

print("7-gangen")
for tall in range(1,11):
gange = 7 * tall
print(f"7 * {tall} = {gange}")
Klikk for Pythontutor

Legg merke til at range slutter én før den siste verdien som sendes inn. Løkken under vil altså telle fra 1 til 10 – ikke fra 1 til 11!

for tall in range(1,11):
print(tall)
Klikk for Pythontutor

While vs. for

I mange tilfeller kan vi velge om vi skal bruke for eller while. I eksemplet under brukes både en while-løkke og en for-løkke for å telle til 10.

# ---- While ----
i = 1
while i < 11:
print(i)
i += 1

# ---- For -----
for i in range(11):
print(i)
Klikk for Pythontutor

Selv om det er mulig å bruke begge typene løkker for å løse samme problem, er det noen tilfeller hvor vi oftere bruker for, og andre tilfeller hvor vi oftere bruker while. For-løkker brukes som oftest når vi vet hvor mange ganger vi skal gjenta en kode, mens While-løkker brukes oftest når vi ikke vet hvor mange ganger vi skal gjenta en kode.

Ordbøker og løkker

For-løkker kan også brukes for å gå gjennom hver nøkkel i ordbøker. Vi skal se mer på ordbøker i neste kapittel.

fotballspiller = {
"fornavn": "Ada",
"etternavn": "Hegerberg",
"alder": 26,
"klubb": "Lyon"
}
for nøkkel in fotballspiller:
print(f"{nøkkel}: {fotballspiller[nøkkel]}")
Klikk for Pythontutor

Oppgaver

Oppgave 5.4.1

a) Bruk en while-løkke til å printe ut alle tallene fra 0 til og med 100

b) Bruk en for-løkke til å printe ut alle tallene fra 0 til og med 100

c) Bruk en for-løkke til å printe ut alle partallene fra og med 400 til og med 600

Klikk for løsning
# a) 

tall = 0
while tall < 101:
print(tall)
tall = tall + 1 # Kan alternativt skrive tall += 1

# b)

for tall in range(101):
print(tall)

# c)

for tall in range(400, 601,2):
print(tall)

Oppgave 5.4.2

a) Forklar hva følgende kode gjør:

sum = 0 
n = 200

for tall in range(1,n+1):
sum = sum + tall

print(sum)

b) Lag et program som regner ut summen av de n første oddetallene. La bruker bestemme n.

Klikk for løsning

a) tall er løkkas variabel, og vil starte på 1 og slutte når den er n (som her er 200).

Den øker med 1 hver gang løkka kjøres.

sum øker med tall for hver gang, altså regner vi summen av de 200 første tallene.

b)

n = int(input("Skriv inn et tall: "))
n_sum = 0
oddetall = 1

for i in range(n):
n_sum = n_sum + oddetall
oddetall = oddetall + 2

print("Summen av de første", n, "oddetall er:", n_sum)

Oppgave 5.4.3

Ta frem koden koden for Stein - Saks - Papir. Legg på funksjonalitet slik at programmet spør om man vil spille en gang til etter et spill. Hvis "ja" så spiller man om igjen, ellers stopper programmet.

Klikk for hint
  • Lag en variabel som du setter til "ja"
  • Legg en while-løkke rundt programmet som sjekker om variabelen er "ja".
  • På slutten av spillet (i løkka), oppdaterer du variabelen med en input der du spør om det skal spilles om igjen
Klikk for løsning
Kommer

Oppgave 5.4.4

Lag din egen Chatbot.

Eksempel på bruk av Chatbot

Hei jeg er chatbotten Thorsen 2000, hva lurer du på?
> Hvor mye koster en bitcoin?
1 Bitcoin koster 171 061 kr.
Lurer du på noe annet?
> Hvordan er været i Bergen?
Det er 6 grader og regn
Lurer du på noe annet?
> Hva er klokka?
Klokka er 09:39
> Hva er hovedstaden i Argentina?
Det vet jeg ikke.
Lurer du på noe annet?
> Nei
Den er grei. Ha en fin dag.