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,orochnot
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.
True eller False→Välj kodHela 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
input()läser in åldern.int()omvandlar texten till ett heltal.age >= 18jämför åldern med 18.- Om resultatet är
Truekö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 myndigif-grenen körs.
Hur gammal är du? 15
Du är inte myndigelse-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
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
- Är personen minst 18 år?
- Om ja: är personen svensk medborgare?
- Välj meddelande utifrån svaren.
Om personen är under 18 kontrolleras inte medborgarskapet i villkoret.
5.6
Logiska operatorer samlar villkor
| Operator | Betydelse |
|---|---|
and | båda måste vara sanna |
or | minst ett måste vara sant |
not | vä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
| Ålder | Förväntat pris |
|---|---|
11 | 50 kr |
12 | 80 kr |
17 | 80 kr |
18 | 120 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
- Läs in ett tal.
- Använd
ifför tal större än noll. - Använd
elifför tal lika med noll. - Använd
elseför negativa tal. - Testa
-1,0och1.
Ö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
ifkör kod när ett villkor är sant.elseger en väg när villkoret är falskt.eliftestar fler villkor uppifrån och ner.- Kolon och indrag visar kodblocken.
- Nästlade villkor kontrollerar ett villkor inuti ett annat.
and,orochnotbygger sammansatta villkor.