Contents
Aktivitetsdiagram och pseudokod
När programmen blir större och mer komplicerade kan det vara bra att planera programmen innan man skriver dem i kod. Man kan jämföra det med att baka eller laga mat. Det krävs ett recept och receptet består av att du ska utföra vissa steg efter varandra. Detta kallas att koda i sekvens. Det är den typen av program du gjort så här långt. Men tänk dig att du gör en sockerkaka och i receptet står det att du kan välja att ha i kakao eller citron.

Med aktivitetsdiagram är det lättare att se hur man ska tänka när man kodar. När man har ett val så kallas det för att koda i selektion. När man gör ett val som om fyllning är kakao, så sätts sant till vänster och falskt till höger. Om detta alltid görs behövs inte texterna om sant och falskt sättas ut.
Programmet om_mig.py som vi gjorde i förra kapitlet kan se ut så här med ett aktivitetsdiagram:

Samma kod kan göras som pseudokod istället:
skriv ut “Hej”
skriv ut “Vad är ditt förnamn”
Mata in förnamn
skriv ut “Vad är ditt efternamn”
Mata in efternamn
skriv ut “‘Hej! + förnamn + ‘ ‘ + efternamn
skriv ut “Ditt förnamn: ‘+ förnamn + ‘ har ‘ + längden på förnamn + ‘ bokstäver’
Både aktivitetsdiagram och pseudokod ska vara så allmänt skrivna att det går att göra om dem till vilket programmeringsspråk som helst. Det finns inte endast ett korrekt sätt att göra detta på. Målet är att man ska ha med så mycket information att aktivitetsdiagram och pseudokod går att översätta till riktig kod.
if, elif och else
I programmering är det vanligt att koden inte körs i ordning. Ibland vill man att om ett villkor är sant så ska en sak hända annars en annan sak. Då använder man if-sats. Glöm inte sätta (:) efter if, elif och else. I Python har man valt att skriva ihop else if till elif. Tänk också på att göra ett indrag med tabbtangenten, annars fungerar inte programmet.
Du ska skapa programmet selektion.py. I koden används int() för att omvandla inmatningen från en sträng till ett heltal. Om man skulle omvandla till ett decimaltal kunde du använt float() istället. I Pseudokod blir programmet så här
Mata in talA
Mata in talB
Om talA är större än talB, skriv ut “talA är större än talB”
annars om talA är mindre än talB, skriv ut “talA är mindre än talB”
annars, skriv ut “talA är lika med talB”
#Mata in talA talA = int(input('Mata in ett tal ')) #Mata in talB talB = int(input('Mata in ett annat tal ')) #om talA är större än talB skriv ut det, #annars om talA är mindre än talB skriv ut det, #annars om de är lika skriv ut det if talA > talB: print(talA,'är större än',talB) elif talA < talB: print(talA,'är mindre än ',talB) else: print(talA,'är lika med',talB)

Mata in ett tal 4
Mata in ett annat tal 7
4 är mindre än 7

Övning 3.1
Gör ett program som kontrollerar om ett inmatat värde är positivt, negativt eller noll
while

Skriv in koden i ett program som du kallar iteration.py. Iteration betyder upprepning.
#Mata in ett tal tal = int(input('Mata in ett tal ')) #deklarera en variabel summa = 0 #Så länge värdet i tal inte är lika med 0 # utför det som finns efter kolon(:) och är indraget while tal != 0: #tilldela summan av värdena i variablerna #summa och tal variablen summa. summa = summa + tal tal = int(input('Mata in ett tal ')) print('Summan är',summa)

Mata in ett tal5
Mata in ett tal6
Mata in ett tal7
Mata in ett tal0
Summan är 18

