Betingelser
If -setninger
Man kan benytte en if-setning for å utøre en kodeblokk kun i gitte tilfeller.
print("Hva er alderen til den yngste reisende?")
youngest_age = int(input())
print("Velkommen om bord!")
print("Hvis det skulle skje en nødsituasjon, er redningsvester under setene.")
if youngest_age < 12:
print("Redningsvester for barn under 12 år er i skapet under trappen.")
print("Det er forresten et lekerom foran i båten.")
print("God tur!")
Syntaks. For å benytte en if-setning, må vi benytte kodeordet if
fulgt av en betingelse, etterfulgt av et kolon. Deretter må vi skrive koden som skal utføres dersom betingelsen er oppfylt med et innrykk. God stil tilsier at innrykket består av 4 mellomrom.
if betingelse:
# innrykket kodeblokk
Betingelser
En betingelse er et uttrykk som evaluerer til enten True
eller False
. Dersom betingelsen er True
, vil koden i kodeblokken utføres. Dersom betingelsen er False
, vil koden i kodeblokken ikke utføres.
Alle relasjonsoperatorer evaluerer til True
eller False
(aka boolske verdier), og er derfor egnet til betingelser. Eksempler på relasjonsoperatorer er ==
, !=
, <
, >
, <=
, >=
, in
og not in
(les mer i kursnotater om operatorer). Eksempler på betingelser:
# Betingelser som evaluerer til True
if True:
print("A")
x = True
if x:
print("B")
if 2 + 2 == 4:
print("C")
x = "yes"
if x == "yes":
print("D")
x = 2
y = 3
if x < y:
print("E")
# Betingelser som evaluerer til False
if False:
print("F")
x = False
if x:
print("G")
if 2 + 2 == 5:
print("H")
x = 2
if x == 3:
print("I")
x = 2
y = 3
if x > y:
print("J")
I tillegg er de logiske operatorene (not
, and
, or
) nyttige for å kombinere eller negere boolske verdier (les mer i kursnotater om operatorer). Eksempler på betingelser med logiske operatorer:
age = 18
residency = "Norway"
if (age >= 18) and (residency == "Norway"):
print("Du kan stemme ved fylkes- og kommunevalget.")
is_criminal = False
physical_test_score = 8
if (not is_criminal) and (physical_test_score >= 6):
print("Du kan søke på jobb i politiet.")
height = 2.1
if (height < 1.5) or (height > 2.0):
print("Beklager, du får ikke lov å kjøre berg-og-dal-banen.")
If-else
I en if-else vil programflyten velge én av to mulige flyter videre gjennom programmet, før flyten samles igjen. Dersom betingelsen er True
, vil kodeblokken etter if
-setningen utføres, men hvis betingelsen er False
, vil kodeblokken etter else
-ordet utføres.
if betingelse:
# kodeblokk «if»
else:
# kodeblokk «else»
Eksempel:
print("I hvilken kommune var du bostedsregistrert 30. juni i år?")
your_municipality = input()
if your_municipality == "Bergen":
print("På valgdagen 11. september kan du stemme i et valglokale i Bergen.")
else:
print("For å avgi stemme mens du er i Bergen, må du forhåndsstemme.")
print("NB! Du kan forhåndsstemme på Torgalmenningen frem til 8. september!")
If-elif-else
I en sekvens som begynner med en if
-setning og som fortsetter med et valgfritt antall elif
-setninger og som eventuelt avsluttes med en else
, er det nøyaktig én av kodeblokkene som utføres: første gang en betingelse evaluerer til True
. Hvis ingen av betingelsene evaluerer til True
, vil kodeblokken etter else
-ordet utføres.
if betingelse_a:
# kodeblokk «if»
elif betingelse_b:
# kodeblokk «elif 1»
elif betingelse_c:
# kodeblokk «elif 2»
else:
# kodeblokk «else»
Eksempel:
print("Hvor mange poeng fikk du på prøven?")
score = int(input())
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
elif score >= 40:
grade = "E"
else:
grade = "F"
print(f"Du fikk en {grade}.")
If-else -uttrykk
print("Foo" if True else "Bar") # Foo
print("Foo" if False else "Bar") # Bar
print("Foo" if 1 < 2 else "Bar") # Foo
print()
x = -3
print(0 if x < 0 else x) # 0 (fordi -3 < 0 er True)
Se også avsnittet om uttrykk med betingelse i operatorer.
Truthy og falsy verdier
Dersom en betingelse ikke evaluerer til en boolsk verdi, vil den likevel tolkes som en enten True
eller False
. De fleste verdier tolkes som True, men det er også noen verdier som tolkes som False. Verdier som tolkes som True kalles truthy, mens verdier som tolkes som False kalles falsy.
print("Alt kan tolkes som en boolsk verdi")
print("Sann" if True else "Usann") # Sann
print("Sann" if 1 else "Usann") # Sann
print("Sann" if "Hello" else "Usann") # Sann
print("Sann" if "0" else "Usann") # Sann
print("Sann" if 0 else "Usann") # Usann
print("Sann" if "" else "Usann") # Usann
print("Sann" if None else "Usann") # Usann
For å sjekke om en verdi er truthy eller falsy, kan vi benytte funksjonen bool
som konverterer enhver verdi til en boolsk verdi:
print('Alle tall bortsett fra 0 er truthy')
print(f'{bool( 2) = }') # True
print(f'{bool( 1) = }') # True
print(f'{bool(-1) = }') # True
print(f'{bool( 0) = }') # False
print()
print(f'{bool( 1.0) = }') # True
print(f'{bool(0.01) = }') # True
print(f'{bool(-0.1) = }') # True
print(f'{bool( 0.0) = }') # False
print(f'{bool(-0.0) = }') # False
print()
print('Alle strenger bortsett fra den tomme strengen er truthy')
print(f'{bool( "True") = }') # True
print(f'{bool("False") = }') # True
print(f'{bool( " ") = }') # True
print(f'{bool( "") = }') # False
print()
print('Alle lister bortsett fra den tomme listen er truthy')
print(f'{bool([1, 2, 3]) = }') # True
print(f'{bool([0, 0, 0]) = }') # True
print(f'{bool( [False]) = }') # True
print(f'{bool( []) = }') # False
print()
print('Den spesielle verdien None er falsy')
print(f'{bool(None) = }') # False
Verdier som er falsy er:
False
None
0
0.0
(tallverdien 0)""
(en tom streng)[]
()
{}
set()
(en tom liste/tuple/dict/mengde)
De fleste andre verdier er truthy. Vi kan alltid dobbeltsjekke med bool
-funksjonen.
God stil
Merk at dette avsnittet omhandler stil og ikke korrekthet.
Negert betingelse:
|
|
Tom if
-setning:
|
|
Unødvendig sammenligning med True
/False
:
|
|
Bruk av if
i stedet for and
:
|
|
Bruk av ekstra if
i stedet for else
:
|
|
Bruk av ekstra if
i stedet for elif
:
|
|
Fancy bruk av Python sin «aritmetikk»:
|
|
PS! Hvis du syntes det er morsomt med uleselig kode, kan du gjerne prøve deg på code golf etterhvert som du føler deg komfortabel med grunnleggende programmering.