| {{ 'ml-lesson-number-slides' | message : article.intro.bblockCount }} |
| {{ 'ml-lesson-number-exercises' | message : article.intro.exerciseCount }} |
| {{ 'ml-lesson-time-estimation' | message }} |
Om figuren är en cirkel, använd areaformeln πr2, men om figuren är en triangel, använd 2bh.På den här sidan får du lära dig skriva kod som tolkar villkor och gör olika saker beroende på utfallet.
x = 20 if x > 20: print('Hej!')
elif x >= 0: print('Hejsan!')
else: print('Hallå!')
Vad tror du kommer att hända när du kör programmet? Vad tror du kommandona if
, elif
och else
gör? Vad händer om du byter elif
mot if
på rad 5? Kan du ändra på värdet i x
så att programmet skriver ut Hallå!
?
I den här lektionen går vi igenom följande begrepp:
Jämförelseoperatorer används för att jämföra två saker med varandra. De används t.ex. för att avgöra om en variabel har ett specifikt värde, om ett tal är litet nog eller om en lista är tillräckligt lång. Resultatet av en jämförelse är av datatypen bool, alltså antingen
True
eller False
.Om jämförelsen är sann får man resultatet True
och om den är falsk får man False
.
==
True
om objekten är lika, t.ex. 3 == 6/2
. !=
True
om objekten inte är lika, t.ex. 3 != 4
. Symbolen !=
kan jämföras med tecknet = inom matematiken.>
True
om det första talet är större än det andra, t.ex. 4 > 3
. <
True
om det första talet är mindre än det andra, t.ex. 5 < 10
. >=
, <=
>
respektive <
, men returnerar True
även om talen är lika. >=
och <=
kan jämföras med tecknen ≥ respektive ≤ i matematiken.Det går även att skriva dubbla olikheter för att undersöka om ett värde ligger inom ett intervall, t.ex.
0 < 5 <= 28
==
fungerar även för andra datatyper.Följande program gör ett antal jämförelser och skriver ut resultatet.
x = 5
print(x == 7)
print(x != 7)
print(-10 < x < 10)
>
False
True
True
Kom ihåg att Jämförelseoperatorer returnerar antingen True
eller False
.
Vi går igenom rad för rad och undersöker vad som händer.
x = 5
Först skapas en variabel x
där värdet 5 sparas. Notera att det är ett enkelt likhetstecken, så det är en tilldelning som görs, inte någon jämförelse.
print(x == 7)
De dubbla likhetstecknen betyder att vi gör en jämförelse mellan x
och 7
, och om de är lika med varandra är jämförelsen sann. I det här fallet finns värdet 5 lagrat i x
, så jämförelsen blir 5 == 7
, vilket är falskt. Resultatet blir då värdet False
, som också är vad som skrivs ut.
print(x != 7)
Nu undersöker vi istället om x
inte är lika med 7. Det är sant att 5 och 7 är olika tal, så True
kommer att skrivas ut.
print(-10 < x < 10)
Den sista jämförelsen undersöker om värdet i x
ligger mellan −10 och 10. Det gör det, så i det här fallet jämförelsen är sann, vilket ger resultatet True
. Om vi kör programmet ser vi att detta stämmer.
x = 5
print(x == 7)
print(x != 7)
print(-10 < x < 10)
>
False
True
True
if
-sats if
-satser används för kodstycken som endast ska köras om ett visst villkor är uppfyllt. För att skriva en sådan sats börjar man med ordet if
, alltså om
, följt av ett villkor och sedan ett kolon. För att markera den kod som bara ska köras om villkoret är uppfyllt använder man indrag.
x = 5
if x == 5: print('Talet är fem!')
>
Talet är fem!
Talet är fem!
om villkoret x == 5
faktiskt är sant, alltså om x
har tilldelats värdet 5 på rad 1. Om villkoret är falskt hoppar programmet över de indragna raderna och fortsätter under dem.else
-sats Man vill ofta att programmet gör olika saker beroende på om ett villkor är sant eller falskt. Då använder man en else
-sats nedanför if
-satsen genom att skriva ordet else
, alltså annars
, följt av ett kolon. All efterföljande indragen kod kommer då bara att köras om villkoret i if
-satsen är falskt.
x = 6
if x == 5: print('Talet är fem!')
else: print('Talet är inte fem!')
>
Talet är inte fem!
if
-sats följd av en else
-sats skapar en struktur på formen Om villkoret är sant, gör si. Annars, gör så.
elif
-sats Det händer ofta att man vill göra mer komplicerade förgreningar i sitt program. Då är det bekvämt att använda elif
-satser, som används efter en if
-sats eller en annan elif
-sats.
x = 10
if x == 5: print('Talet är fem!')
elif x == 10: print('Talet är tio!')
else: print('Talet är varken fem eller tio!')
>
Talet är tio!
elif
som en kombination av else
och if
, där villkoret bara undersöks om de ovanstående villkoren är falska.Vad kommer att hända om man kör följande program?
x = 10
if x > 0: if x > 100: print('Ett stort tal!') else: print('Ett ganska stort tal!')
else: if x < -100: print('Ett litet tal!') else: print('Ett ganska litet tal!')
x = -123
?
>
Ett litet tal!
Hur fungerar villkor?
x = 10
och sedan för x = -123
.
x = 10
x > 0
, alltså om 10 är större än 0, vilket det är. Det betyder att vi går in i if
-satsen och kommer direkt till ett nytt villkor: x > 100
. Det är inte sant, så vi hoppar över den indragna raden och går till else
-satsen på rad 5. Där får vi följande utskrift. >
Ett ganska stort tal!
if
-satsen på rad 2 var sann kommer vi inte att gå in i else
-satsen på rad 7 och hoppar därför över alla rader som kommer efter.
x = -123
x = -123
på första raden kommer villkoret på rad 2 vara falskt eftersom −123 är mindre än 0. Då hoppar vi över raderna 3 - 6 och går istället in i else
-satsen på rad 7. Där stöter vi på villkoret x < -100
. Det är sant, så vi går in i den satsen och och får följande utskrift. >
Ett litet tal!
Den efterföljande else
-satsen kommer inte att köras eftersom if
-satsen på rad 8 var sann.
Logiska operatorer används för att slå ihop eller ändra villkor. Ett vanligt fall är att man har två villkor som ska gälla samtidigt, t.ex. att två variabler ska vara positiva. Då används operatorn and
, dvs. och
, mellan villkoren.
x = 7
y = 18
if x>0 and y>0: print('Punkten ligger i första kvadranten!')
>
Punkten ligger i första kvadranten!
Ibland har man två villkor där minst ett ska gälla. Då används operatorn or
, dvs. eller
, mellan de två villkoren.
x = 5
y = -2
if x<0 or y<0: print('Punkten ligger INTE i första kvadranten!')
>
Punkten ligger INTE i första kvadranten!
Man kan också vända ett villkor till dess motsats med operatorn not
, dvs. inte
. Om ett tal inte är större än noll så måste det vara noll eller mindre. Exemplet nedan blir därför samma sak som att använda villkoret x <= 0
.
x = -3
if not x>0: print('Talet är INTE större än noll!')
>
Talet är INTE större än noll!
Programmet nedan utför beräkningen x2+9 om talet x är 3 eller 4.
x = 4
if x == 3: print(x**2 + 9)
elif x == 4: print(x**2 + 9)
>
25
x = 4
if x==3 or x==4: print(x**2 + 9)
Använd den logiska operatorn or
.
Eftersom beräkningen endast utförs om x
är 3 eller 4 behöver bara ett av villkoren x == 3
och x == 4
vara sant. Det är ett perfekt tillfälle att använda or
-operatorn.
x = 4
if x==3 or x==4: print(x**2 + 9)
>
25
Istället för att skriva beräkningen på två ställen i koden har vi alltså angett två olika sätt att hitta till
beräkningen. Det är en bra princip att försöka undvika upprepad kod. På det sättet blir programmet mer överskådligt, och om beräkningen ska ändras behöver man bara göra det på ett ställe.