Centralt innehåll

Fakta

I många andra programmeringsspråk som t.ex. C#, Java och designspråk som CSS används måsvingar (krullparenteser {}) för att tala om att koden mellan måsvingarna hör ihop, ett block brukar man säga inom programmering. Det blocket kan t.ex. vara kod som ska utföras om en if-sats är sann.
Allt mellan måsvingarna bör indenteras för att koden ska bli lätt att läsa, dvs. läsbar. Men i de språken är indenteringen bara en stark rekommendation.

I Python måste man indentera den kod som ska utföras i t.ex. en if-sats, annars blir det syntax-fel.

if-sats i C#

if-sats i Python

1. Villkorssatser

Hittills har de program vi kodat fått indata, gjort beräkningar och presenterat resultatet (utdata), men de programmen har en stor begränsning. Alla kodrader (satser), har utförts i tur och ordning, dvs i sekvens. I större mer komplicerade program räcker det inte att alla satser utförs i tur och ordning (i sekvens) utan det måste gå att välja vilka satser som ska utföras och i vilken ordning. Ett sådant val, att välja, kallas selektion.

Selektion är ett val som kan vara sant eller falskt. Det styr vilken väg som instruktioner ska utföras i ett dataprogram. If-satser används för det.

1.1 if-sats

# Exempel 1.1.1 - if-sats

tal = int(input('Ange ett heltal mellan 1 – 10: '))
if tal < 5:
    print('Talet är mindre än 5')
print('Talet är', tal)
ger utskriften om svaret från användaren är 4
            Ange ett heltal mellan 1 – 10: 4 
Talet är mindre än 5             
Talet är 4  

if-satsen kontrollerar om värdet i variabeln tal är mindre än 5. Det logiska uttrycket tal < 5 kan antingen vara sant eller falskt. I detta fall är det sant för variabel tal har värdet 4 och då körs print-satsen som skriver ut 'Talet är mindre än 5'. Efter if-satsen fås också utskriften 'talet är 4'.

# Exempel 1.1.1 - if-sats

tal = int(input('Ange ett heltal mellan 1 – 10: '))
if tal < 5:
    print('Talet är mindre än 5')
print('Talet är', tal)
ger utskriften om svaret från användaren är 7
            Ange ett heltal mellan 1 – 10: 7 
Talet är 7  

if-satsen kontrollerar om värdet i variabeln tal är mindre än 5. Det logiska uttrycket tal < 5 kan antingen vara sant eller falskt. I detta fall är det falskt för variabeln tal har värdet 7 och då körs inte print-satsen som skriver ut 'Talet är mindre än 5'. Efter if-satsen fås också utskriften 'talet är 7'.

Logiska uttryck (eller booleska uttryck) är något som är sant eller falskt, och kan avgöra vilken väg ett program ska välja. Till det används en villkorssats som kan utföra olika saker beroende på om ett logisk uttryck (villkor) är sant eller falskt. Det är också mycket vanligt att man kallar villkorssatser för if-satser.

En if-sats inleds alltid med ordet if. Efter if ska det logiska uttrycket stå. Sedan följer ett kolon.

if tal < 5:

I det här fallet är det logiska uttrycket (villkoret): tal < 5

Därefter ska det stå en eller flera rader som ska utföras om villkoret är sant. Dessa rader måste vara indragna en bit in på raden. Man brukar skriva in två eller fyra mellanslag eller ett tab-tecken. När en rad dras in på det sättet kallas det för indentering.

OBS! Viktigt att indenteringen görs likadant i hela programmet, dvs välj ett av sätten: 2 mellanslag, 4 mellanslag eller tab-tecken. Det gör koden mer lättläst.

    print('Talet är mindre än 5')

Eftersom print-satsen är indenterad är det den satsen som utförs om villkoret i if-satsen är sann.
Efter alla de indenterade satserna, i det här fallet bara en sats, utförts kommer nästa rad som utförs vara den rad som har samma indrag som ordet if, dvs den kodrad som kommer efter att if-satsen körts klart.

Det här är raden efter if-satsen, som alltid körs oavsett om villkoret i if-satsen är sann eller falsk.

print('Talet är', tal)

Om villkoret i if-satsen är falskt kommer nästa rad att utföras vara den rad som har samma indrag som ordet if, nämligen.

print('Talet är', tal)

Den här print-satsen ingår ju inte i if-satsen och utförs alltså oavsett om villkoret i if-satsen är sant eller falskt. Det är helt enkelt nästa rad som ska utföras efter if-satsen.

1.2 if-else-sats

För att kunna ställa frågan och sedan låta programmet svara t.ex. "rätt" eller "fel" behövs en if-sats.

