Programmering med if-elif-else - Matematikk 1P - NDLA

Hopp til innhald
Oppgave

Programmering med if-elif-else

Vegval er noko av det mest sentrale i programmering.

AP-30 Koding

Sjå på programkoden nedanfor, og finn seks feil.

if svar = "ja"
print("Du vil gifte deg med meg!")
else print("Du vil ikkje gifte deg med meg.")

Fasit
  1. Variabelen svar må vere definert før han kan brukast i testen i if-setninga.
  2. Den logiske operatoren for å sjekke om noko er likt, er == (to likskapsteikn).
  3. Det manglar kolon på slutten av den første linja.
  4. Den andre linja må rykkjast inn.
  5. else skal stå på linje for seg sjølv.
  6. Det manglar kolon etter else på tredje linje.

Hugs òg at linje 4, som er den siste print()-kommandoen, må rykkjast inn.

AP-31

Vi skal lage eit program som reknar ut vekelønna di. Du har ei timelønn på 195 kroner per time. Dersom du arbeider over 37,5 timar i løpet av ei veke, skal du ha eit timetillegg på 35 prosent til den vanlege timeløna på overtidstimane. Som brukar av programmet skal du skrive inn kor mange timar du har arbeidd i ei veke.

a) Algoritme

Først skal vi lage eit kort program som avgjer om du har arbeidd overtid i ei aktuell veke ut ifrå det timetalet som blir skrive inn.
Skriv algoritmen til eit slikt program, og hugs å få med forklarande tekstar.

Løysingsforslag
  • Skriv til skjermen "Dette programmet finn ut om du har arbeidd overtid eller ikkje.".
  • Skriv til skjermen "Skriv inn kor mange timar du har arbeidd den aktuelle veka.".
  • Ta imot talet frå brukaren, og set talet lik variabelen timartotalt.
  • Dersom timartotalt er større enn 37,5: Skriv til skjermen "Du har arbeidd overtid.".
  • Dersom timartotalt ikkje er større enn 37,5: Skriv til skjermen "Du har ikkje arbeidd overtid.".

b) Koding

Skriv og køyr koden til programmet, og kontroller at det fungerer slik det skal.

Løysingsforslag

print("Dette programmet finn ut "
"om du har arbeidd overtid eller ikkje.")
timartotalt = float(input("Skriv inn kor mange timar "
"du har arbeidd den aktuelle veka."))
if timartotalt > 37.5:
     print("Du har arbeidd overtid.")
else:
     print("Du har ikkje arbeidd overtid.")

c) Algoritme

Skriv resten av algoritmen som trengst for å rekne ut vekelønna og presentere ho på skjermen. Hugs å endre på forklarande tekstar slik at dei passar.

d) Koding

Skriv og test programkoden til algoritmen over.

e) Algoritme

Vi ønskjer at programmet i tillegg skal spesifisere kor mange timar som er overtid (dersom det er det), og kva lønna blir for overtidstimane.
Endre på algoritmen i oppgåve c) slik at dette blir oppfylt.

f) Koding

Skriv og test programkoden til algoritmen over.

AP-32

Vi skal lage eit program som skal avgjere om brukaren av programmet er over 38 år. Vi skal gå gjennom tre eksempel for korleis vi kan gjere dette.

a) Koding

Skriv koden til algoritmen nedanfor:

  • Skriv til skjermen "Trykk 'j' dersom du er over 38 år og 'n' dersom du ikkje er det.".
  • Ta imot svaret frå brukaren, og set det lik variabelen svar.
  • Dersom svar har verdien "j": Skriv til skjermen "Du er over 38 år.".
  • Dersom svar ikkje har verdien "j", men "n": Skriv til skjermen "Du er 38 år eller yngre.".
Løysingsforslag

svar = input("Trykk 'j' dersom du er over 38 år "
"og 'n' dersom du ikkje er det.")
if svar == "j":
    print("Du er over 38 år.")
elif svar == "n":
    print("Du er 38 år eller yngre.")

b) Koding

Lag koden til algoritmen nedanfor:

  • Skriv til skjermen "Trykk 'j' dersom du er over 38 år og 'n' dersom du ikkje er det.".
  • Ta imot svaret frå brukaren, og set det lik variabelen svar.
  • Dersom svar har verdien "j": Skriv til skjermen "Du er over 38 år.".
  • Dersom svar ikkje har verdien "j": Skriv til skjermen "Du er 38 år eller yngre.".
Løysingsforslag

svar = input("Trykk 'j' dersom du er over 38 år "
"og 'n' dersom du ikkje er det.")
if svar == "j":
    print("Du er over 38 år.")
else:
    print("Du er 38 år eller yngre.")

c) Algoritme

Eit tredje alternativ til programkode er denne:

svar = input("Trykk 'j' dersom du er over 38 år "
"og 'n' dersom du ikkje er det.")
if svar == "j":
    print("Du er over 38 år.")
if svar == "n":
    print("Du er 38 år eller yngre.")

Skriv algoritmen til dette programmet.

Løysingsforslag
  • Skriv til skjermen "Trykk 'j' dersom du er over 38 år og 'n' dersom du ikkje er det.".
  • Ta imot svaret frå brukaren, og set det lik variabelen svar.
  • Dersom svar er lik "j": Skriv til skjermen "Du er over 38 år.".
  • Dersom svar er lik "n": Skriv til skjermen "Du er 38 år eller yngre.".

