6.6 Skrive og endre program
Sette opp og endre små Python-program som regner ut sparing, nedbetaling, likningssystemer og verdier i en modell.
Fra problem til program
Når du skal skrive et program selv, går du gjennom de samme spørsmålene hver gang:
- Hvilke størrelser inngår, og hva er startverdiene? Gi hver størrelse et variabelnavn.
- Hva skjer i hvert steg (hvert år, hver måned, hver figur)? Det blir linjene inne i løkka.
- Når skal programmet stoppe? Et fast antall steg gir for … in range(…). «Til et mål er nådd» gir while.
- Hva skal skrives ut? Ofte antall steg og verdien til slutt.
Test programmet med tall du kan regne ut for hånd, for eksempel bare de to første årene.
Mia setter inn 24 000 kr på en konto i starten av hvert år. Renten er 4 % per år. Lag et program som finner hvor mange år det tar før hun har minst 300 000 kr.
Størrelser: beløp (start 0), innskudd 24 000, vekstfaktor 1,04, antall år (start 0).
Hvert år: legg til innskuddet, gang med 1,04.
Stopp når beløpet er minst 300 000: while beløp < 300000.
# på kontoen ved start
beløp = 0
# settes inn hvert år
innskudd = 24000
# 4 % rente
vf = 1.04
år = 0
while beløp < 300000:
beløp = (beløp + innskudd) * vf
år = år + 1
print(år, round(beløp))11 336619Test for to år:
beløp = 0
for år in range(2):
beløp = (beløp + 24000) * 1.04
print(beløp)50918.4Svar: Det tar 11 år. Da har Mia omtrent 336 619 kr.
Programmet regner ut ny pris etter rabatt. Endre programmet slik at det regner ut prisen på en vare til 1299 kr med 30 % rabatt.
pris = 800
rabatt = 25
ny_pris = pris * (1 - rabatt / 100)
print(round(ny_pris, 2))Fyll inn det som mangler, slik at programmet skriver ut gjennomsnittet av tallene i lista.
L = [4, 6, 3, 5, 2]
gjennomsnitt = ___ / ___
print(gjennomsnitt)Lag et program som regner ut hvor mye 20 000 kr har vokst til etter 8 år med 3,5 % rente per år. Kontroller svaret med en formel.
En bil koster 300 000 kr og taper 12 % av verdien hvert år. Lag et program som skriver ut en tabell med verdien etter hvert av de 6 første årene.
Endre et program
Ofte får du et ferdig program og skal endre det til en ny situasjon. Finn ut hvilke linjer som beskriver situasjonen (tall og formler), og hvilke som beskriver metoden (løkka og testen). Vanligvis endrer du bare situasjonen — men sjekk at metoden fortsatt dekker alle svarene, for eksempel at range er stor nok.
skal løses med programmet nedenfor.
def f(x):
return 2 * x + 3
def g(x):
return x ** 2
for x in range(-10, 11):
if f(x) == g(x):
print("x =", x,
"og y =", f(x))Forklar strategien, og finn løsningene.
Begge likningene er skrevet som , og høyresidene er lagt inn som funksjonene f og g. Programmet prøver alle heltall fra til og skriver ut og når .
x = -1 og y = 1
x = 3 og y = 9Kontroll: og
Svar: Løsningene er og . Metoden finner bare løsninger som er heltall og ligger i det området range dekker.
Hvilke endringer må Ole gjøre i programmet i eksempel 2?
Sara skal løse likningssystemet og og bruker programmet nedenfor.
def f(x):
return 2 * x + 20
def g(x):
return x ** 2 - x - 8
for x in range(-5, 5):
if f(x) == g(x):
print("x =", x,
"og y =", f(x))Hva skriver programmet ut?
Vis ved regning at likningssystemet har to løsninger. Hvorfor finner ikke programmet begge?
Endre programmet slik at det finner begge løsningene.
50 000 kr settes på en konto med 6 % rente per år. Lag et program som finner hvor mange år det tar før beløpet er doblet.
Nedbetalingsplan
For et annuitetslån er terminbeløpet det samme hver termin. For hver termin gjelder
- renter = restlån · rentefot : 100
- avdrag = terminbeløp − renter
- nytt restlån = restlån − avdrag
En while-løkke som går så lenge restlånet er større enn 0, lager hele planen. Den siste terminen blir som regel mindre enn de andre.
Et lån på 80 000 kr har 4 % rente per termin og et terminbeløp på 18 000 kr. Lag et program som skriver ut nedbetalingsplanen, og finn hvor mange terminer det tar å betale ned lånet.
restlån = 80000
terminbeløp = 18000
rentefot = 4
termin = 0
print("Termin", " Renter",
" Avdrag", " Restlån")
while restlån > 0:
termin = termin + 1
renter = (restlån * rentefot
/ 100)
avdrag = terminbeløp - renter
restlån = restlån - avdrag
print(termin, round(renter, 2),
round(avdrag, 2),
round(restlån, 2))Termin Renter Avdrag Restlån
1 3200.0 14800.0 65200.0
2 2608.0 15392.0 49808.0
3 1992.32 16007.68 33800.32
4 1352.01 16647.99 17152.33
5 686.09 17313.91 -161.57Restlånet blir negativt i termin 5. Det siste terminbeløpet er derfor kr.
Svar: Lånet er nedbetalt etter 5 terminer. Den siste terminen er på 17 838,42 kr.
Programmet nedenfor skal skrive ut nedbetalingsplanen for et annuitetslån på 40 000 kr med 3 % rente per termin og terminbeløp 9000 kr. Foreløpig skriver det bare ut nuller.
restlån = 40000
terminbeløp = 9000
rentefot = 3
for termin in range(1, 4):
renter = 0
avdrag = 0
restlån = 0
print(termin, renter,
avdrag, restlån)Sett inn formler i stedet for 0, og gjør endringer slik at hele nedbetalingsplanen skrives ut.
Hvor mange terminer tar det å betale ned lånet, og hvor stor blir den siste terminen?
Svært mange ledd
Når hvert ledd er en fast prosent mindre enn det forrige, blir leddene til slutt så små at de ikke endrer summen. Et program kan legge sammen ledd så lenge de er større enn en liten grense, for eksempel 0,0001. Summen programmet skriver ut, er da summen av «alle» leddene med god nøyaktighet.
Det største kvadratet i en serie har sidekant 15 cm. Hvert nytt kvadrat har 25 % kortere sidekant enn det forrige. Lag et program som finner den samlede omkretsen av alle kvadratene.
Omkretsen av et kvadrat er . Vekstfaktoren for sidekanten er .
# sidekant i det største
# kvadratet (cm)
s = 15
# samlet omkrets
total = 0
while s > 0.0001:
total = total + 4 * s
s = s * 0.75
print("Samlet omkrets:",
round(total, 1), "cm")Samlet omkrets: 240.0 cmSvar: Den samlede omkretsen er 240 cm.
Vi endrer programmet i eksempel 4 slik at både sidekanten i det største kvadratet og prosenten kan velges:
s = 10
p = 20
total = 0
while s > 0.0001:
total = total + 4 * s
s = s * (1 - p / 100)
print(round(total, 1))Ole påstår at den samlede omkretsen er .
Hva skriver programmet ut? Stemmer det med Oles formel for og ?
Undersøk formelen for flere verdier av og med et program. Kan formelen gjelde?
Oppgaver i eksamensform
En pasient får 400 mg av et legemiddel. Hver time skilles 18 % av legemiddelet i kroppen ut. Lag et program som finner hvor mange hele timer det tar før det er mindre enn 50 mg igjen i kroppen.
Jonas sparer 1500 kr ved slutten av hver måned på en konto med 0,4 % rente per måned. Lag et program som finner hvor mange måneder det tar før han har minst 50 000 kr.
Et teater regner med at det selger billetter når billettprisen er kroner, for . Inntekten er pris ganger antall solgte billetter.
Lag et program som prøver alle hele kronebeløp fra 0 til 40 og finner prisen som gir størst inntekt.
Hvor mange billetter selges da?
Oppsummering
- Bestem størrelser og startverdier, hva som skjer i hvert steg, når programmet skal stoppe og hva som skal skrives ut.
- Fast antall steg: for … in range(…). Til et mål er nådd: while.
- Når du endrer et program: endre tall og formler, og sjekk at range og stoppbetingelsen fortsatt passer.
- Test alltid med tall du kan regne ut for hånd.
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.