# Exempel 1.2.1 - if-sats med else
svar = int(input('Vad är 3 * 7 ? '))
if svar == 21:
    print('Bra, rätt svar.')
else:
    print('Fel svar.')
    print('3 * 7 är 21')
ger utskriften om användaren svarar 21
            Vad är 3 * 7? 21 
Bra, rätt svar.  
ger utskriften om användaren svarar 21
            Vad är 3 * 7? 22
Fel svar.        
3 * 7 är 21

if-satsen kontrollerar om värdet i variabeln svar är lika med 21. Det logiska uttrycket svar == 21 kan antingen vara sant eller falskt. Om det är sant blir utskriften 'Bra, rätt svar.' annars blir utskriften 'Fel svar. 3 * 7 är 21'.

Observera att likhet testas med dubbla likamed-tecken ==, ett enkelt likamed-tecken = är ju en tilldelning.

En if-sats inleds alltid med ordet if. Efter if ska det logiska uttrycket stå. Sedan följer ett kolon.

if svar == 21:

Därefter ska det stå en eller flera rader som ska utföras om villkoret är sant. Dessa rader måste vara indragna en bit in på raden, dvs indenteras.

    print('Bra, rätt svar.')

Eftersom print-satsen är indenterad är det den satsen som utförs om det logiska uttrycket i if-satsen är sann. Om det logiska uttrycket är falskt, t.ex. när användaren skriver in 22, kommer nästa rad att utföras vara den rad som har samma indrag som if-satsen. Där finns en else-sats, vilket betyder att de kodrader som är indenterade efter else kommer att köras när villkoret i if-satsen är falskt.

else:
    print('Fel svar.')
    print('3 * 7 är 21')

För att tala om vilka kodrader som ska köras om villkoret är falskt ska vänstermarginalen indenteras efter else-satsens kolon. I den här koden är det 2 kodrader som är indenterade och alltså utförs om villkoret är falskt.

# Exempel 1.2.2 - Villkorssatser indenteras

svar = input('Är det din födelsedag idag (j/n)? ')
if svar == 'j':
    print('Grattis!')
ger utskriften om svaret från användaren är ja
            Är det din födelsedag idag (j/n)? j 
Grattis!
eller ger utskriften, dvs inget händer om svaret från användaren är nej
            Är det din födelsedag idag (j/n)? n 

Villkoret kan var ett logiskt uttryck eller variabel. I exemplet ovan är det logiska uttrycket svar == 'j'

När man skriver kod i en utvecklingsmiljö indenterar den oftast automatiskt på raden efter ett kolon. Annars använder man enklast tab-tangenten i kodfönstret när man indenterar.

En villkorssats kan ha två förgreningar där man anger vad som ska utföras om ett villkor är sant och vad som annars ska utföras. if-satsen kan kombineras med ett else. Det gör att vissa kodrader utförs om villkoret är sant och andra kodrader om villkoret är falskt.

# Exempel 1.2.3 - Villkorssats med else

svar = input('Är det din födelsedag idag (j/n)? ')
if svar == 'j':
    print('Yipee!')
    print('Tårta idag.')
else:
    print('Synd, ingen tårta idag.')
ger utskriften om svaret från användaren är ja
            Är det din födelsedag idag (j/n)? j 
Yipee!                              
Tårta idag.
eller ger utskriften om svaret från användaren är nej
            Är det din födelsedag idag (j/n)? n                     
Synd, ingen tårta idag.
# Exempel 1.2.4 - Kontrollera om ett tal är jämnt delbart med två

tal = int(input('Skriv ett heltal: '))
if tal % 2 == 0:
    print(tal, 'är jämnt')
else:
    print(tal, 'är udda')
ger utskriften om heltalet är jämnt
            Skriv ett heltal: 8 
8 är jämnt
ger utskriften om heltalet är udda
            Skriv ett heltal: 7 
7 är udda

1.3 if-elif-else-sats

# Exempel 1.3.1 - Villkorssats med fler förgreningar, elif

a = int(input('Ange talet a: '))
b = int(input('Ange talet b: '))
if a == b:
    print('a är lika med b')
elif a > b:
    print('a är större än b')
else:
    print('a är mindre än b')
kan ge utskriften
            Ange talet a: 4 
Ange talet b: 4 
a är lika med b
eller kan ge utskriften
            Ange talet a: 5 
Ange talet b: 3 
a är större än b
eller kan ge utskriften
            Ange talet a: 2 
Ange talet b: 7 
a är mindre än b

# Exempel 1.3.2 - Det går att ha godtyckligt antal förgreningar med elif

a = int(input('Ange ett heltal: '))
if a > 100:
    print('Talet är större än 100')
