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!")
Flytdiagram som viser programmet over

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
Flytdiagram for if
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»
Flytdiagram for if-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»
Flytdiagram for if-elif-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}.")
Flytdiagram for eksempel med karakterer
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:

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:

# Dårlig
b = True
if not b:
    print("nei")
else:
    print("ja")
# Bra
b = True
if b:
    print("ja")
else:
    print("nei")

Tom if -setning:

# Dårlig
b = True
if b:
    pass
else:
    print("nei")
# Bra
b = True
if not b:
    print("nei")

Unødvendig sammenligning med True/False:

# Dårlig
x = 2
y = 3 
if (x < y) == True:
    print("ja")
# Bra
x = 2
y = 3 
if x < y:
    print("ja")

Bruk av if i stedet for and:

# Mindre foretrukket
b1 = True
b2 = True
if b1:
    if b2:
        print("begge")
# Bra
b1 = True
b2 = True
if b1 and b2:
    print("begge")

Bruk av ekstra if i stedet for else:

# Dårlig
b = True
if b:
    print("ja")
if not b:
    print("nei")
# Bra
b = True
if b:
    print("ja")
else:
    print("nei")

Bruk av ekstra if i stedet for elif:

# Dårlig
x = 10
if x < 5:
    print('small')
if (x >= 5) and (x < 10):
    print('medium')
if (x >= 10) and (x < 15):
    print('large')
if x >= 15:
    print('extra large')
# Bra
x = 10
if x < 5:
    print('small')
elif x < 10:
    print('medium')
elif x < 15:
    print('large')
else:
    print('extra large')

Fancy bruk av Python sin «aritmetikk»:

# Horribelt
x = 42
y = int((42 > 0) and 99)
# Bra
x = 42
y = 99 if x > 0 else 0

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.