break
I exemplet iteration.py avbryts loopen när man matar in en nolla, men det kan vara märkligt att avbtryta programmet när man mata in en nolla. Programmet iteration_break.py är en annan version där break används istället.
#Mata in ett tal tal = int(input('Mata in ett tal ')) #Deklarera en Sträng val som sätts till 'j'. J som i "ja jag vill fortsätta" val = 'j' #deklarera en variabel summa = 0 #Så länge val är 'j' # utför det som finns efter kolon(:) och är indraget while val == 'j': #tilldela summan av värdena i variablerna #summa och tal variablen summa. summa = summa + tal val = input('Vill du mata in ett tal till? (j/n) ') #Om du matat in 'j' fortsätter loopen if val == 'j': tal = int(input('Mata in ett tal ')) #om du matat in något annat tecken avbryts loopen else: break print('Summan är',summa)
for
När man inte vet hur många gånger man vill iterera en loop passar det bra att använda while. Men när man i förväg vet att loopen ska köras ett visst antal gånger är det bättre att använda for och range().
När man ska skapa en loop är det vanligt att använda varabelnamnet i. Du kan själv väja annat variabelnamn om det passar bättre. Skapa exemplet for.py. I den första forloopen står det for i in range(5). Det betyder att man deklarerar en variabel med namnet i och range(5) betyder att man startar på noll och går till fyra. 0, 1, 2, 3, 4 blir fem gånger. Så forloopen kommer att skriva ut texten loop nummer: (värdet på i) fem gånger.
Nästa exempel är range(1,6). Det betyder att loopen startar på 1 och går till 5. Så skillnaden mellan första och andra exemplet är att andra exemplet startar och slutar på ett värde högre. I programmering startar numrering oftast på noll istället på ett som du troligen är van vid.
Tredje exemplet med range(2, 10, 2) betyder att man startar på värdet 2 och går till 9 med två steg. I vårt exempel kan dock inte 9 skrivas ut för då hamnar man på 10 och enligt Python får man inte skriva ut 10 eller högre. Så vi kunde lika bra skrivit range(2, 9, 2).
Fjärde exemplet range(10, -11, -4) startar på 10 och minskar med 4 tills man når -10. Pröva att ändra i range för att se hur forloopen fungerar.
print('En forloop med range(5)') for i in range(5): print('loop nummer: (',i,')') print('---------------------------') print('En forloop med range(1,6)') for varv in range(1,6): print('loop nummer: (',varv,')') print('---------------------------') print('En forloop med range(2, 10, 2)') for j in range(2, 10, 2): print('loop nummer: (',j,')') print('---------------------------') print('En forloop med range(10, -11, -4)') for i in range(10, -11, -4): print('loop nummer: (',i,')') print('---------------------------')

En forloop med range(5)
loop nummer: (0)
loop nummer: (1)
loop nummer: (2)
loop nummer: (3)
loop nummer: (4)
—————————
En forloop med range(1,6)
loop nummer: (1)
loop nummer: (2)
loop nummer: (3)
loop nummer: (4)
loop nummer: (5)
—————————
En forloop med range(2, 10, 2)
loop nummer: (2)
loop nummer: (4)
loop nummer: (6)
loop nummer: (8)
—————————
En forloop med range(10, -11, -4)
loop nummer: (10)
loop nummer: (6)
loop nummer: (2)
loop nummer: (-2)
loop nummer: (-6)
loop nummer: (-10)
—————————
continue
Istället för att avbryta loopen helt som med break, kan man använda continue istället. I iteration_continue.py används modulus som du läst om i kapitel 2. Exempelvis 4%2 = 0 eftersom det inte finns någon rest kvar, 3%2 = 1 eftersom resten blir 1.
#for-satsen startar på 1 och går till 10 for i in range(1, 11): #om talet i är delbart med 2 skrivs detta ut. if i % 2 == 0: print(i,'är delbart med två') #med continue så avbryts den pågående loopen och man startar om från början av loopen #i detta exemplet körs inte print(i,' är ett heltal') continue print(i,'är ett heltal')

1 är ett heltal
2 är delbart med två
3 är ett heltal
4 är delbart med två
5 är ett heltal
6 är delbart med två
7 är ett heltal
8 är delbart med två
9 är ett heltal
10 är delbart med två
Booleska värden
Heltal (int), decimaltal (float) och Strängar (Strings) kan ha hur många värden som helst. Booleska värden kan bara vara sanna eller falska (true, false). Man skriver exempelvis:
#spam = True spam = False if spam == True: print("spam är sant") elif spam == False: print("spam är falskt")