elif a > 60:
    print('Talet är större än 60 och mindre än eller lika med 100')
elif a > 30:
    print('Talet är större än 30 och mindre än eller lika med 60')
else:
    print('Talet är mindre än eller lika med 30')
kan ge utskriften
            Ange ett heltal: 120   
Talet är större än 100
eller kan ge utskriften
            Ange ett heltal: 100
Talet är större än 60 och mindre än eller lika med 100
eller kan ge utskriften
            Ange ett heltal: 84
Talet är större än 60 och mindre än eller lika med 100
eller kan ge utskriften
            Ange ett heltal: 44   
Talet är större än 30 och mindre än eller lika med 60 
eller kan ge utskriften
            Ange ett heltal: 17   
Talet är mindre än eller lika med 30

1.4 Film om villkorssatser (7:53)

Starta film om villkorssatser

2. Logiska uttryck (villkor)

Logiska uttryck är uttryck som kan vara sanna eller falska. Logiska uttryck brukar också kallas Booleskt uttryck eller villkor. Program kan fatta beslut om vad som ska göras genom att jämföra variabler, tal och strängar med hjälp av logiska uttryck. Svaret blir då alltid True eller False, dvs sant eller falskt.

2.1 Jämförelse-operatorer

Jämförelser används för att skapa logiska värden, dvs de kan vara sanna eller falska.

Jämförelse-operatorer
Operator Beskrivning
 == Lika med
 != Skilt från (inte lika med)
 < Mindre än
 <= Mindre än eller lika med
 > Större än
 >= Större än eller lika med
# Exempel 2.1.1 - Testa jämförelseoperatorer

x = int(input('Ange ett heltal (1-10): '))
if x == 5:
  print('Talet är 5')

if x >= 1:
    print('Talet är större än eller lika med 1')

if x < 3:
    print('Talet är mindre än 3')

if x != 1:
    print('Talet är skilt ifrån 1')
kan ge utskriften
            Ange ett heltal: 4                  
Talet är större än eller lika med 1 
Talet är skilt ifrån 1

En jämförelseoperator verkar på tal och resultatet är ett logiskt värde (True eller False). Lägg märke till att dubbla likamed-tecken används för likhet eftersom ett enkelt likamed-tecken används för tilldelningar.

Tänk också på att alltid när en sats avslutas med kolon (:) ska satser efter det indenteras för att visa vilka satser som ska utföras om villkoret är sant. Det kan vara en eller flera satser.

2.2 Logiska operatorer

Det går också att kombinera flera uttryck med logiska operatorer.

Jämförelse-operatorer
Operator Beskrivning
 and Och. Sant om båda uttrycken är sanna.
 or Eller. Sant om minst ett av uttrycken är sann.
 not Inte. Motsatsen.
# Exempel 2.2.1 - Använd den logiska operatorn and

a = int(input('Ange talet a: '))
b = int(input('Ange talet b: '))
if a > 0 and b > 0:
    print('Båda talen är positiva')
elif a > 0:
    print('a är positivt')
elif b > 0:
    print('b är positivt')
else:
    print('Inget av talen är positivt')
kan ge utskriften
            Ange talet a: 4        
Ange talet b: 7        
Båda talen är positiva
kan ge utskriften
            Ange talet a: 3        
Ange talet b: -3
a är positivt
kan ge utskriften
            Ange talet a: -5        
Ange talet b: 7        
b är positivt
kan ge utskriften
            Ange talet a: -2
Ange talet b: -3
Inget av talen är positivt
# Exempel 2.2.2 - med jämförelse- och logiska operatorer

a = 10
b = 7

print(a > b)
print(a < b)
print(b < a)
print(not b < a)
print(a > 5 and b > 7)
print(a > 5 or b > 7)
print(a > 3 or b > 6)
ger utskriften
            True  
False 
True  
False 
False 
True  
True
# Exempel 2.2.3 - Jämför strängar

str1 = 'mjau'
str2 = 'mjau'
str3 = 'Mjau'
str4 = 'voff'

if str1 == str2:
    print(str1, 'är lika med', str2)
else:
    print(str1, 'är skilt ifrån', str2)

if str1 == str3:
    print(str1, 'är lika med', str3)
else:
    print(str1, 'är skilt ifrån', str3)

if str1 <= str3:
    print(str1, 'är mindre än eller lika med', str3)
else:
    print(str1, 'är större än', str3)

if str1 < str4:
    print(str1, 'är mindre än', str4)
else:
    print(str1, 'är större än eller lika med', str4)
ger utskriften
            mjau är lika med mjau    
mjau är skilt ifrån Mjau 
mjau är större än Mjau   
mjau är mindre än voff

