Løkker med kodeordet for - Matematikk 1T-Y - HS - NDLA

Hopp til innhold
Verktøy og mal

Løkker med kodeordet for

En for-løkke kjører et visst antall ganger.

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  1+3,4100=1,034.

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

10 000 kroner·1,0345=11 819,60 kroner

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 lik startsaldo multiplisert med vekstfaktor opphøyd i aar.
    • Skriv til skjermen "Etter <aar> år har <startsaldo> kroner vokst til <saldo> kroner.".
    • La aar øke med 1.

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.

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 lik startsaldo multiplisert med vekstfaktor opphøyd i aar.
    • Skriv til skjermen "Etter <aar> år har <startsaldo> kroner vokst til <saldo> kroner.".
    • La aar øke med 1.

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 lik startsaldo multiplisert med vekstfaktor opphøyd i aar.
    • Skriv til skjermen "Etter <aar> år har <startsaldo> kroner vokst til <saldo> kroner.".
    • La aar øke med 1.

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 lik startsaldo multiplisert med vekstfaktor opphøyd i aar.
    • Skriv til skjermen "Etter <aar> år har <startsaldo> kroner vokst til <saldo> kroner.".
    • La aar øke med 1.
  • 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.")

Relatert innhold

Skrevet av Bjarne Skurdal.
Sist faglig oppdatert 10.06.2022