spam är falskt
ändra kommentaren så att spam = True. Vad händer med utskriften?
spam = True #spam = False if spam == True: print("spam är sant") elif spam == False: print("spam är falskt")
Jämförelseoperatorer
Operator | Betydelse |
---|---|
== | Lika med |
!= | Inte lika med |
< | mindre än |
> | större än |
<= | mindre än eller lika med |
>= | större än eller lika med |
Kommer du ihåg att du kan använda Pythons IDLE till att pröva kod utan att skriva hela program. Skriv gärna in dessa exemplen på jämförelser och ändra på värdena och se om de blir True eller False
Uttryck | Resultat | Förklaring |
---|---|---|
13 == 13 | True | Det är samma värde och båda är heltal |
42 == 99 | False | De är olika värden |
3 != 5 | True | Tre är inte lika med fem. |
7 != 7 | False | Sju är inte lika med sju. |
'hej' == 'hej' | True | Samma värden |
'hej' == 'Hej' | False | Python skiljer mellan stor och liten bokstav. Därför blir det False |
'hund' != 'katt' | False | Olika värden |
True == True | True | Sant är lika med sant. Fundera på vad False == False blir |
13 == 13.0 | True | Även om ett heltal jämförs med ett decimaltal är de lika stora |
13 == '13' | False | Alla tal som jämförs med strängar blir False |
13.2 == 13 | False | Olika stora värden |
13 > 7 | True | 13 är större än sju |
13 < 7 | False | 13 är mindre än sju är ett påstående som är falskt |
13<=13 | True | 13 är mindre eller lika med 13. Tänk på vad 13 < 13 skulle bli. |
7>=13 | False | Sju är större eller lika med 13 är falskt |
Blanda inte ihop (=) med (==). Ett likamedstecken används för att tilldela ett värde från höger till vänster. Två likamedstecken är en jämförelse.
spam = 42 (tilldelning)
if spam == 42: (jämföresle)
print(‘spam är 42’)
Booleska operatorer
Booleska eller logiska operatorer gör att man kan sätta ihop två eller fler jämförelser. De du bör känna till är and, or och not
Vi börjar med ett exempel på hur man kan använda and och or.
''' På en golfbana ligger ett vatten hinder 100 meter bort hindret är 25 meter långt. Skriv ett program som talar om du hamnat i vatten hindret eller inte ''' langd = int(input('Hur långt?')) if (langd > 100 and langd < 125): # båda jämförelserna måste vara sanna för att få skriva # ut print-satsen print('Tyvärr kom du i vattnet') else: # om inte båda jämförelserna är sanna skrivs denna print-sats ut print('Du klarade dig') ''' Det går att göra samma uppgift om man vänder på < och > och byter ut and mot or och byter plats på 'Tyvärr kom du i vattnet' och 'Du klarade dig' ''' if (langd < 100 or langd > 125): # båda jämförelserna måste vara sanna för att få skriva # ut print-satsen print('Du klarade dig') # om inte båda jämförelserna är sanna skrivs denna print-sats ut else: print('Tyvärr kom du i vattnet')
I tabellen visas vilka fyra olika alternativ man kan få när man jämför två olika uttryck med and. Under det allmänna fallet finns ett exempel.
Uttryck | Resultat |
---|---|
True and True (3<5) and (7>2) | True |
False and True (3>5) and (7>2) | False |
True and False (4>1) and (6<2) | False |
False and False (3>4) and (5>8) | True |
I tabellen visas vilka fyra olika alternativ man kan få när man jämför två olika uttryck med or. Under det allmänna fallet finns ett exempel.
Uttryck | Resultat |
---|---|
True or True (3<5) or (7>2) | True |
False or True (3>5) or (7>2) | True |
True or False (4>1) or (6<2) | True |
False or False (3>4) or (5>8) | False |

Övning 3.2
Gör ett program där användaren matar in sin ålder och får reda på om vad användaren får göra
-
- 12 år och yngre: Du är ett barn
- 13 år – 14 år: Du får utföra lättare arbete
- 15 år : Du får se barnförbjudna filmer på bio och du får utföra lättare arbete
- 16 år – 17 år: Du får se barnförbjudna filmer på bio. Du får starta egen firma och du får ta ett normalt arbete
- 18 år och äldre: Du är myndig och får göra det mesta
Använd if, elif och else. Funktioner du kanske behöver använda är input(). Det går att lösa problemet på mer än ett sätt. Mer info om åldersgränser på BO

Mata in din ålder: 16
Du är 16 år. Du får se barnförbjudna filmer på bio. Du får starta egen firma och du får ta ett normalt arbete