d) Vurdering

Kva er skilnaden på desse tre programma, og kva for eit av dei er mest logisk å bruke?

Sjekk først

Gir dei tre programvariantane same resultat òg dersom brukaren skriv noko anna enn "j" eller "n"?

Diskusjon

Dei tre programvariantane gir same resultat med eitt unntak. Dersom brukaren skriv noko anna enn "j" eller "n", får vi framleis svar frå det andre programalternativet. Det andre programalternativet fungerer slik at uansett kva anna enn "j" brukaren skriv, vil programmet oppfatte det som at brukaren er 38 år eller yngre fordi det er skrive noko anna enn "j".

Det andre programalternativet følgjer derfor betre logikken om at "anten er du over 38 år, eller så er du ikkje det". Då burde vi klare oss med éin test i programmet, noko som berre er oppfylt med det andre programalternativet. (Kvifor er ikkje dette oppfylt for alternativ 1 og alternativ 3?)

e) Vurdering

Kva er skilnaden på det første og det tredje programmet?

Forklaring

Skilnaden ligg i måten den andre testen blir køyrd på. I det første programmet blir den andre testen køyrd med kodeordet elif, mens i det tredje blir denne testen køyrd med if. Det blir ein skilnad her, fordi at med kodeordet elif i det første programmet blir den andre testen berre køyrd dersom den første testen ikkje slo til. I det tredje programmet blir den andre testen køyrd uansett om den første testen slår til eller ikkje.

I dette tilfellet er det unødvendig å køyre den andre testen dersom den første testen slår til. Det første programmet er derfor betre enn det andre (sjølv om begge fungerer).

Dersom vi skal gjere mange testar der det berre er eitt "rett" alternativ, vil programmet køyre raskare jo fleire testar ein slepp å køyre. Derfor prøver vi i størst mogleg grad å bruke elif ved slike høve, for då vil programmet hoppe ut av if-elif-else-strukturen med ein gong ein av testane slår til.

f) Algoritme

Gå attende til starten, og sjå kva som er føremålet til programmet. Finn ein annan måte å løyse problemet på. Skriv algoritmen til løysinga di.

Tips

Kva anna kan brukaren skrive inn enn "j" og "n" som kan avgjere om hen er over 38 år?

g) Koding

Skriv og test koden til algoritmen i f).

AP-33

I Noreg er det slik at arbeidstakarar har krav på feriepengar, som kjem i staden for lønn i ferien. Feriepengane for eit år blir rekna ut ifrå feriepengegrunnlaget, som er årslønna det førre året – etter at feriepengane for det førre året er trekt ifrå. (Ein får altså ikkje feriepengar av feriepengar.) Feriepengane skal vere 10,2 prosent av feiepengegrunnlaget. Dersom arbeidstakaren er over 60 år, har hen krav på 12,5 prosent av feriepengegrunnlaget.

Vi ønskjer å lage eit program som reknar ut feriepengane for ein vilkårleg arbeidstakar.

a) Vurdering

Kva for opplysningar må brukaren av programmet gi til programmet?

Svar

Programmet må ha

  • årslønna for det førre året
  • feriepengane for det førre året
  • alderen på arbeidstakaren

b) Algoritme

Skriv algoritmen til eit program som reknar ut feriepengane til ein arbeidstakar ut ifrå dei tre tala i den førre oppgåva.

Løysingsforslag
  • Skriv til skjermen "Dette programmet reknar ut feriepengane til ein arbeidstakar ut ifrå årslønna og feriepengane frå det førre året i tillegg til alderen på arbeidstakaren.".
  • Skriv til skjermen "Skriv inn den totale årslønna frå det førre året:".
  • Ta imot talet frå brukaren, og lagre det i variabelen total.
  • Skriv til skjermen "Skriv inn feriepengane frå det førre året:".
  • Ta imot talet frå brukaren, og lagre det i variabelen fp_gml.
  • Skriv til skjermen "Skriv inn alderen på arbeidstakaren:".
  • Ta imot talet frå brukaren, og lagre det i variabelen alder.
  • Rekn ut total minus fp_gml, og set resultatet lik variabelen fp_grunnlag.
  • Dersom alderen er større enn 60: Multipliser fp_grunnlag med 12,5, del på 100, og set resultatet lik variabelen fp.
  • Dersom alderen ikkje er større enn 60: Multipliser fp_grunnlag med 10,2, del på 100, og set resultatet lik variabelen fp.
  • Skriv til skjermen "Feriepengane blir <fp> kroner.".

c) Koding

Skriv koden til eit program ut ifrå algoritmen i den førre oppgåva, og test at programmet fungerer.

Løysingsforslag

print("Dette programmet reknar ut feriepengane til ein arbeidstakar" " ut ifrå årslønna og feriepengane det førre året"
" i tillegg til alderen på arbeidstakaren.")
total = float(input("Skriv inn den totale årslønna frå det førre året:"))
fp_gml = float(input("Skriv feriepengane frå det førre året:"))
alder = float(input("Skriv inn alderen på arbeidstakaren:"))
fp_grunnlag = total - fp_gml

if alder > 60:
    fp = fp_grunnlag * 12.5 / 100
else:
    fp = fp_grunnlag * 10.2 / 100

print(f"Feriepengane blir {fp} kroner.")

Skrive av Bjarne Skurdal.
Sist fagleg oppdatert 11.07.2022