Løkker med kodeordet for - Matematikk 2P-Y - NDLAHopp 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 .
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 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
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
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 saldolik startsaldo multiplisert med vekstfaktor opphøyd i aar.
Skriv til skjermen "Etter <aar> år har <startsaldo> kroner vokst til <saldo> kroner.".