Lykkjer med kodeordet for - Konstruksjons- og styringsteknikk (TP-TIP vg1) - NDLAHopp til innhald
Verktøy og mal
Lykkjer med kodeordet for
Ei for-lykkje køyrer eit visst tal gonger.
I eit dataprogram skrive i Python kan ei for-lykkje minne mykje om ei while-lykkje, men der while-lykkja køyrer heilt til eit vilkår er oppfylt uavhengig av kor mange gonger lykkja blir køyrd, vil ei for-lykkje køyre eit fastsett tal gonger.
Eksempel
Vi skal setje 10 000 kroner inn i banken til ei rente på 3,4 prosent. Vi ønskjer å finne ut kva beløpet veks til kvart år framover i ti år. Vi ønskjer oss ei utskrift der det på dei to første linjene står
"Etter 1 år har 10 000 kroner vakse til <kroner>." "Etter 2 år har 10 000 kroner vakse til <kroner>."
Slik skal programmet halde fram til vi har kome til det tiande året. Den siste linja skal sjå slik ut:
"Etter ti år har 10 000 kroner vakse til <kroner>."
Der det står "<kroner>", skal programmet rekne ut kva pengane har vakse til etter 1 år, 2 år og så vidare til og med etter ti år.
Når vi skal gjere slike utrekningar, er det kjekt å bruke vekstfaktoren.
Oppgåve – utrekning
Kva blir vekstfaktoren når renta er 3,4 prosent?
Løysingsforslag
Vekstfaktoren blir .
Oppgåve – utrekning
Kor mykje har 10 000 kroner vakse til etter fem år når renta er 3,4 prosent?
Løysingsforslag
Her må vi multiplisere 10 000 kroner med vekstfaktoren 1,034 opphøgd i 5. 10 000 kroner har vakse til
Vi seier gjerne at saldoen er 11 819,60 kr.
Oppgåve – algoritme
Skriv algoritmen til eit program som kan lage utskriftene vi ønskjer.
Løysingsforslag
Set variabelen startsaldo lik 10 000.
Set variabelen vekstfaktor lik 1,034.
Set variabelen aar lik 1.
Gjer ti gonger:
Set variabelen saldo lik startsaldo multiplisert med vekstfaktor opphøgd i aar.
Skriv til skjermen "Etter <aar> år har <startsaldo> kroner vakse til <saldo> kroner.".
La aar auke med 1.
Legg merke til at for kvar gong dei tre siste instruksjonane blir køyrde, så har talet på år vorte 1 større.
Med "<aar>" meiner vi verdien til variabelen aar.
Lykkjer med kodeordet for
Ei for-lykkje som køyrer ti gonger, kan hjelpe oss med å generere denne utskrifta slik at vi slepp å lage ti setningar med funksjonen print(). For å få til dette, bruker vi kodeorda for og in saman med funksjonen range() slik som nedanfor.
for x in range(1, 11):
x er ein fritt vald variabel. Han får gradvis aukande verdi for kvar gong for-lykkja blir køyrd og kan derfor brukast til utrekningar og utskrifter der noko skal endrast frå runde til runde. Det er range()-funksjonen som styrer kva verdiar variabelen x kan ha.
Spørsmål – kode
Kan du gjette kvifor vi må skrive range(1, 11) og ikkje range(1, 10), som ein kanskje skulle tru når vi ønskjer at lykkja skal gå ti gonger?
Svar
range()-funksjonen er slik at vi startar på talet før kommaet (1) og sluttar på éin mindre enn talet etter kommaet. Talet før kommaet er altså med, men ikkje talet etter. For å få tala 1, 2, 3, 4, 5, 6, 7, 8, 9 og 10, må vi derfor skrive range(1, 11). Ein "range" er frå og med det første talet til (men ikkje med) det andre talet.
Nedanfor kan du køyre eit program som passar til algoritmen over og skriv ut på skjermen desse ti utskriftene som vi ønskjer. (NB: Det kan ta litt tid frå du trykkjer på avspelingsknappen til programmet blir køyrt.)
I koden over har vi fordelt teksten som skal skrivast til skjermen i to linjer for at det skal vere lettare å sjå kva som står der.
Oppgåve – kode
Forklar kva som skjer med variabelen aar i for-lykkja.
Forklaring
Vi ser av den første utskrifta at variabelen aar har verdien 1 den første gongen for-lykkja blir køyrd. Årsaka til det er at det første argumentet til range()-funksjonen er 1. Deretter sørgjer range()-funksjonen for at verdien til aar aukar med 1 for kvar gong lykkja blir køyrd. For-lykkja går ti gonger sidan det andre argumentet til range()-funksjonen er 11.
Hugs at range()-funksjonen er slik at det første talet (her: 1) er med, ikkje det siste (her: 11).
Oppgåve – kode
Endre {saldo} på siste linje i programmet til {saldo:.2f}. Kva skjer med utskrifta, og kva betyr 2-talet inne i klammeparentesen, trur du?
Forklaring
Summane som blir skrive ut, får no ikkje meir enn to desimalar, som er vanleg når talet er ein sum i kroner.
Koden "2f" spesifiserer kor mange desimalar variabelen saldo får i utskrifta.
Pythonkode å lære seg
Vis innhald
Lykkjer med for og "in range()"-oppsett
Eksempel:
for x in range(1, 5): print(f"Dette er køyring nr. {x} av for-lykkja.")
Dette vil gi følgjande utskrift til skjermen:
Dette er køyring nr. 1 av for-lykkja. Dette er køyring nr. 2 av for-lykkja. Dette er køyring nr. 3 av for-lykkja. Dette er køyring nr. 4 av for-lykkja.
Merk at range()-funksjonen startar på startverdien, men tek ikkje med sluttverdien. Merk òg at dei kodelinjene som høyrer til for-lykkja, er rykt inn slik som for while-lykkjer og if-setningar.
Eksempel på for-lykkje med trinn på 2 i staden for 1:
for x in range(1, 5, 2): print(f"Dette er køyring nr. {x} av for-lykkja.")
Dette vil gi følgjande utskrift til skjermen:
Dette er køyring nr. 1 av for-lykkja. Dette er køyring nr. 3 av for-lykkja.
Dersom vi legg til eit tredje argument til range()-funksjonen (her: talet 2), kan vi styre kor stort hopp variabelen i for-lykkja skal gjere for kvar gong lykkja blir køyrd. Vi får berre to linjer sidan det andre argumentet til range()-funksjonen er 5, som betyr at den største moglege verdien x kan ha, er 4. Verdien 4 kan ikkje x ha når det startar på 1 og går i trinn på 2.
Formatering
Eksempel:
print(f"Desimaltalet {3.14159:.3f} har tre desimalar.")
Dette vil gi denne utskrifta:
Desimaltalet 3.142 har tre desimalar.
Koden "3f" betyr tre desimalar. Hugs å skrive kolon og punktum før formatkoden.
Aktivitetar
a) Algoritme
Programmet skal endrast slik at slik at brukaren kan skrive inn ein vilkårleg startsaldo. Skriv om på algoritmen slik at dette blir mogleg, og pass på å få med litt forklarande tekst.
Løysingsforslag
Skriv til skjermen "Dette programmet reknar ut kva ein startsaldo veks til etter eitt, to og opp til og med ti år med ei rente på 3,4 prosent per år.".
Skriv til skjermen "Skriv inn den summen du ønskjer å setje inn:".
Ta imot talet frå brukaren, og set det lik variabelen startsaldo.
Set variabelen vekstfaktor lik 1,034.
Set variabelen aar lik 1.
Gjer ti gonger:
Set variabelen saldo lik startsaldo multiplisert med vekstfaktor opphøgd i aar.
Skriv til skjermen "Etter <aar> år har <startsaldo> kroner vakse til <saldo> kroner.".
La aar auke med 1.
Notasjonen "<aar>" betyr at her skal innhaldet av variabelen aar setjast inn.
b) Kode
Skriv koden til programme
Løysingsforslag
c) Algoritme
Programmet i oppgåva over skal endrast slik at brukaren òg kan skrive inn kor mange år pengane skal stå inne. Skriv om på algoritmen slik at dette blir mogleg.
Løysingsforslag
Skriv til skjermen "Dette programmet reknar ut kva ein startsaldo veks til etter eitt, to og opp til og med eit valt tal på år med ei rente på 3,4 prosent per år.".
Skriv til skjermen "Skriv inn den summen du ønskjer å setje inn:".
Ta imot talet frå brukaren, og set det lik variabelen startsaldo.
Skriv til skjermen "Skriv inn kor mange år pengane skal stå totalt:".
Ta imot talet på år frå brukaren, og set det lik variabelen maksaar.
Set variabelen vekstfaktor lik 1,034.
Set variabelen aar lik 1.
Gjer <maksaar> gonger:
Set variabelen saldo lik startsaldo multiplisert med vekstfaktor opphøgd i aar.
Skriv til skjermen "Etter <aar> år har <startsaldo> kroner vakse til <saldo> kroner.".
La aar auke med 1.
d) Kode
Skriv koden til programmet.
Løysingsforslag
e) Algoritme
Programmet i oppgåva over skal endrast slik at brukaren i tillegg kan skrive inn kva renta skal vere. Skriv om på algoritmen slik at dette blir mogleg.
Løysingsforslag
Skriv til skjermen "Dette programmet reknar ut kva ein startsaldo veks til etter eitt, to og opp til og med ti år med ei valfri rente per år.".
Skriv til skjermen "Skriv inn den summen du ønskjer å setje inn:".
Ta imot talet frå brukaren, og set det lik variabelen startsaldo.
Skriv til skjermen "Skriv inn kor mange år pengane skal stå totalt:".
Ta imot talet på år frå brukaren, og set det lik variabelen maksaar.
Skriv til skjermen "Skriv inn kva renta skal vere:".
Ta imot talet frå brukaren, og set det lik variabelen rente.
Set variabelen vekstfaktor lik 1 + rente/100.
Set variabelen aar lik 1.
Gjer <maksaar> gonger:
Set variabelen saldolik startsaldo multiplisert med vekstfaktor opphøgd i aar.
Skriv til skjermen "Etter <aar> år har <startsaldo> kroner vakse til <saldo> kroner.".