6.6 Skrive og endre program
Setje opp og endre små Python-program som reknar ut sparing, nedbetaling, likningssystem og verdiar i ein modell.
Frå problem til program
Når du skal skrive eit program sjølv, går du gjennom dei same spørsmåla kvar gong:
- Kva for storleikar inngår, og kva er startverdiane? Gi kvar storleik eit variabelnamn.
- Kva skjer i kvart steg (kvart år, kvar månad, kvar figur)? Det blir linjene inne i løkka.
- Når skal programmet stoppe? Eit fast tal på steg gir for … in range(…). «Til eit mål er nådd» gir while.
- Kva skal skrivast ut? Ofte talet på steg og verdien til slutt.
Test programmet med tal du kan rekne ut for hand, til dømes berre dei to første åra.
Mia set inn 24 000 kr på ein konto i starten av kvart år. Renta er 4 % per år. Lag eit program som finn kor mange år det tek før ho har minst 300 000 kr.
Storleikar: beløp (start 0), innskot 24 000, vekstfaktor 1,04, talet på år (start 0).
Kvart år: legg til innskotet, gong med 1,04.
Stopp når beløpet er minst 300 000: while beløp < 300000.
# på kontoen ved start
beløp = 0
# blir sett inn kvart år
innskot = 24000
# 4 % rente
vf = 1.04
år = 0
while beløp < 300000:
beløp = (beløp + innskot) * 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 tek 11 år. Då har Mia om lag 336 619 kr.
Programmet reknar ut ny pris etter rabatt. Endre programmet slik at det reknar ut prisen på ei 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 manglar, slik at programmet skriv ut gjennomsnittet av tala i lista.
L = [4, 6, 3, 5, 2]
gjennomsnitt = ___ / ___
print(gjennomsnitt)Lag eit program som reknar ut kor mykje 20 000 kr har vakse til etter 8 år med 3,5 % rente per år. Kontroller svaret med ein formel.
Ein bil kostar 300 000 kr og tapar 12 % av verdien kvart år. Lag eit program som skriv ut ein tabell med verdien etter kvart av dei 6 første åra.
Endre eit program
Ofte får du eit ferdig program og skal endre det til ein ny situasjon. Finn ut kva for linjer som skildrar situasjonen (tal og formlar), og kva for linjer som skildrar metoden (løkka og testen). Vanlegvis endrar du berre situasjonen — men sjekk at metoden framleis dekkjer alle svara, til dømes at range er stor nok.
skal løysast med programmet nedanfor.
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øysingane.
Begge likningane er skrivne som , og høgresidene er lagde inn som funksjonane f og g. Programmet prøver alle heiltal frå til og skriv ut og når .
x = -1 og y = 1
x = 3 og y = 9Kontroll: og
Svar: Løysingane er og . Metoden finn berre løysingar som er heiltal og ligg i det området range dekkjer.
Kva for endringar må Ole gjere i programmet i døme 2?
Sara skal løyse likningssystemet og og bruker programmet nedanfor.
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))Kva skriv programmet ut?
Vis ved rekning at likningssystemet har to løysingar. Kvifor finn ikkje programmet begge?
Endre programmet slik at det finn begge løysingane.
50 000 kr blir sette på ein konto med 6 % rente per år. Lag eit program som finn kor mange år det tek før beløpet er dobla.
Nedbetalingsplan
For eit annuitetslån er terminbeløpet det same kvar termin. For kvar termin gjeld
- renter = restlån · rentefot : 100
- avdrag = terminbeløp − renter
- nytt restlån = restlån − avdrag
Ei while-løkke som går så lenge restlånet er større enn 0, lagar heile planen. Den siste terminen blir som regel mindre enn dei andre.
Eit lån på 80 000 kr har 4 % rente per termin og eit terminbeløp på 18 000 kr. Lag eit program som skriv ut nedbetalingsplanen, og finn kor mange terminar det tek å 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 difor kr.
Svar: Lånet er nedbetalt etter 5 terminar. Den siste terminen er på 17 838,42 kr.
Programmet nedanfor skal skrive ut nedbetalingsplanen for eit annuitetslån på 40 000 kr med 3 % rente per termin og terminbeløp 9000 kr. Førebels skriv det berre ut nullar.
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)Set inn formlar i staden for 0, og gjer endringar slik at heile nedbetalingsplanen blir skriven ut.
Kor mange terminar tek det å betale ned lånet, og kor stor blir den siste terminen?
Svært mange ledd
Når kvart ledd er ein fast prosent mindre enn det førre, blir ledda til slutt så små at dei ikkje endrar summen. Eit program kan leggje saman ledd så lenge dei er større enn ei lita grense, til dømes 0,0001. Summen programmet skriv ut, er då summen av «alle» ledda med god nøyaktigheit.
Det største kvadratet i ein serie har sidekant 15 cm. Kvart nytt kvadrat har 25 % kortare sidekant enn det førre. Lag eit program som finn den samla omkrinsen av alle kvadrata.
Omkrinsen av eit kvadrat er . Vekstfaktoren for sidekanten er .
# sidekant i det største
# kvadratet (cm)
s = 15
# samla omkrins
total = 0
while s > 0.0001:
total = total + 4 * s
s = s * 0.75
print("Samla omkrins:",
round(total, 1), "cm")Samla omkrins: 240.0 cmSvar: Den samla omkrinsen er 240 cm.
Vi endrar programmet i døme 4 slik at både sidekanten i det største kvadratet og prosenten kan veljast:
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 samla omkrinsen er .
Kva skriv programmet ut? Stemmer det med formelen til Ole for og ?
Undersøk formelen for fleire verdiar av og med eit program. Kan formelen gjelde?
Oppgåver i eksamensform
Ein pasient får 400 mg av eit legemiddel. Kvar time blir 18 % av legemiddelet i kroppen skilt ut. Lag eit program som finn kor mange heile timar det tek før det er mindre enn 50 mg igjen i kroppen.
Jonas sparer 1500 kr ved slutten av kvar månad på ein konto med 0,4 % rente per månad. Lag eit program som finn kor mange månader det tek før han har minst 50 000 kr.
Eit teater reknar med at det sel billettar når billettprisen er kroner, for . Inntekta er pris gonger talet på selde billettar.
Lag eit program som prøver alle heile kronebeløp frå 0 til 40 og finn prisen som gir størst inntekt.
Kor mange billettar blir selde då?
Oppsummering
- Bestem storleikar og startverdiar, kva som skjer i kvart steg, når programmet skal stoppe og kva som skal skrivast ut.
- Fast tal på steg: for … in range(…). Til eit mål er nådd: while.
- Når du endrar eit program: endre tal og formlar, og sjekk at range og stoppvilkåret framleis passar.
- Test alltid med tal du kan rekne ut for hand.
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.