Presentationer Slide 1/1

Kapitel 5

Villkor

Låt programmet välja väg med if, elif och else.

Mål

Efter kapitlet ska du kunna...

  • skriva villkor med if
  • välja mellan vägar med else
  • testa flera alternativ med elif
  • förstå nästlade villkor
  • kombinera villkor med and, or och not

5.1

Villkor låter programmet fatta beslut

Tidigare kördes alla instruktioner uppifrån och ner.

Nu ska viss kod bara köras när ett villkor är sant.

VillkorTrue eller FalseVälj kod

Hela exemplet

Är personen myndig?

age = int(input("Hur gammal är du? "))

if age >= 18:
    print("Du är myndig")

Utskriften sker bara om age >= 18 är True.

Steg för steg

Så fattas beslutet

  1. input() läser in åldern.
  2. int() omvandlar texten till ett heltal.
  3. age >= 18 jämför åldern med 18.
  4. Om resultatet är True körs den indragna raden.

5.2 · Grundstruktur

if betyder ”om”

if villkor:
    kod som körs om villkoret är sant

Villkoret står efter if.

Raden avslutas med kolon.

Koden som hör till villkoret är indragen.

Villkor

Jämförelsen ger ett booleskt värde

age = 20
print(age >= 18)
True

if använder samma resultat men skriver inte ut det automatiskt.

Indrag

Indraget bestämmer vad som hör ihop

if age >= 18:
    print("Du är myndig")
    print("Du får rösta i Sverige")

print("Programmet är klart")

De två indragna raderna styrs av villkoret.

Den sista raden körs alltid.

Vanliga syntaxfel

Kolon och indrag krävs

Fel

if age >= 18
print("Myndig")

Rätt

if age >= 18:
    print("Myndig")

Kontrollfråga

Vad händer om åldern är 15?

if age >= 18:
    print("Du är myndig")

Villkoret blir False.

Den indragna raden hoppas över.

Ingenting skrivs ut.

5.3

else betyder ”annars”

if villkor:
    kod när villkoret är sant
else:
    kod när villkoret är falskt

Exakt en av de två grenarna körs.

Hela programmet

Myndig eller inte myndig

age = int(input("Hur gammal är du? "))

if age >= 18:
    print("Du är myndig")
else:
    print("Du är inte myndig")

Två körningar

Samma kod – olika väg

Hur gammal är du? 20
Du är myndig

if-grenen körs.

Hur gammal är du? 15
Du är inte myndig

else-grenen körs.

Modulus i villkor

Jämnt eller udda

number = int(input("Skriv ett tal: "))

if number % 2 == 0:
    print("Talet är jämnt")
else:
    print("Talet är udda")

Ett jämnt tal får resten 0 vid division med 2.

Interaktiv kontroll

Testa jämnt eller udda

Terminal
Tryck på knappen för att köra.

Prova exempelvis 4, 7, 12 och 21.

5.4

elif betyder ”annars om”

if första_villkoret:
    första_vägen
elif andra_villkoret:
    andra_vägen
else:
    sista_vägen

Python testar villkoren uppifrån och ner.

När ett villkor är sant hoppas resten över.

Hela programmet

Kallt, lagom eller varmt

temperature = int(input("Ange temperatur: "))

if temperature < 10:
    print("Det är kallt")
elif temperature <= 20:
    print("Det är lagom")
else:
    print("Det är varmt")

Ordningen är viktig

Första sanna villkoret vinner

score = int(input("Poäng: "))

if score >= 80:
    print("Högt resultat")
elif score >= 50:
    print("Godkänt")
else:
    print("Underkänt")

85 uppfyller båda jämförelserna, men bara den första grenen körs.

Kontrollfråga

Varför börjar vi med 80?

Om score >= 50 låg först skulle även 85 få resultatet ”Godkänt”.

Programmet skulle aldrig nå kontrollen score >= 80.

Börja därför med det mest begränsande villkoret.

5.5

Ett villkor kan ligga inuti ett annat

if villkor1:
    if villkor2:
        kod som ska köras

Det inre villkoret kontrolleras bara om det yttre är sant.

Varje nivå får ytterligare ett indrag.

Nästlat villkor · hela programmet

Ålder och medborgarskap

age = int(input("Hur gammal är du? "))
citizen = input("Svensk medborgare (ja/nej)? ")

if age >= 18:
    if citizen == "ja":
        print("Du får rösta i svenska val")
    else:
        print("Du är myndig men får inte rösta")
else:
    print("Du är inte myndig ännu")

Nästlat villkor · flöde

Kontrollera en sak i taget

  1. Är personen minst 18 år?
  2. Om ja: är personen svensk medborgare?
  3. Välj meddelande utifrån svaren.

Om personen är under 18 kontrolleras inte medborgarskapet i villkoret.

5.6

Logiska operatorer samlar villkor

OperatorBetydelse
andbåda måste vara sanna
orminst ett måste vara sant
notvänder sant och falskt

and

Båda kraven måste uppfyllas

age = int(input("Hur gammal är du? "))

if age >= 18 and age <= 65:
    print("Du är i arbetsför ålder")

Åldern måste ligga inom båda gränserna.

or

Minst ett alternativ räcker

day = input("Vilken dag är det? ")

if day == "lördag" or day == "söndag":
    print("Det är helg")

Dagen kan inte vara båda samtidigt. Därför används or.

not

Vänd villkoret

logged_in = False

if not logged_in:
    print("Du måste logga in först")

not False blir True.

Kombinerat villkor

Ålder och biljett

age = int(input("Hur gammal är du? "))
has_ticket = input("Har du biljett (ja/nej)? ")

if age >= 18 and has_ticket == "ja":
    print("Du får gå in")
else:
    print("Du får inte gå in")

Både ålderskravet och biljettkravet måste vara sanna.

5.7 · Hela programmet

Biljettpris efter ålder

age = int(input("Hur gammal är du? "))

if age < 12:
    print("Biljettpris: 50 kr")
elif age < 18:
    print("Biljettpris: 80 kr")
else:
    print("Biljettpris: 120 kr")

Biljettpris · gränser

Testa runt varje gräns

ÅlderFörväntat pris
1150 kr
1280 kr
1780 kr
18120 kr

Gränsvärden avslöjar ofta fel i villkor.

Lösenord

Text kan också jämföras

password = input("Skriv lösenord: ")

if password == "python123":
    print("Inloggning lyckades")
else:
    print("Fel lösenord")

Jämförelsen skiljer på stora och små bokstäver.

5.8 · Övning

Positivt, negativt eller noll

  1. Läs in ett tal.
  2. Använd if för tal större än noll.
  3. Använd elif för tal lika med noll.
  4. Använd else för negativa tal.
  5. Testa -1, 0 och 1.

Övning

Barn, tonåring eller vuxen

  • Barn: under 13 år.
  • Tonåring: 13–19 år.
  • Vuxen: 20 år eller äldre.

Planera villkorens ordning innan du skriver koden.

Testa gränserna 12, 13, 19 och 20.

Sammanfattning

Kom ihåg

  • if kör kod när ett villkor är sant.
  • else ger en väg när villkoret är falskt.
  • elif testar fler villkor uppifrån och ner.
  • Kolon och indrag visar kodblocken.
  • Nästlade villkor kontrollerar ett villkor inuti ett annat.
  • and, or och not bygger sammansatta villkor.