Løkker med kodeordet for
I et dataprogram skrevet i Python kan en for-løkke minne mye om en while-løkke, men der while-løkken kjører helt til et vilkår er oppfylt uavhengig av hvor mange ganger løkken blir kjørt, vil en for-løkke kjøre et fastsatt antall ganger.
Eksempel
Vi skal sette 10 000 kroner inn i banken til en rente på 3,4 prosent. Vi ønsker å finne ut hva beløpet vokser til hvert år framover i ti år. Vi ønsker oss en utskrift der det på de to første linjene står
"Etter 1 år har 10 000 kroner vokst til <kroner>."
"Etter 2 år har 10 000 kroner vokst til <kroner>."
Slik skal programmet fortsette til vi har kommet til det tiende året. Den siste linjen skal se slik ut:
"Etter ti år har 10 000 kroner vokst til <kroner>."
Der det står "<kroner>", skal programmet regne ut hva pengene har vokst til etter 1 år, 2 år og så videre til og med etter ti år.
Når vi skal gjøre slike utregninger, er det kjekt å bruke vekstfaktoren.
Oppgave – utregning
Hva blir vekstfaktoren når renten er 3,4 prosent?
Løsningsforslag
Vekstfaktoren blir .
Oppgave – utregning
Hvor mye har 10 000 kroner vokst til etter fem år når renten er 3,4 prosent?
Løsningsforslag
Her må vi multiplisere 10 000 kroner med vekstfaktoren 1,034 opphøyd i 5. 10 000 kroner har vokst til
Vi sier gjerne at saldoen er 11 819,60 kr.
Oppgave – algoritme
Skriv algoritmen til et program som kan lage utskriftene vi ønsker.
Løsningsforslag
- Sett variabelen
startsaldo
lik 10 000. - Sett variabelen
vekstfaktor
lik 1,034. - Sett variabelen
aar
lik 1. Gjør ti ganger:
- Sett variabelen
saldo
likstartsaldo
multiplisert medvekstfaktor
opphøyd iaar
. - Skriv til skjermen "Etter <
aar
> år har <startsaldo
> kroner vokst til <saldo
> kroner.". - La
aar
øke med 1.
- Sett variabelen
Legg merke til at for hver gang de tre siste instruksjonene blir kjørt, så har tallet på år blitt 1 større.
Med "<aar
>" mener vi verdien til variabelen aar
.
Løkker med kodeordet for
En for-løkke som kjører ti ganger, kan hjelpe oss med å generere denne utskriften slik at vi slipper å lage ti setninger med funksjonen print(). For å få til dette, bruker vi kodeordene for
og in
sammen med funksjonen range() slik som nedenfor.
for x in range(1, 11):
x
er en fritt valgt variabel. Den får gradvis økende verdi for hver gang for-løkken blir kjørt og kan derfor brukes til utregninger og utskrifter der noe skal endres fra runde til runde. Det er range()-funksjonen som styrer hvilke verdier variabelen x
kan ha.
Spørsmål – kode
Kan du gjette hvorfor vi må skrive range(1, 11)
og ikke range(1, 10)
, som man kanskje skulle tro når vi ønsker at løkken skal gå ti ganger?
Svar
range()-funksjonen er slik at vi starter på tallet før kommaet (1) og slutter på én mindre enn tallet etter kommaet. Tallet før kommaet er altså med, men ikke tallet etter. For å få tallene 1, 2, 3, 4, 5, 6, 7, 8, 9 og 10, må vi derfor skrive range(1, 11)
. En "range" er fra og med det første tallet til (men ikke med) det andre tallet.
Nedenfor kan du kjøre et program som passer til algoritmen over og skriver ut på skjermen disse ti utskriftene som vi ønsker. (NB: Det kan ta litt tid fra du trykker på avspillingsknappen til programmet blir kjørt.)
I koden over har vi fordelt teksten som skal skrives til skjermen i to linjer for at det skal være lettere å se hva som står der.
Oppgave – kode
Forklar hva som skjer med variabelen aar
i for-løkken.
Forklaring
Vi ser av den første utskriften at variabelen aar
har verdien 1 den første gangen for-løkken blir kjørt. Årsaken til det er at det første argumentet til range()-funksjonen er 1. Deretter sørger range()-funksjonen for at verdien til aar
øker med 1 for hver gang løkken blir kjørt. For-løkken går ti ganger siden det andre argumentet til range()-funksjonen er 11.
Husk at range()-funksjonen er slik at det første tallet (her: 1) er med, ikke det siste (her: 11).
Oppgave – kode
Endre {saldo}
på siste linje i programmet til {saldo:.2f}
. Hva skjer med utskriften, og hva betyr 2-tallet inne i klammeparentesen, tror du?
Forklaring
Saldoene som blir skrevet ut, får nå ikke mer enn to desimaler, som er vanlig når tallet er en sum i kroner.
Koden "2f
" spesifiserer hvor mange desimaler variabelen saldo
får i utskriften.
![Laptop og eple. Foto.](https://api.ndla.no/image-api/raw/20121003-151045-is_copy.jpg?width=1024&cropStartX=99.81983104785839&cropEndX=0.6589918870192307&cropStartY=99.89075090900158&cropEndY=20.016537072523587)
Pythonkode å lære seg
Vis innhold
Løkker med for og "in range()"-oppsett
Eksempel:
for x in range(1, 5):
print(f"Dette er kjøring nr. {x} av for-løkken.")
Dette vil gi følgende utskrift til skjermen:
Dette er kjøring nr. 1 av for-løkken.
Dette er kjøring nr. 2 av for-løkken.
Dette er kjøring nr. 3 av for-løkken.
Dette er kjøring nr. 4 av for-løkken.
Merk at range()-funksjonen starter på startverdien, men tar ikke med sluttverdien. Merk også at de kodelinjene som hører til for-løkken, er rykket inn slik som for while-løkker og if-setninger.
Eksempel på for-løkke med trinn på 2 i staden for 1:
for x in range(1, 5, 2):
print(f"Dette er kjøring nr. {x} av for-løkken.")
Dette vil gi følgende utskrift til skjermen:
Dette er kjøring nr. 1 av for-løkken.
Dette er kjøring nr. 3 av for-løkken.
Dersom vi legger til et tredje argument til range()-funksjonen (her: tallet 2), kan vi styre hvor stort hopp variabelen i for-løkken skal gjøre for hver gang løkken blir kjørt. Vi får bare to linjer siden det andre argumentet til range()-funksjonen er 5, som betyr at den største mulige verdien x
kan ha, er 4. Verdien 4 kan ikke x
ha når det starter på 1 og går i trinn på 2.
Formatering
Eksempel:
print(f"Desimaltallet {3.14159:.3f} har tre desimaler.")
Dette vil gi utskriften
Desimaltallet 3.142 har tre desimaler.
Koden "3f
" betyr tre desimaler. Husk å skrive kolon og punktum foran formatkoden.
Aktiviteter
a) Algoritme
Programmet skal endres slik at slik at brukeren kan skrive inn en vilkårlig startsaldo. Skriv om på algoritmen slik at dette blir mulig, og pass på å få med litt forklarende tekst.
Løsningsforslag
- Skriv til skjermen "Dette programmet regner ut hva en startsaldo vokser til etter ett, to og opp til og med ti år med en rente på 3,4 prosent per år.".
- Skriv til skjermen "Skriv inn den summen du ønsker å sette inn:".
- Ta imot tallet fra brukeren, og sett det lik variabelen
startsaldo
. - Sett variabelen
vekstfaktor
lik 1,034. - Sett variabelen
aar
lik 1. Gjør ti ganger:
- Sett variabelen
saldo
likstartsaldo
multiplisert medvekstfaktor
opphøyd iaar
. - Skriv til skjermen "Etter <
aar
> år har <startsaldo
> kroner vokst til <saldo
> kroner.". - La
aar
øke med 1.
- Sett variabelen
Notasjonen "<aar
>" betyr at her skal innholdet av variabelen aar
settes inn.
b) Kode
Skriv koden til programmet.
Løsningsforslag
python
1print("Dette programmet regner ut hva en startsaldo "
2"vokser til etter ett, to og opp til og med ti år "
3"med en rente på 3,4 prosent per år.")
4startsaldo = float(input("Skriv inn den summen du ønsker å sette inn:"))
5vekstfaktor = 1.034
6
7for aar in range(1, 11):
8 saldo = startsaldo * vekstfaktor**aar
9 print(f"Etter {aar} år har {startsaldo:.2f} kroner "
10 f"vokst til {saldo:.2f} kroner.")
c) Algoritme
Programmet i oppgaven over skal endres slik at brukeren også kan skrive inn hvor mange år pengene skal stå inne. Skriv om på algoritmen slik at dette blir mulig.
Løsningsforslag
- Skriv til skjermen "Dette programmet regner ut hva en startsaldo vokser til etter ett, to og opp til og med et valgt antall år med en rente på 3,4 prosent per år.".
- Skriv til skjermen "Skriv inn den summen du ønsker å sette inn:".
- Ta imot tallet fra brukeren, og sett det lik variabelen
startsaldo
. - Skriv til skjermen "Skriv inn hvor mange år pengene skal stå totalt:".
- Ta imot antall år fra brukeren, og sett det lik variabelen
maksaar
. - Sett variabelen
vekstfaktor
lik 1,034. - Sett variabelen
aar
lik 1. Gjør <
maksaar
> ganger:- Sett variabelen
saldo
likstartsaldo
multiplisert med vekstfaktor opphøyd iaar
. - Skriv til skjermen "Etter <
aar
> år har <startsaldo
> kroner vokst til <saldo
> kroner.". - La
aar
øke med 1.
- Sett variabelen
d) Kode
Skriv koden til programmet.
Løsningsforslag
python
1print("Dette programmet regner ut hva en startsaldo "
2 "vokser til etter ett, to og opp til og med et valgt antall år "
3 "med en rente på 3,4 prosent per år.")
4startsaldo = float(input("Skriv inn den summen "
5 "du ønsker å sette inn:"))
6maksaar = int(input("Skriv inn hvor mange år "
7 "pengene skal stå totalt:"))
8vekstfaktor = 1.034
9
10for aar in range(1, maksaar + 1):
11 saldo = startsaldo * vekstfaktor**aar
12 print(f"Etter {aar} år har {startsaldo:.2f} kroner "
13 f"vokst til {saldo:.2f} kroner.")
e) Algoritme
Programmet i oppgaven over skal endres slik at brukeren i tillegg kan skrive inn hva renten skal være. Skriv om på algoritmen slik at dette blir mulig.
Løsningsforslag
- Skriv til skjermen "Dette programmet regner ut hva en startsaldo vokser til etter ett, to og opp til og med ti år med en valgfri rente per år.".
- Skriv til skjermen "Skriv inn den summen du ønsker å sette inn:".
- Ta imot tallet fra brukeren, og sett det lik variabelen
startsaldo
. - Skriv til skjermen "Skriv inn hvor mange år pengene skal stå totalt:".
- Ta imot antall år fra brukeren, og sett det lik variabelen
maksaar
. - Skriv til skjermen "Skriv inn hva renten skal være:".
- Ta imot tallet fra brukeren, og sett det lik variabelen
rente
. - Sett variabelen
vekstfaktor
lik 1 + rente/100. - Sett variabelen
aar
lik 1. Gjør <
maksaar
> ganger:- Sett variabelen
saldo
likstartsaldo
multiplisert medvekstfaktor
opphøyd iaar
. - Skriv til skjermen "Etter <
aar
> år har <startsaldo
> kroner vokst til <saldo
> kroner.". - La
aar
øke med 1.
- Sett variabelen
- Skriv til skjermen "Renten er <
rente
> prosent.".
f) Kode
Løsningsforslag
python
1print("Dette programmet regner ut hva en startsaldo "
2 "vokser til etter ett, to og opp til og med et valgt antall år "
3 "med en valgfri rente per år.")
4startsaldo = float(input("Skriv inn den summen "
5 "du ønsker å sette inn:"))
6maksaar = int(input("Skriv inn hvor mange år "
7 "summen skal stå totalt:"))
8rente = float(input("Skriv inn hva renten skal være:"))
9vekstfaktor = 1 + rente/100
10
11for aar in range(1, maksaar + 1):
12 saldo = startsaldo * vekstfaktor**aar
13 print(f"Etter {aar} år har {startsaldo:.2f} kroner "
14 f"vokst til {saldo:.2f} kroner.")
15
16print(f"Renten er {rente} prosent.")