9.2 Løkker og vilkår
For- og while-løkker og if-setningar: følgje variablar gjennom eit program, forklare utskrifta og lage program for mønster og summar.
Gjenta og velje
Dei fleste programma på eksamen byggjer på to idear:
- ei løkke gjentek dei same linjene mange gonger
- eit vilkår (if) vel kva for linjer som skal køyrast
Med løkker kan vi rekne ut alle ledda i ei talfølgje, summere mange ledd og prøve oss fram til ein verdi passar.
for i in range(a, b):
...køyrer linjene med innrykk éin gong for kvar verdi i = a, a + 1, …, b - 1. Sluttverdien b er ikkje med.
- range(5) gir
- range(1, 6) gir
- range(0, 20, 5) gir (steg 5)
Linjene som høyrer til løkka, har innrykk (fire mellomrom).
Kva skriv programmet ut?
for i in range(1, 6):
print(i, i ** 2)i går gjennom . For kvar verdi blir i og skrivne ut.1 1
2 4
3 9
4 16
5 25Svar: Dei fem første kvadrattala, kvart ved sida av nummeret sitt.
Summere med ei løkke
For å summere mange ledd startar vi med s = 0 og legg til eitt ledd per runde i løkka. Variabelen s blir ofte kalla ein akkumulator.
Kva skriv 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 skriv ut
5050, summen .Kva skriv programmet ut?
for i in range(1, 6):
print(3 * i)Kva for verdiar går i gjennom i for i in …?
range(4)range(2, 7)range(0, 20, 5)range(10, 0, -3)Kva skriv programmet ut? Skriv summen som programmet reknar ut.
s = 0
for k in range(1, 5):
s = s + k ** 2
print(s)Skriv eit program som skriv ut og for .
Programmet skal rekne ut summen . Fyll inn det som manglar.
s = 0
for k in range(0, ___):
s = s + ___
print(s)Algoritmar for figurmønster
Ei vanleg eksamensoppgåve gir nokre figurar i eit mønster og ber om ein algoritme og eit program. Ein algoritme er ei presis skildring i ord av kva som skal gjerast, i rett rekkjefølgje.
Først finn vi ein formel for talet i figur . Deretter lèt vi ei løkke gå gjennom , rekne ut talet og eventuelt leggje det til ein sum.
Figur 1 har 2 prikkar, figur 2 har 6 prikkar og figur 3 har 12 prikkar. Figur er eit rektangel med rader og prikkar i kvar rad.
a) Set opp ein algoritme for å finne talet på prikkar i kvar av dei 15 første figurane og til saman.
b) Lag programmet.
a) Talet på prikkar i figur :
Kontroll: , ,
Algoritme:
- Set totalen lik 0.
- For kvar frå 1 til 15: rekn ut , skriv ut figurnummer og tal, og legg talet til totalen.
- Skriv ut totalen.
b)
# Figur n har n * (n + 1) prikkar
totalt = 0
for n in range(1, 16):
prikkar = n * (n + 1)
totalt = totalt + prikkar
print("Figur", n, ":",
prikkar, "prikkar")
print("Til saman:", totalt,
"prikkar")Figur 1 : 2 prikkar
Figur 2 : 6 prikkar
Figur 3 : 12 prikkar
Figur 4 : 20 prikkar
Figur 5 : 30 prikkar
Figur 6 : 42 prikkar
Figur 7 : 56 prikkar
Figur 8 : 72 prikkar
Figur 9 : 90 prikkar
Figur 10 : 110 prikkar
Figur 11 : 132 prikkar
Figur 12 : 156 prikkar
Figur 13 : 182 prikkar
Figur 14 : 210 prikkar
Figur 15 : 240 prikkar
Til saman: 1360 prikkarSvar: Programmet skriv ut talet på prikkar i kvar figur. Dei 15 første figurane har til saman 1360 prikkar.
Skriv eit program som reknar ut summen av dei 50 første oddetala . Samanlikn svaret med .
Vilkår
if vilkår:
# blir køyrt når vilkåret
# er sant
...
elif anna_vilkår:
# blir køyrt når den første
# er usann og denne er sann
...
else:
# blir køyrt elles
...| Python | Tyding |
|---|---|
== | er lik |
!= | er ikkje 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 eit partal. Legg merke til skilnaden på = (tilordning) og == (samanlikning).Kva skriv programmet ut?
for n in range(1, 7):
if n % 2 == 0:
print(n, "er eit partal")
else:
print(n, "er eit oddetal")Resten ved divisjon med 2 er 0 for partal og 1 for oddetal.
1 er eit oddetal
2 er eit partal
3 er eit oddetal
4 er eit partal
5 er eit oddetal
6 er eit partalSvar: For kvart tal frå 1 til 6 skriv programmet om talet er eit partal eller eit oddetal.
Kva kan programmet brukast til, og kva skriv 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",
"rettvinkla")
else:
print("Trekanten er",
"ikkje rettvinkla")Vilkåret sjekkar setninga til Pytagoras med kvar av dei tre sidene som hypotenus.
, så den andre delen av vilkåret er sann.
Trekanten er rettvinklaSvar: Programmet avgjer om tre sidelengder gir ein rettvinkla trekant. For sidene 5, 13 og 12 skriv det ut at trekanten er rettvinkla.
Programmet nedanfor er gitt.
x = 7
if x % 3 == 0:
print("deleleg med 3")
elif x % 2 == 0:
print("partal")
else:
print("verken eller")Kva skriv programmet ut?
Kva blir skrive ut dersom vi byter ut 7 med 12 og med 8?
while vilkår:
...gjentek linjene med innrykk så lenge vilkåret er sant. Vilkåret blir sjekka før kvar runde. Vi bruker while når vi ikkje veit på førehand kor mange rundar som trengst, til dømes når vi skal finne når ein sum passerer ei grense.
Noko inne i løkka må endre vilkåret, elles stoppar programmet aldri.
Det første linjestykket i ein figur er 80 cm. Kvart nytt linjestykke er 85 % av det førre. Kor mange linjestykke må vi ha for at summen av lengdene skal bli minst 4 meter?
4 m = 400 cm. Vekstfaktoren er 0,85.
# lengda av det første
# linjestykket (cm)
lengde = 80
summen = 0
# talet på linjestykke
n = 0
while summen < 400:
n = n + 1
summen = summen + lengde
lengde = lengde * 0.85
print(n, summen)9 409.804295315625Kontroll med 8 linjestykke:
print(sum(80 * 0.85 ** k
for k in range(8)))388.00505331249997Svar: Vi må ha 9 linjestykke. Då er summen om lag 409,8 cm.
Figur i eit mønster blir laga av fyrstikker. Vi har 1000 fyrstikker. Kor mange heile figurar kan vi lage, og kor mange fyrstikker får vi igjen?
Løkka lagar neste figur berre dersom det er nok fyrstikker til han.
total = 1000 # fyrstikker vi har
brukt = 0
# talet på ferdige figurar
n = 0
while (brukt + 4 * (n + 1) + 1
<= total):
n = n + 1
brukt = brukt + 4 * n + 1
print("Talet på figurar:", n)
print("Fyrstikker igjen:",
total - brukt)Talet på figurar: 21
Fyrstikker igjen: 55Kontroll: for 21 figurar. Figur 22 treng 89 fyrstikker, og .
Svar: Vi kan lage 21 figurar og får 55 fyrstikker igjen.
Den vanlegaste feilen med while er å svare éin for mykje eller éin for lite. Spør deg sjølv:
- Blir grensa sjekka før eller etter at neste ledd blir lagt til?
- Er det verdien før eller etter siste runde som blir skriven ut?
Kontroller alltid svaret ved å rekne ut summen for og .
Det same programmet kan også skrivast med while True og break, som avbryt 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 55Kva skriv programmet ut? Forklar kvifor svaret ikkje er 64.
x = 1
while x < 100:
x = 2 * x
print(x)Kva ønskjer programmereren å finne ut? Kva fortel dei to verdiane som blir skrivne 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 sekskanttal og har laga programmet nedanfor. Kva for tal skriv programmet ut, og kva for ein samanheng har Siri brukt?
tall = 1
differanse = 5
while tall < 100:
print(tall)
tall = tall + differanse
differanse = differanse + 4Oppgåver i eksamensform
Figur 1 i eit mønster har 4 fliser, figur 2 har 7 fliser og figur 3 har 10 fliser. Mønsteret held fram på same måten.
Set opp ein algoritme for å skrive ut talet på fliser i kvar av dei 25 første figurane.
Lag programmet.
Endre programmet slik at det finn kor mange fliser som trengst til dei 25 første figurane til saman.
Figur i eit mønster er eit kvadrat som blir laga av klossar. Du har 5000 klossar og lagar figur 1, figur 2, figur 3 og så vidare så lenge du har nok klossar.
Lag eit program som finn kor mange figurar du kan lage, og kor mange klossar du har igjen.
Det største kvadratet i ein serie har side 12 cm. Kvart nytt kvadrat har ei side som er 80 % av sida i det førre.
Lag eit program som reknar ut det samla arealet av dei 10 første kvadrata.
Kor mange kvadrat må vi ha for at det samla arealet skal bli minst ?
Arealet av kvart kvadrat er ein fast prosent av arealet av det førre. Kor mange prosent?
Vi ser på summane av partal: , , , og så vidare.
Lag eit program som reknar ut og skriv ut .
Skildre samanhengen du ser, og vis at han gjeld for alle .
Programmet nedanfor går gjennom alle heiltal 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) Kva skriv programmet ut?
b) Kva kan programmet brukast til?
Oppsummering
- for i in range(a, b) går gjennom .
- Ein sum blir bygd opp med s = 0 før løkka og s = s + ledd inne i løkka.
- if, elif og else vel mellom alternativ; == samanliknar.
- while gjentek så lenge vilkåret er sant. Kontroller svaret for og .
- Ein algoritme skildrar i ord kva programmet skal gjere, i rett rekkjefølgje.
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.