När strängar jämförs med större än eller mindre än handlar det om en sträng kommer före eller efter i den alfabetiska ordningen.

# Exempel 2.2.4 - Operatorn in kan användas för att se om en sträng finns inuti en annan sträng

str = 'Python'
b = 'z' in str
print(b)
ger utskriften
            False
# Exempel 2.2.5 - Operatorn in

str = 'Python'
b = 'yt' in str
print(b)
ger utskriften
            True

2.3 Film om logiska operatorer (5:50)

Starta film om logiska operatorer

3. Nästlade if-satser

Det går bra att ha en sats i en annan sats. Att ha en if-sats i en annan if-sats kallas för nästlad if-sats.

# Exempel 2.3.1 - En if-sats i en if-sats, s.k. nästlad if-sats

svar = input(' Vill du fortsätta (j/n)? ')
if svar == 'j':
    tal = int(input('Ange ett heltal: '))
    if tal < 100:
        print('Talet är mindre än 100')
    else:
        print('Talet är större än 100')
else:
    print('Ingen fortsättning')

print('Programmet avslutas')
kan ge utskriften
            Vill du fortsätta (j/n)? j 
Ange ett heltal: 33        
Talet är mindre än 100     
Programmet avslutas
kan ge utskriften
            Vill du fortsätta (j/n)? n 
Ingen fortsättning
Programmet avslutas

Begrepp

Selektion: Ett val som kan vara sant eller falskt. Styr vilken väg som instruktioner ska utföras.

if-sats: En villkorssats som utför ett antal kodrader när villkoret är sant

Logiskt uttryck: Ett villkor som kan vara True eller False

Indentering: Indrag, är ett blankt utrymme i början av en rad kod

Jämförelse-operatorer: Jämför värden (==  !=  <  >  <=  >=)

Logiska operatorer: Sammanfogar uttryck (and or not)

Nästlad if-sats: En if-sats i en if-sats

Övningar

Du kan inte att lära dig att programmera genom att läsa en bok eller titta på videos. Du måste öva på att skriva kod själv och ju mer du övar desto bättre blir du.
  1. Skriv ett program där användaren skriver in två tal och skriv sedan ut det minsta talet.
    Vad skriver programmet ut om talen är lika?
  2. En spetsig vinkel är mindre än 90 grader.
    En rät vinkel är 90 grader.
    En trubbig vinkel är mer än 90 grader.
    Skriv ett program där användaren får skriva in en vinkel och avgör om den är spetsig, rät eller trubbig?
  3. Skriv ett program där användaren skriver in tre tal och skriv sedan ut det största talet.
  4. Skriv ett program där användaren skriver in två tal. Visa resultatet av divisionen då det första talet divideras med det andra. Se till att koden att programmet fungerar även om det andra talet är noll. Visa meddelandet "Division med noll" om det andra talet är noll.
  5. I en godisaffär är priset för lösgodis:
    9.90 kr/hg vid köp upp till 1 kg
    8.90 kr/hg vid köp frän 1 till 2 kg
    7,90 kr/hg vid köp över 2 kg
    Skriv ett program som frågar efter vikten i hg och skriver sedan ut priset.
    Skriv ett program som frågar efter ett belopp och skriver sedan ut hur många hg godis som man köpa.
  6. Skriv ett program där användaren skriver in sin lön och får sedan reda på sin skatt och sin lön efter skatt i kronor. När lönen före skatt är:
    Mindre än 25000 är skatten 25%
    Mellan 25000 och 35000 är skatten 30%
    Över 35000 är skatten 35%
  7. * Skriv ett program där användaren först skriver in ett heltal a. Sedan skriver användaren in antingen % eller //, dvs modulus eller heltalsdelen vid division. Sist skriver användaren in det andra heltalet b.
    Beräkna sedan antingen a % b eller a // b beroende på vilken operation användaren valt.

Inlämningsuppgift

login     logout    

Exit tickets



Uppgift - Beräkna betyg på provet

Skriv ett program där användaren skriver in sitt resultat på provet och programmet talar sedan om vilket betyg det motsvarar.

Betyget beräknas enligt:

BetygPoäng
A45 -
B40 -
C35 -
D30 -
E25 -
Funder 25

Exempelkörningar:
Ange din poäng? 41
Ditt betyg är: B
Ange din poäng? 30
Ditt betyg är: D
Ange din poäng? 24
Ditt betyg är: F

Tips: Använd if-elif-else-satsen

Kom ihåg! Använd beskrivande variabelnamn och kommentera koden.

Frivillig utmaning

Kontrollera att inga negativa värden eller värden över 50 anges.
Använd endast en if-elif-else-sats (med 0 till många elif och 0 eller 1 else) för att göra alla kontroller.