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
| Kall | Tallene |
|---|---|
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 durange(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 eksempelx = 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?
range(1, 6)gir tallene 1, 2, 3, 4 og 5- vi følger
sfor hver runde: 0 + 1 · 1 = 1 - 1 + 2 · 2 = 5
- 5 + 3 · 3 = 14
- 14 + 4 · 4 = 30
- 30 + 5 · 5 = 55
- løkka er ferdig, og programmet skriver ut 55.
| i | s før | s etter |
|---|---|---|
| 1 | 0 | 1 |
| 2 | 1 | 5 |
| 3 | 5 | 14 |
| 4 | 14 | 30 |
| 5 | 30 | 55 |
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 er den samme som formelen . 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.
| Metode | Svar |
|---|---|
Løkke: s = s + i | 10 |
| Formel: | 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
range(4)gir tallene 0, 1, 2 og 3- fire tall, fire runder
- 4
| Runde | i |
|---|---|
| 1 | 0 |
| 2 | 1 |
| 3 | 2 |
| 4 | 3 |
L-12Hvilke verdier får i i løkka for i in range(3):?
Vis fasit
range(3)starter på 0 og stopper før 3- 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
range(1, 5)gir 1, 2, 3, 4- 0 + 1 + 2 + 3 + 4
- 10
| i | s etter |
|---|---|
| 1 | 1 |
| 2 | 3 |
| 3 | 6 |
| 4 | 10 |
Middels(3)
M-11Hvilke verdier får i i løkka for i in range(2, 9, 3):?
Vis fasit
- Start på 2, steg på 3
- 2, 5, 8
- neste er 11, men sluttverdien 9 er passert
- 2, 5, 8
M-12Programmet setter x = 1 og kjører while x < 50: x = x * 2. Hva er x etterpå?
Vis fasit
xblir 1- 2
- 4
- 8
- 16
- 32
- 64
- 64 er ikke mindre enn 50, så løkka stopper
- 64
| Runde | x etter | x < 50? |
|---|---|---|
| start | 1 | ja |
| 1 | 2 | ja |
| 2 | 4 | ja |
| 3 | 8 | ja |
| 4 | 16 | ja |
| 5 | 32 | ja |
| 6 | 64 | nei, 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
ner 0, 1 og 2 når betingelsen er sann- tre runder
- 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
- Kvadratene av 1 til 5 er 1, 4, 9, 16 og 25
- 1 + 4 + 9 + 16 + 25
- 55
| i | i · i | s etter |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 4 | 5 |
| 3 | 9 | 14 |
| 4 | 16 | 30 |
| 5 | 25 | 55 |
V-12Hva er galt med programmet som setter x = 1 og kjører while x > 0: x = x + 1?
Vis fasit
xstarter på 1 og øker for hver rundex > 0er sant for alltid- 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
range(1, 5)gir 1, 2, 3, 4- 1 · 1 = 1
- 1 · 2 = 2
- 2 · 3 = 6
- 6 · 4 = 24
- 24
| i | f etter |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 3 | 6 |
| 4 | 24 |