Betingelser
Hva slags kode skal kjøre?
Livet består av mange valg. Det kan være de små valgene (Hva skal jeg ha på meg i dag?), eller større valg (Hva skal jeg studere?). Hva som skjer videre avhenger nok mye av valgene du stadig gjør. Dersom vi skal kunne programmere mer avansert, må vi også kunne gi datamaskingen muligheten til å kjøre forskjellige instrukser avhengig av ulike valg. Frem til nå har nemlig koden vår kjørt linje for linje. En betingelse derimot, består av et eller flere utsagn med tilhørende kode. Koden som hører vil bare kjøre dersom utsagnet stemmer (returner True
). La oss legge til en betingelse på koden fra forrige side (der vi regner ut alderen til brukeren):
navn = input("Hva heter du? ")
f_aar = int(input("Hvilket år er du født? "))
alder = 2022 - f_aar # Erstatt 2022 med riktig år om nødvendig
if alder > 17:
print("Hei", navn, "du er myndig!")
Vi ser her logikken bak en betingelse, skrevet som en if-setning. Vi regner ut alder, og så sjekker vi den matematiske ulikheten alder > 17
. Dersom alder er større en 17 returnerer sjekken True
, hvilket betyr at print instruksjonen kjører. Dersom betingelsen returnerer False
, så skjer det ingenting. Vi bruker innhopp for å gruppere hvilken kode som hører til betingelsen.
Når vi lager en betingelse kan vi avslutte med else
, altså kode som skal kjøre dersom det vi sjekker returnerer False
:
navn = input("Hva heter du? ")
f_aar = int(input("Hvilket år er du født? "))
alder = 2022 - f_aar
if alder > 17:
print("Hei", navn, "du er myndig!")
else:
print("Hei", navn, "du er dessverre ikke myndig enda")
Flere betingelser
Vi kan teste flere utsagn samtidig. Anta at vi ønsker å sjekke om et tall ligger mellom 10 og 20. Da vil vi at tallet både skal være større enn 10, og samtidig være mindre enn 20. Vi kan skrive følgende:
tall = input("Hvor mange poeng fikk du? ")
if tall > 10 and tall < 20:
print("Dette tilsvarer middels måloppnåelse")
Her må begge betingelsene være sanne samtidig for at koden skal kjøre.
Hvis vi skal lage ferdig koden (0 - 10 poeng er lav måloppnåelse mens 20 - 30 tilsvarer høy), så kan vi kjede sammen flere betingelser. Setningsoppbygningen foregår da som if - elif - else. Her starter "if" instruksjonen, elif står for "else if" der vi kan sjekke andre betingelser (vi kan ha flere av disse etter hverandre), mens "else" avslutter. Det er lettest å se i praksis:
tall = input("Hvor mange poeng fikk du? ")
if tall >= 0 and tall < 10:
print("Dette tilsvarer lav måloppnåelse")
elif tall > 10 and tall <= 20
print("Dette tilsvarer middels måloppnåelse")
elif tall > 20 and tall <= 30:
print("Dette tilsvarer høy måloppnåelse")
else:
print("Du må skrive inn poeng mellom 0 og 30!")
Det er viktig at vi har innhopp på all kode som tilhører hver del av if-elif setningen. Legg merke til at vi strengt tatt kunne ha laget nye if-setninger for hver sjekk i stedet, men det anses som dårlig kode. Da ville man kunne ha havnet i flere sjekker samtidig, og det ønsker vi å unngå. Ved å bruke elif og else, kobler vi alt sammen til samme betingelse.
Operatorer i en betingelse
I eksempelene ovenfor sjekket vi en matematisk ulikhet, men vi har langt større spillerom en det. La oss først se nærmere på å undersøke likheter, det byr nemlig på et unikt problem når vi koder. I matematikken bruker vi jo et likhetstegn for å vise (eller regne på ukjentene) at utsagnene på begge sider av likhetstegnet er det samme, men når vi koder bruker vi likhetstegnet for å deklarere en variabel! Dermed kan vi ikke lage en betingelse som for eksempel sjekker if alder = 17:
, fordi da overskriver vi den eksisterende verdien av alder til 17. Vi bruker derfor doble likhetstegn for å undersøke om noe er likt. Koden der vi sjekket alder kan dermed skrives om til for eksempel:
navn = input("Hva heter du? ")
f_aar = int(input("Hvilket år er du født? "))
alder = 2022 - f_aar
if alder == 18:
print("Gratulerer", navn, "du ble/blir myndig i år!")
Når vi lager en betingelse er vi heller ikke begrenset til matematiske utsagn, vi kan like gjerne sjekke strenger:
svar = input("Har du forstått if-setninger nå? ")
if svar == "ja":
print("Bra jobbet!")
elif svar == "nei":
print("Ikke gi opp, du vil snart knekke koden!")
else:
print("Du må svare ja eller nei!")
Følgende tabell er en fin oppsummering og oversikt over de ulike operatorene vi kan bruke når vi skal sette opp en betingelse:
Operator | Betydning |
---|---|
== | lik |
!= | ikke lik |
< | mindre enn |
> | større enn |
<= | mindre enn eller lik |
>= | større enn eller lik |
and | og |
or | eller |
not | ikke |
Oppgaver
Oppgave 5.3.1
Med variablene a = 3, b = 7 og c = "7", d = 3.
Hvilke utfall gir testene nedenfor? (True, False eller noe annet?)
a) a < b
b) a > b
c) b >= c
d) a = c
e) a == d
f) a > d or a == d
g) a > d and a == d
Klikk for løsning
Oppgave 5.3.2
Bytt ut # din kode her
slik at Morna Erna
skrives ut
statsminister = "Jonas Gahr Støre"
if # din kode her
print("Morna Erna")
else:
print("Morna Jonas")
Klikk for hint
Klikk for løsning
Oppgave 5.3.3
Slottet har installert et nytt alarmsystem, som kun slipper folk som heter Kong Harald
inn dørene. Lag et program som sjekker om en brukeren heter Kong Harald
, og sier velkommen hvis det stemmer, ellers skal programmet si Ha deg vekk!
.
Klikk for hint
Klikk for løsning
Oppgave 5.3.4
I fornøyelsesparken Titusenfryd må man være minst 100 cm høy for å kjøre berg-og-dal-banen Thundercoaster. Skriv et program med en if-setning som tester om en person er høy nok.
Klikk for løsning
Oppgave 5.3.5
Lag en variabel hemmelig
med et tall mellom 1 og 10. Be brukeren gjette tallet. Dersom brukeren gjetter riktig, skriver du ut "Gratulerer! Du gjettet riktig". Ved feil skriver du "Beklager, du gjettet feil". Ta vare på koden, du skal bruke den senere.
Klikk for hint
Klikk for løsning
Oppgave 5.3.6
Hos friske mennesker varierer kroppstemperaturen vanligvis mellom 36.5 og 37.5 grader. Lag et program som avgjør om en persons kroppstemperatur ligger under, innenfor eller over normal kroppstemperatur. Programmet skal skrive ut passende beskjed.
Klikk for løsning
Oppgave 5.3.7
a) Lag et program der bruker kan skrive inn poengsummen sin for en matematikkeksamen. Programmet skal skrive ut karakteren på eksamen når vi bruker følgende skala (maks 60 poeng):
Karakter | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
Poeng | 12 | 24 | 35 | 45 | 56 |
b) Endre koden slik at programmet skriver ut "Ugyldig poengsum" dersom man ikke skriver inn et tall mellom 0 og 60
Klikk for hint
Klikk for løsning
Oppgave 5.3.8
Lag en tekstbasert versjon av "Stein - Saks - Papir", der du kan spille mot datamaskinen.
Programmet kan skrive ut følgende:
Hva velger du?
1: Stein
2: Saks
3: Papir
Ditt valg (1,2,3):
Programmet må sjekke brukerens valg mot datamaskinens valg.
Her kan du ha behov for å trekke tilfeldige heltall, og da må vi importere en instruks utenifra.
Start koden med
from random import *
# Nå vil instruksen randint(start, slutt) trekke et tilfeldig heltall i området du spesifiserer
Klikk for hint
Klikk for løsning
Oppgave 5.3.9
Gitt at verdien av b = False, og verdien av x = 0. Hva er sannhetsverdien (True eller False) til følgende uttrykk?
b
x == 0
b and x == 0
b or x == 0
not b and x == 0
not b or x == 0
b and x != 0
b or x != 0
not b and x != 0
not b or x != 0
Klikk for hint
Klikk for løsning
Oppgave 5.3.10
SJAMAN-PROGRAMMET
Lag et program som skriver ut tekster med personlige spådomer. Hvilken tekst som skal skrives ut avhenger av verdiene i variablene: kjønn, fødselsår og navn.
Et eksempel på en spådom kan være:
Kjære Trine Skei Grande, denne måneden vil du motta en gave fra en ukjent. Unngå pengespill og gatekjøkkenmat. Dette gjelder spesielt deg som er dame og født i 1969.
Klikk for løsning
Oppgave 5.3.11
SKUDDÅR
Lag et program som avgjør om et årstall er skuddår eller ikke.
Tips: for å sjekke om tall er delelig på 4, bruk modulo. Eks:
tall % 4 == 0
gir True hvis tallet er delelig på 4.
a) Bruk reglene som gjaldt fra 8 e.kr til 1582:
- Et år er et skuddår hvis årstallet er delelig på 4.
b) Endre programmet fra oppgave a) slik at du bruker reglene som er litt mer korrekt:
- Et år er et skuddår hvis:
- årstallet er delelig på 4, eks: 2012 var skuddår, men ikke 2014
- men ikke hvis årstallet er delelig på 100, eks: 1900 var ikke skuddår
- men likevel hvis det er også er delelig på 400, eks: 2000 var skuddår
c) Lag et skuddårsprogram med komplette regler:
- Regler for skuddår:
- før 46 f.kr: Ingen skuddår
- 45 f.kr – 9 f.kr: Skuddår hvis delelig på 3
- 8 f.kr – 7 e.kr: Ingen skuddår (pause)
- 8 e.kr – 1581: Skuddår hvis delelig på 4
- fra 1582: delelig på 4, men ikke på 100, unntatt delelig på 400