9.2 Løkker og betingelser
For- og while-løkker og if-setninger: følge variabler gjennom et program, forklare utskriften og lage program for mønstre og summer.
Gjenta og velge
De fleste programmene på eksamen bygger på to ideer:
- en løkke gjentar de samme linjene mange ganger
- en betingelse (if) velger hvilke linjer som skal kjøres
Med løkker kan vi regne ut alle leddene i en tallfølge, summere mange ledd og prøve oss fram til en verdi passer.
for i in range(a, b):
...kjører linjene med innrykk én gang for hver verdi i = a, a + 1, …, b - 1. Sluttverdien b er ikke med.
- range(5) gir
- range(1, 6) gir
- range(0, 20, 5) gir (steg 5)
Linjene som hører til løkka, har innrykk (fire mellomrom).
Hva skriver programmet ut?
for i in range(1, 6):
print(i, i ** 2)i går gjennom . For hver verdi skrives i og ut.1 1
2 4
3 9
4 16
5 25Svar: De fem første kvadrattallene, hvert ved siden av nummeret sitt.
Summere med en løkke
For å summere mange ledd starter vi med s = 0 og legger til ett ledd per runde i løkka. Variabelen s kalles ofte en akkumulator.
Hva skriver programmet ut?
s = 0
for k in range(1, 101):
s = s + k
print(s)k | s etter runden |
|---|---|
| 1 | 1 |
| 2 | 3 |
| 3 | 6 |
| … | … |
| 100 |
5050Kontroll: Svar: Programmet skriver ut
5050, summen .Hva skriver programmet ut?
for i in range(1, 6):
print(3 * i)Hvilke verdier går i gjennom i for i in …?
range(4)range(2, 7)range(0, 20, 5)range(10, 0, -3)Hva skriver programmet ut? Skriv summen som programmet regner ut.
s = 0
for k in range(1, 5):
s = s + k ** 2
print(s)Skriv et program som skriver ut og for .
Programmet skal regne ut summen . Fyll inn det som mangler.
s = 0
for k in range(0, ___):
s = s + ___
print(s)Algoritmer for figurmønstre
En vanlig eksamensoppgave gir noen figurer i et mønster og ber om en algoritme og et program. En algoritme er en presis beskrivelse i ord av hva som skal gjøres, i riktig rekkefølge.
Først finner vi en formel for antallet i figur . Deretter lar vi en løkke gå gjennom , regne ut antallet og eventuelt legge det til en sum.
Figur 1 har 2 prikker, figur 2 har 6 prikker og figur 3 har 12 prikker. Figur er et rektangel med rader og prikker i hver rad.
a) Sett opp en algoritme for å finne antall prikker i hver av de 15 første figurene og til sammen.
b) Lag programmet.
a) Antall prikker i figur :
Kontroll: , ,
Algoritme:
- Sett totalen lik 0.
- For hver fra 1 til 15: regn ut , skriv ut figurnummer og antall, og legg antallet til totalen.
- Skriv ut totalen.
b)
# Figur n har n * (n + 1) prikker
totalt = 0
for n in range(1, 16):
prikker = n * (n + 1)
totalt = totalt + prikker
print("Figur", n, ":",
prikker, "prikker")
print("Til sammen:", totalt,
"prikker")Figur 1 : 2 prikker
Figur 2 : 6 prikker
Figur 3 : 12 prikker
Figur 4 : 20 prikker
Figur 5 : 30 prikker
Figur 6 : 42 prikker
Figur 7 : 56 prikker
Figur 8 : 72 prikker
Figur 9 : 90 prikker
Figur 10 : 110 prikker
Figur 11 : 132 prikker
Figur 12 : 156 prikker
Figur 13 : 182 prikker
Figur 14 : 210 prikker
Figur 15 : 240 prikker
Til sammen: 1360 prikkerSvar: Programmet skriver ut antall prikker i hver figur. De 15 første figurene har til sammen 1360 prikker.
Skriv et program som regner ut summen av de 50 første oddetallene . Sammenlikn svaret med .
Betingelser
if betingelse:
# kjøres når betingelsen
# er sann
...
elif annen_betingelse:
# kjøres når den første
# er usann og denne er sann
...
else:
# kjøres ellers
...| Python | Betydning |
|---|---|
== | er lik |
!= | er ikke lik |
<, <= | mindre enn, mindre enn eller lik |
>, >= | større enn, større enn eller lik |
and, or | og, eller |
n % 2 == 0 er sann nøyaktig når er et partall. Legg merke til forskjellen på = (tilordning) og == (sammenlikning).Hva skriver programmet ut?
for n in range(1, 7):
if n % 2 == 0:
print(n, "er et partall")
else:
print(n, "er et oddetall")Resten ved divisjon med 2 er 0 for partall og 1 for oddetall.
1 er et oddetall
2 er et partall
3 er et oddetall
4 er et partall
5 er et oddetall
6 er et partallSvar: For hvert tall fra 1 til 6 skriver programmet om tallet er et partall eller et oddetall.
Hva kan programmet brukes til, og hva skriver det ut?
a = 5
b = 13
c = 12
if (a**2 + b**2 == c**2
or a**2 + c**2 == b**2
or b**2 + c**2 == a**2):
print("Trekanten er",
"rettvinklet")
else:
print("Trekanten er",
"ikke rettvinklet")Betingelsen sjekker Pytagoras' setning med hver av de tre sidene som hypotenus.
, så den andre delen av betingelsen er sann.
Trekanten er rettvinkletSvar: Programmet avgjør om tre sidelengder gir en rettvinklet trekant. For sidene 5, 13 og 12 skriver det ut at trekanten er rettvinklet.
Programmet nedenfor er gitt.
x = 7
if x % 3 == 0:
print("delelig med 3")
elif x % 2 == 0:
print("partall")
else:
print("verken eller")Hva skriver programmet ut?
Hva skrives ut dersom vi bytter ut 7 med 12 og med 8?
while betingelse:
...gjentar linjene med innrykk så lenge betingelsen er sann. Betingelsen sjekkes før hver runde. Vi bruker while når vi ikke vet på forhånd hvor mange runder som trengs, for eksempel når vi skal finne når en sum passerer en grense.
Noe inne i løkka må endre betingelsen, ellers stopper programmet aldri.
Det første linjestykket i en figur er 80 cm. Hvert nytt linjestykke er 85 % av det forrige. Hvor mange linjestykker må vi ha for at summen av lengdene skal bli minst 4 meter?
4 m = 400 cm. Vekstfaktoren er 0,85.
# lengden av det første
# linjestykket (cm)
lengde = 80
summen = 0
# antall linjestykker
n = 0
while summen < 400:
n = n + 1
summen = summen + lengde
lengde = lengde * 0.85
print(n, summen)9 409.804295315625Kontroll med 8 linjestykker:
print(sum(80 * 0.85 ** k
for k in range(8)))388.00505331249997Svar: Vi må ha 9 linjestykker. Da er summen omtrent 409,8 cm.
Figur i et mønster lages av fyrstikker. Vi har 1000 fyrstikker. Hvor mange hele figurer kan vi lage, og hvor mange fyrstikker får vi igjen?
Løkka lager neste figur bare hvis det er nok fyrstikker til den.
total = 1000 # fyrstikker vi har
brukt = 0
# antall ferdige figurer
n = 0
while (brukt + 4 * (n + 1) + 1
<= total):
n = n + 1
brukt = brukt + 4 * n + 1
print("Antall figurer:", n)
print("Fyrstikker igjen:",
total - brukt)Antall figurer: 21
Fyrstikker igjen: 55Kontroll: for 21 figurer. Figur 22 trenger 89 fyrstikker, og .
Svar: Vi kan lage 21 figurer og får 55 fyrstikker igjen.
Den vanligste feilen med while er å svare én for mye eller én for lite. Spør deg selv:
- Sjekkes grensen før eller etter at neste ledd legges til?
- Er det verdien før eller etter siste runde som skrives ut?
Kontroller alltid svaret ved å regne ut summen for og .
Det samme programmet kan også skrives med while True og break, som avbryter løkka:
total = 1000
brukt = 0
n = 0
while True:
neste = 4 * (n + 1) + 1
if brukt + neste > total:
break
n = n + 1
brukt = brukt + neste
print(n, total - brukt)21 55Hva skriver programmet ut? Forklar hvorfor svaret ikke er 64.
x = 1
while x < 100:
x = 2 * x
print(x)Hva ønsker programmereren å finne ut? Hva forteller de to verdiene som skrives ut?
beløp = 10000
år = 0
while beløp < 20000:
beløp = beløp * 1.04
år = år + 1
print(år)
print(beløp)Siri arbeider med sekskanttall og har laget programmet nedenfor. Hvilke tall skriver programmet ut, og hvilken sammenheng har Siri brukt?
tall = 1
differanse = 5
while tall < 100:
print(tall)
tall = tall + differanse
differanse = differanse + 4Oppgaver i eksamensform
Figur 1 i et mønster har 4 fliser, figur 2 har 7 fliser og figur 3 har 10 fliser. Mønsteret fortsetter på samme måte.
Sett opp en algoritme for å skrive ut antall fliser i hver av de 25 første figurene.
Lag programmet.
Endre programmet slik at det finner hvor mange fliser som trengs til de 25 første figurene til sammen.
Figur i et mønster er et kvadrat som lages av klosser. Du har 5000 klosser og lager figur 1, figur 2, figur 3 og så videre så lenge du har nok klosser.
Lag et program som finner hvor mange figurer du kan lage, og hvor mange klosser du har igjen.
Det største kvadratet i en serie har side 12 cm. Hvert nytt kvadrat har en side som er 80 % av sida i det forrige.
Lag et program som regner ut det samlede arealet av de 10 første kvadratene.
Hvor mange kvadrater må vi ha for at det samlede arealet skal bli minst ?
Arealet av hvert kvadrat er en fast prosent av arealet av det forrige. Hvor mange prosent?
Vi ser på summene av partall: , , , og så videre.
Lag et program som regner ut og skriver ut .
Beskriv sammenhengen du ser, og vis at den gjelder for alle .
Programmet nedenfor går gjennom alle heltall opp til 20.
for a in range(1, 21):
for b in range(a, 21):
for c in range(b, 21):
if a**2 + b**2 == c**2:
print(a, b, c)a) Hva skriver programmet ut?
b) Hva kan programmet brukes til?
Oppsummering
- for i in range(a, b) går gjennom .
- En sum bygges opp med s = 0 før løkka og s = s + ledd inne i løkka.
- if, elif og else velger mellom alternativer; == sammenlikner.
- while gjentar så lenge betingelsen er sann. Kontroller svaret for og .
- En algoritme beskriver i ord hva programmet skal gjøre, i riktig rekkefølge.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.