Løkker med for og while

En LØKKE gjentar linjene som er rykket inn under den. for brukes når du vet hvor mange ganger du skal gjenta, og while brukes når du skal gjenta så lenge en betingelse er sann. Med range() lager du tallene løkka går gjennom, og sluttverdien er IKKE med: range(1, 5) gir 1, 2, 3 og 4.

s = 0
for i in range(1, 5):
    s = s + i
print(s)

Programmet starter med s = 0 og legger til i for hver runde, så s blir 1, 3, 6 og til slutt 10. Det skriver ut 10. Med while kan løkka stoppe først når et mål er nådd:

x = 1
while x < 50:
    x = x * 2
print(x)

Her dobles x helt til det ikke lenger er mindre enn 50: 1, 2, 4, 8, 16, 32 og 64. Programmet skriver ut 64.

Summen av de første n heltallene

1+2+⋯+n=n(n+1)21 + 2 + \cdots + n = \dfrac{n(n+1)}{2}

Hva gir range()?
KallTallene
range(5)0, 1, 2, 3, 4
range(1, 5)1, 2, 3, 4
range(0, 10, 3)0, 3, 6, 9
range(5, 0, -1)5, 4, 3, 2, 1

Tips

  • range(1, 5) stopper FØR 5. Vil du ha tallene til og med 5, skriver du range(1, 6). Start teller med, slutt gjør det ikke.
  • En while-løkke må endre noe som påvirker betingelsen. Glemmer du det, for eksempel x = x * 2, blir betingelsen sann for alltid, og programmet kjører uten å stoppe.
  • Skal du summere i en løkke, start summen på 0 før løkka. Skal du gange, start på 1.

Eksempel: Spore en løkke

Programmet setter s = 0 og kjører for i in range(1, 6): s = s + i * i, og skriver så ut s. Hva skrives ut?

Løsning:
  1. range(1, 6) gir tallene 1, 2, 3, 4 og 5
  2. vi følger s for hver runde: 0 + 1 · 1 = 1
  3. 1 + 2 · 2 = 5
  4. 5 + 3 · 3 = 14
  5. 14 + 4 · 4 = 30
  6. 30 + 5 · 5 = 55
  7. løkka er ferdig, og programmet skriver ut 55.
Sportabell
is førs etter
101
215
3514
41430
53055
Alternativ forklaring/metode: Bytt løkka ut med en formel

Alternativ metode – innenfor pensum, men ikke hovedmetoden her

Standard lærebokmetode

Summer du bare de første heltallene, trenger du ingen løkke. Summen 1+2+3+4=101 + 2 + 3 + 4 = 10 er den samme som formelen 4⋅52=10\frac{4 \cdot 5}{2} = 10. Løkka er nyttig fordi den virker også når det ikke finnes noen formel, og formelen er nyttig til å sjekke at løkka regner riktig.

Løkke og formel gir samme svar
MetodeSvar
Løkke: s = s + i10
Formel: 4⋅52\frac{4 \cdot 5}{2}10

Oppgaver

Prøv minst én oppgave på hvert nivå.

Lett(3)

L-11Hvor mange ganger kjøres løkka for i in range(4):?

Vis fasit
  1. range(4) gir tallene 0, 1, 2 og 3
  2. fire tall, fire runder
  3. 4
Tallene i løkka
Rundei
10
21
32
43

L-12Hvilke verdier får i i løkka for i in range(3):?

Vis fasit
  1. range(3) starter på 0 og stopper før 3
  2. 0, 1, 2

L-13Programmet setter s = 0 og kjører for i in range(1, 5): s = s + i. Hva er s til slutt?

Vis fasit
  1. range(1, 5) gir 1, 2, 3, 4
  2. 0 + 1 + 2 + 3 + 4
  3. 10
Sportabell
is etter
11
23
36
410
Middels(3)

M-11Hvilke verdier får i i løkka for i in range(2, 9, 3):?

Vis fasit
  1. Start på 2, steg på 3
  2. 2, 5, 8
  3. neste er 11, men sluttverdien 9 er passert
  4. 2, 5, 8

M-12Programmet setter x = 1 og kjører while x < 50: x = x * 2. Hva er x etterpå?

Vis fasit
  1. x blir 1
  2. 2
  3. 4
  4. 8
  5. 16
  6. 32
  7. 64
  8. 64 er ikke mindre enn 50, så løkka stopper
  9. 64
Sportabell
Rundex etterx < 50?
start1ja
12ja
24ja
38ja
416ja
532ja
664nei, stopp

M-13Programmet setter n = 0 og kjører while n < 3: n = n + 1. Hvor mange ganger kjøres linjen n = n + 1?

Vis fasit
  1. n er 0, 1 og 2 når betingelsen er sann
  2. tre runder
  3. 3
Vanskelig(3)

V-11Programmet setter s = 0 og kjører for i in range(1, 6): s = s + i * i. Hva er s til slutt?

Vis fasit
  1. Kvadratene av 1 til 5 er 1, 4, 9, 16 og 25
  2. 1 + 4 + 9 + 16 + 25
  3. 55
Kvadratene legges sammen
ii · is etter
111
245
3914
41630
52555

V-12Hva er galt med programmet som setter x = 1 og kjører while x > 0: x = x + 1?

Vis fasit
  1. x starter på 1 og øker for hver runde
  2. x > 0 er sant for alltid
  3. løkka stopper aldri

V-13Programmet setter f = 1 og kjører for i in range(1, 5): f = f * i. Hva er f til slutt?

Vis fasit
  1. range(1, 5) gir 1, 2, 3, 4
  2. 1 · 1 = 1
  3. 1 · 2 = 2
  4. 2 · 3 = 6
  5. 6 · 4 = 24
  6. 24
Sportabell
if etter
11
22
36
424