Python logo

Programmering med Python

Focus mode
Light/dark-mode

Grunderna i Python

1. Introduktion till programmering#

Programmering handlar om att ge datorn instruktioner, steg för steg, för att lösa problem eller utföra uppgifter. Dessa instruktioner skrivs i ett programmeringsspråk, till exempel Python. Datorn följer instruktionerna i tur och ordning, rad för rad, vilket kallas att koden körs sekventiellt.

1.1 Ett programs byggstenar: satser och uttryck#

Ett program består av satser och uttryck. En sats (eng. statement) är en instruktion som gör något, till exempel att skriva ut text på skärmen med print("Hej!") eller att tilldela ett värde till en variabel med x = 5.

Ett uttryck (eng. expression) är en del av koden som beräknar ett värde, till exempel 3 + 5 eller x * 2. Man kan tänka sig att ett uttryck ger ett värde, medan en sats gör något. I många fall används uttryck inuti satser, till exempel print(x + 2) där uttrycket x + 2 beräknas innan resultatet skrivs ut.

1.2 Kontrollstrukturer - styr flödet i programmet#

För att styra i vilken ordning saker sker i ens program används kontrollstrukturer – till exempel villkor (if-satser) för att fatta beslut, och loopar (for och while) för att upprepa kod flera gånger.

1.3 Variabler och datastrukturer - lagring av information#

Information i ett program sparas i variabler, som är namn på platser i datorns minne där värden kan lagras. Värdena kan vara av olika datatyper, som heltal, decimaltal (float), text (strängar) eller booleska värden (sant/falskt). När man behöver lagra flera värden används datastrukturer som listor, tupler, dictionaries eller set (sv. mängder).

1.4 Strukturering av program - funktioner, klasser, egna moduler#

För att göra program tydligare och enklare att underhålla kan man dela in koden i funktioner, klasser och moduler.

  • En funktion samlar kod som utför en viss uppgift, så att den kan återanvändas flera gånger.
  • Klasser används för att samla data (variabler) och körbar kod (funktioner) och på så sätt strukturera sitt program enligt objektorienterade principer (OOP).
  • Moduler gör det möjligt att dela upp större program i flera filer, vilket gör koden mer organiserad och lättare att samarbeta kring.

1.5 Använda moduler för utökad funktionalitet#

Python innehåller ett stort antal inbyggda moduler – färdiga kodbibliotek som kan användas för vanliga uppgifter utan att du behöver skriva all kod själv. Exempel är random för slumpmässiga tal, math för matematiska funktioner, och datetime för datum och tid.

Dessutom finns externa moduler som du kan installera, till exempel Pillow för bildhantering, Flask för webbappar och NumPy och Pandas för dataanalys. Genom att använda moduler kan man bygga mer avancerade program snabbare och dra nytta av redan färdiga lösningar.

1.6 Om programmeringsspråket Python#

Python är ett av världens mest använda programmeringsspråk. Det är känt för att vara enkelt att läsa och förstå, vilket gör det särskilt lämpligt för nybörjare, men det används också professionellt inom många olika områden.

Python används bland annat till:

  • Dataanalys och artificiell intelligens (t.ex. med biblioteken Pandas, NumPy, TensorFlow).
  • Webbutveckling (t.ex. med Flask eller Django).
  • Automatisering och scripting (för att bearbeta filer eller hantera data).
  • Grafik, visualisering och spelutveckling.
  • Vetenskapliga beräkningar och forskning.

2. Variabler och datatyper#

I programmering används variabler för att lagra information. Variabler är av olika datatyper beroende på vilken typ av värden som lagras.

2.1 De vanligaste datatyperna#

Datatyp Exempel Förklaring
str (string / text) name = "Elmo" Textsträngar, skrivs inom " " eller ' '.
int (heltal) x = 5 Heltal, utan decimaler. Kan vara positiva eller negativa.
float (flyttal) y = 3.14 Tal med decimaler.
bool (boolean) is_happy = True Kan bara vara True eller False.

2.2 Definiera variabler#

Variabler skapas (initialiseras) och tilldelas ett värde med likamedstecknet: =.

# Sträng / str
my_string = 'Hello World'

# Heltal / int
my_int = 42 

# Decimaltal / float
my_float = 3.14         

2.3 Namngivning av variabler#

Namnet på variabler väljer man själv. Det finns dock några regler man bör hålla sig till:

  • Ett variabelnamn bör vara beskrivande och ge information om vad variabeln är till för eller vad den innehåller. Undvik namn som till exempel variabel1.
  • Ett variabelnamn kan inte börja på en siffra eller ett specialtecken (förutom understreck: _).
  • Ett variabelnamn kan inte heller ha samma namn som ett nyckelord i Python. (Ett nyckelord är ett ord med speciell betydelse i Python, till exempel: if, else, False, True, for, while etc.)
  • Man bör inte heller döpa variabler till de inbyggda funktioner som finns i Python - t.ex. str, int, sorted etc.
  • Man kan inte ha mellanslag eller i minustecken i variabelnamn.
  • Undvik internationella tecken i variabelnamn.
  • För mer seriösa program bör variabelnamnen vara på engelska.

2.4 Omvandla mellan datatyper#

Man kan omvandla värden/variabler mellan olika datatyper. (Eng: type conversion eller type casting.)

# Gör om ett värde till en textsträng
my_string = str(42)

# Gör om ett värde till ett heltal
my_int = int(13.3)  

# Gör om ett värde till ett decimaltal
my_float = float('3.14')    

2.5 Ta reda på datatyp#

Med funktionen type() kan man ta reda på datatypen för en variabel.

name = 'Markus'
print(type(name))

# → <class 'str'>

2.6 Räkna med variabler#

Variabler kan användas i beräkningar. Parenteser () kan användas för att kringgå prioritetsregler.

x = 100
my_sum = 100 + x
result = (20 + 10) * x

2.7 Aritmetiska operatorer#

Tecken som används i beräkningar kallas för aritmetiska operatorer.

Förklaring
+ Addition
- Subtraktion
* Multiplikation
/ Division
// Division med avrundning nedåt. (floor-division)
** Upphöjt
% Modulo / rest från division
+= Addera till
-= Subtrahera från

2.8 Öka eller minska variabler#

Teckenkombinationerna += och -= kan användas för att (med mer kompaktare syntax) öka eller minska en variabels värde. (Eng. increment respektive decrement.)

x = 1
y = 100

# Addera 1 till x
x += 1

# Subtrahera 3 från y
y -= 3

3. Input och output#

3.1 Skriva ut med print()#

Funktionen print() skriver ut text till terminalfönstret.

print('Hello World!')

3.2 Skriv ut flera värden med kommatecknet#

Man kan ange flera värden att skriva ut med hjälp av kommatecknet. Man får då ett automatiskt mellanslag mellan värdena. (Det ingen roll vilken datatyp värdena är.)

name = 'Markus'
score = 100

print('Hello', name, 'Your score:', score) 
# → 'Hello Markus Your score: 100'

3.3 Skriv ut utan att skapa en ny rad#

Om man vill skriva ut fler värden på samma rad kan man ange en tom sträng för argumentet end i print-funktionen.

print('One ', end="")
print('Two ', end="")
print('Three')

# → 'One Two Three'

3.4 Input-funktionen#

Funktionen input() pausar programmet och väntar på text-input från användaren. Den input man får lagrar man oftast i en variabel.

OBS! Den data man får från en input-funktion är alltid en textsträng/str.

name = input('Vad heter du?')

3.5 Typomvandla direkt från input-funktion#

Om man vill göra beräkningar eller numeriska jämförelser med datan från en input-funktion kan man konvertera den direkt till en annan datatyp.

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

4. Textsträngar#

4.1 Sätta ihop textsträngar#

Med plustecknet kan man sätta ihop flera textsträngar med varandra. Detta kallas konkatenering.

OBS! Alla värden måste då vara textsträngar - annars får man ett TypeError.

name = 'Markus'
print('Hello ' + name + '!') 

# → Hello Markus!
firstname = 'Markus'
lastname = 'Pettersson'
full_name = firstname + ' ' + lastname

# full_name → 'Markus Pettersson'

4.2 Sträng-formatering med f-strings#

F-strängar (f-strings) är ett relativt nytt sätt att formatera strängar i Python. Med f-strängar kan man sätta in variabler (eller andra uttryck, till exempel beräkningar) direkt i en textsträng. Man kan också ange hur variablerna ska formateras vid utskrift (t.ex. antalet decimaler eller att ett värde ska anges som procenttal.)
OBS! F-strängar skapas genom att man sätter bokstaven f före textsträngens citattecken.

product = 'kexchoklad'
price = 19.9
quantity = 4

print(f'Du har köpt {product} för {price * quantity:.2f} kr.')

# → 'Du har köpt kexchoklad för 79.60 kr.'

🔗Python f-string: A Complete Guide | DataCamp

Typ Exempel Förklaring Resultat
Decimaler f"{pi:.2f}" 2 decimaler "3.14"
Begynnande nollor f"{11:4d}" Lägger till nollor så att strängen blir 4 tecken "0011"
Procent f"{0.85:.0%}" "85%"
Tusentalsavgränsning f"{1234567:,}" "1,234,567"

4.3 Linjera text med f-string#

Man kan även använda f-strings för att få utskrifter på flera rader att linjera snyggt. (Bra om man skriver ut tabelldata.) Man använder då tecknen < och > (för att linjera text vänster respektive höger) följt av en siffra för att ange avståndet.

fav_icecreams = [
    ['Markus', 'Daimstrut'],
    ['Stina', 'Cornetto'],
    ['Nils', 'Piggelin'],
    ['Oskar', '88']
  ]

# Skriv ut på ett prydligt sätt med f-strings
for fi in fav_icecreams:
    print(f'{fi[0]:<8} {fi[1]:>8}')

# → Markus   Daimstrut
#    Stina    Cornetto
#    Nils     Piggelin
#    Oskar          88

4.4 Ta ut delar av en sträng#

Strängar kan på många sätt hanteras som listor. Man kan till exempel nå delar av en sträng med hakklammer [] och kolon: :. Detta kallas för slicing.

name = 'Markus'
first_three_letters = name[0:3] 

# first_three_letters → 'Mar'

4.5 Ändra stora/små bokstäver#

name = 'Markus'

big_name = name.upper()
# → 'MARKUS'

small_name = name.lower()
# →  'markus'

cap_name = small_name.capitalize()  
# 'markus' → 'Markus'

4.6 Sök och ersätt i text#

string = 'find and replace'
new_string = string.replace('find', 'replace')

# new_string → 'replace and replace'

4.7 Ta bort tomrum (och ny-rad-tecken) från sträng#

name = '    Markus      '
new_name = name.strip() 

# new_name → 'Markus'

4.8 Kedja metoder#

Metoder som returnerar ett resultat kan man kedja ihop för att göra flera operationer direkt efter varandra. (Resultatet från en metod skickas vidare till nästa i kedjan.)

ugly_name = '  mAr_kUs   '

nice_name = ugly_name.strip().replace('_', '').capitalize()
print(nice_name)

# → 'Markus'

4.9 Konvertera sträng till lista#

my_string = 'ABCDEF'
my_list = list(my_string)

# my_list → ['A', 'B', 'C', 'D', 'E', 'F']

5. Listor#

Listor är den mest flexibla samlingen i Python och används för att lagra flera värden som hör samman med varandra. (En listas värden kallas även för element eller items.)

En lista skapar man som en variabel med värden separerade med kommatecken. Listans värden ramas in i klammerparenteser [].

5.1 Definiera en lista#

menu = ['kebab', 'pizza', 'sushi']

5.2 Nå ett listvärde#

För att nå ett värde i listan använder man ett positionsnummer. Positionsnummer kallas för index. Den första positionen har index 0.

menu = ['kebab', 'pizza', 'sushi']
first_dish = menu[0]

# first_dish → 'kebab'

5.3 Räkna bakifrån#

Med negativa positionsnummer räknar man bakifrån från sista positionen.

menu = ['kebab', 'pizza', 'sushi']
last_dish = menu[-1]

# last_dish → 'sushi'

5.4 Välj delar av en lista#

Med kolon : kan man ange ett intervall av index som man vill nå. Detta kallas för slicing.

menu = ['kebab', 'pizza', 'sushi', 'tacos']
first_three_dishes = menu[0:3]

# first_three_dishes → ['kebab', 'pizza', 'sushi']

5.5 Tilldela ett värde till en viss position#

menu[0] = 'meatballs'

5.6 Lägga till ett värde till en lista#

menu.append('thai-food')

5.7 Ta reda på längden på en lista eller sträng#

menu = ['kebab', 'pizza', 'sushi']
nr_of_dishes = len(menu)

# nr_of_dishes → 3
name = 'Markus'
string_size = len(name)

# string_size → 5

5.8 Gå igenom/iterera en lista ett värde i taget#

menu = ['pizza', 'kebab', 'sushi']

for dish in menu:
    print(dish)

5.9 Skapa en lista från en textsträng#

Med metoden split kan man dela upp en textsträng i en lista. Som argument anger man vilket tecken som ska användas för att dela upp strängen.

menu_string = 'kebab, pizza, sushi, meatballs'
menu = menu_string.split(',')

# food_list → ['kebab', ' pizza', ' sushi', ' meatballs']

Man kan också använda funktionen list för att dela upp en sträng bokstav för bokstav:

abc_list = list('abc')

# abc_list → ['a', 'b', 'c']

5.10 Konvertera en lista till en sträng#

menu = ['kebab', ' pizza', ' sushi', ' meatballs']
menu_string = ','.join(menu)

# menu_string → 'kebab, pizza, sushi, meatballs'

5.11 Hitta index för ett värde#

List-metoden index returnerar index-numret för första förekomsten av ett värde.


[1,2,3].index(2) # → 1 
[1,2,3].index(4) # → ValueError

5.12 Nästlade listor#

Det är inte ovanligt med nästlade listor, att listor i sin tur innehåller andra listor (eng. nested lists). Inom matematiken kan det fenomenet kallas för matris. För att nå värdena från de 'inre' listorna kan man använda dubbla set av hakparanteser:

lessons = [
    ["Svenska", "Engelska", "Idrott"],  # Måndag
    ["Matematik", "Historia"],          # Tisdag
    ["Programmering", "Programmering"], # Onsdag
    ["Engelska", "Matematik"],          # Torsdag
    ["Programmering", "Idrott"]         # Fredag
]

print(lessons[3][1])

# → Matematik

Man kan också använda dubbla for-loopar för att gå igenom listorna:

lessons = [
    ["Svenska", "Engelska", "Idrott"],  # Måndag
    ["Matematik", "Historia"],          # Tisdag
    ["Programmering", "Programmering"], # Onsdag
    ["Engelska", "Matematik"],          # Torsdag
    ["Programmering", "Idrott"]         # Fredag
]

for day in lessons:
    print('Denna dags lektioner:')
    for lesson in day:
        print(lesson)

5.13 Sortera en lista#

letters = ['B', 'D', 'C', 'A']
letters.sort()

# letters → ['A', 'B', 'C', 'D']

letters.sort(reverse=True)
# letters → ['D', 'C', 'B', 'A']
numbers = [1, 5, 2.4, 0.3, 100]
numbers.sort()

# numbers → [0.3, 1, 2.4, 5, 100]

5.14 Kopiera lista#

Metoden sort förändrar listan som man sorterar. Om man vill ha kvar orginallistan kan man kopiera listan först med metoden copy.

letters = ['D', 'E', 'A', 'B', 'C']

sorted_letters = letters.copy()
sorted_letters.sort()

print(letters)
print(sorted_letters)

# → ['D', 'E', 'A', 'B', 'C']
# → ['A', 'B', 'C', 'D', 'E']

5.15 Räkna förekomst i lista#

Med metoden count() kan man räkna förekomsten av ett värde i en lista.

grades = ['D', 'C', 'A', 'D', 'F', 'D', 'A', 'E', 
          'B', 'D', 'E', 'E', 'F', 'E', 'B', 'F']

nr_of_a = grades.count('A')

print('Antal A:', nr_of_a)

# → 'Antal A: 2'

5.16 Summera en lista#

scores = [12, 34, 56, 12, 32, 34]
print(sum(scores))

# → 180

5.17 Max- och min-värden#

scores = [12, 34, 56, 12, 32, 34]
print(min(scores))

# → 12
scores = [12, 34, 56, 12, 32, 34]
print(max(scores))

# → 56

5.18 Medelvärde#

Här används sum() och len() i kombination för att räkna ut ett medelvärde.

scores = [12, 34, 56, 12, 32, 34]
print(sum(scores) / len(scores))

# → 30.0

6. Villkor - if-satser#

If-satser är en så kallad kontrollstruktur och används för att styra flödet i ett program. En if-sats testar att ett (eller flera) villkor är uppfyllt och utför viss kod endast om villkoren är uppfyllda.

Den kod som ska utföras i if-satsen kallas för kodblock och har 4 mellanslags indrag. (Indentering)

else används för att ange vad som ska göras ifall villkoret inte uppfylls. elif används för att kedja flera villkorstester efter varandra.

6.1 Vanliga operatorer för villkor#

Förklaring
== Lika med
!= Inte lika med
< Mindre än
> Större än
>= Lika eller större än
<= Lika eller mindre än
and Och
or Eller

6.2 Jämförelse av textsträngar#

name = 'Markus'

if name == 'Markus':
   print('Welcome!')
else:
   print('Go away!')

# → 'Welcome!'

6.3 Jämförelse av numeriska värden#

age = 25

if age > 20:
   print('Hello!')
else:
   print('Goodbye')

# → 'Hello!'

6.4 Flera villkor med and#

Med and kan man ange flera villkor som alla måste vara sanna.

username = 'marpet'
password = 'secret'

if username == 'marpet' and password == 'secret':
    print('Welcome!')
else:
    print('Access denied!')

6.5 Flera villkor med or#

Med or kan man ange flera villkor. Det räcker med att ett av villkoren är sant.

if username == 'marpet' or username == 'marpet2':
    print('Welcome!')
else:
    print('Access denied!')

6.6 Else-if - flera jämförelser#

Med elif testas flera villkor efter varandra. När ett villkor är sant avslutas if-satsen.

if role == 'admin':
    print('Welcome admin!')
elif role == 'user':
    print('Welcome user!')
elif role == 'author':
    print('Welcome author!')
else:
    print('Access denied!')

6.7 If och listor#

Med en if-sats kan man kontrollera ifall ett värde finns i en lista.

menu = ['kebab', 'pizza', 'meatballs']

if 'pizza' in menu:
   print('Yes! Pizza!')
else:
   print('Nooooo..... I want pizza!')

# → 'Yes! Pizza!'

6.8 If och strängar#

Med en if-sats kan man kontrollera ifall en textsträng innehåller viss text.

text = 'Python is easy!'

if 'easy' in text:
   print('Correct!')
else:
   print('You are wrong! Practice more!')

# → 'Correct'

6.9 If och funktioner#

Funktioner som returnerar True eller False (booleska värden) kan användas direkt som villkor i if-satser.

if is_logged_in():
   print('Welcome!')
else:
   print('Access denied!')

7. Loopar#

Loopar används när man vill upprepa kod i sitt program. Den kod som ska utföras i loopen indenteras med 4 mellanslag.

7.1 En for-loop med range()#

För att ange hur många gånger en for-loop ska köras är det vanligt att använda en räknare (variabeln i) och funktionen range() som skapar en talserie mellan två heltal.

for i in range(0, 10):
   print('I can count to:', i)

7.2 En for-loop för att gå igenom en lista/sträng#

For-loopar används även för att gå igenom (iterera) listor och strängar.

menu = ['pizza', 'kebab', 'sushi']

for food in menu:
    print(food)
name = 'Markus'

for letter in name:
    print(letter)

7.3 While-loop#

En while-loop körs så länge ett villkor är uppfyllt.

i = 0

while i < 10:
    print('I can count to:', i)
    i += 1

7.4 Evig while-loop#

Om man anger ett villkor som alltid är sant, skapas en evig loop.

while True:
    input('Are we there yet?')

7.5 Avbryta en loop med break#

Man kan använda break för att avbryta en loop.

while True:
    answer = input('Are we there yet?')
    if answer == 'yes':
        print('Finally!')
        break

7.6 Skapa listor med range()#

Funktionen range() kan även användas för att skapa en lista av talserier. Funktionen tar även ett tredje argument som anger stegstorleken (differensen) mellan talen i talserien.

my_list = list(range(0, 50, 10))
print(my_list)

# → [0, 10, 20, 30, 40]

8. Funktioner#

En funktion är namngiven kod som man sedan kan anropa från sitt program. Med funktioner slipper man upprepa sig när man vill göra samma sak flera gånger. Funktioner är också ett sätt att dela upp ett större program i mindre, mer lätthanterliga delar.

8.1 Egen funktion#

def hello():
    print('Hello!')
    print('Have a nice day!')

hello()

8.2 Funktion som tar emot argument#

De värden som skickas in i en funktion kallas för argument.

def hello(name):
    print('Hello', name)

hello('Markus')

8.3 Flera argument - returnera ett värde#

Det är vanligt att en funktion bearbetar information för att sedan skicka tillbaka ett resultat till huvudprogrammet - funktionen returnerar ett värde.

def triangle_area(base, height):
    area = base * height / 2
    return area

my_area = triangle_area(5, 7)
print(my_area)

8.4 Returnera booleska värden#

Det är vanligt med funktioner som returnerar True eller False (booleska värden).

def is_weekend(day):
    if day == 'saturday' or day == 'sunday':
        return True
    else:
        return False

Om funktionen bara testar ett eller flera villkor behöver man inte någon if-sats. Man kan istället returnera resultatet av villkorstestet direkt:

def is_weekend(day):
    return day == 'saturday' or day == 'sunday'

8.5 Variabler inne i funktioner - variable scope#

En variabel som skapas inne i en funktion är lokal, den kan bara nås inifrån själva funktionen. Variabler som definieras på modulnivå (i själva huvudprogrammet) är globala och kan nås inne i funktionen. Var en variabel (eller annat objekt) är tillgänglig kallas inom programmering för variable scope.

# x definieras i huvudprogrammet och är då en global variabel
x = 1

def my_function():
  # x här i funktionen är inte samma som den globala variabeln
  x = 10
  print(x)


my_function()
print(x)

# → 10
# → 1

Globala variabler kan inte utan vidare ändras inifrån en funktion. Om man måste ändra en global variabel i en funktion får man markera det med nyckelordet global först i funktionen.

# x definieras i huvudprogrammet och är då en global variabel
x = 1

def my_function():
    # Vi definierar att x syftar på den globala variabeln
    global x    
    x = 10
    print(x)


my_function()
print(x)

# → 10
# → 10

8.6 Funktioner med keyword-arguments#

Om man vill göra sina funktioner tydligare och flexiblare kan man använda namngivna argument (keyword-arguments). Då namnger man argumenten som funktionen tar emot och anger även standardvärden (eng. default values) för argumenten.

Med namngivna argument behöver man inte hålla koll på ordningen för argumenten vid anrop av funktionen. Och med standardvärden fungerar programmet även om man utelämnar ett argument.

# Funktion med keyword-arguments och default-värden
def triangle_area(base=10, height=10):
    area = base * height / 2
    return area

# Funktionen anropas med de namngivna argumenten
my_area = triangle_area(base=5, height=7)

# Funktionen anropas utan argument - då används standardvärdena
my_area1 = triangle_area()

9. Dictionary - dict#

Datatypen dictionary (dict) är en samling precis som listor. Istället för att de olika elementen representeras av ett positionsnummer (0, 1, 2 etc.) används beskrivande namn. Namnen som identifierar positionerna kallas för keys (sv. nycklar).

9.1 En enkel dictionary#

car = {'brand': 'Volvo', 'color': 'black', 'max_speed': 280}

print(car['max_speed'])

9.2 En dictionary på flera rader#

car = {
    'brand': 'Volvo', 
    'color': 'black', 
    'max_speed': 280,
    'price': 200000,
    'model_year': 2018,
}

9.3 En lista av dictionaries#

products = [
    {
        "name": "Ahlgens bilar",
        "price": 17.5,
        "quantity": 2,
    },
    {
        "name": "Gott och blandat",
        "price": 18.5,
        "quantity": 3,
    },
]

9.4 Gå igenom en dictionary med en for-loop#

Med metoden items() kan man iterera över både nyckeln (key) och värdet (value).

car = {
    'brand': 'Volvo', 
    'color': 'black', 
    'max_speed': 280,
    'price': 200000,
    'model_year': 2018,
}

for key, value in car.items():
    print(key.capitalize(), ':', value)

10. Tuplar och set#

Tuplar och set är samlingar (collections) och alternativ till listor.

De viktigaste skillnaderna mot vanliga listor:

  • Tuplar är inte ändringsbara (de är immutable). Man kan alltså inte ändra dess värden efter att tupeln är skapad.
  • Set kan endast innehålla unika värden. De kan alltså inte innehålla dubbletter. (Set kan liknas vid det matematiska begreppet mängd).

10.1 Definiera en tupel#

my_tuple = ('kebab', 'pizza', 'meatballs')

10.2 Definiera ett set#

my_set = {'kebab', 'pizza', 'meatballs'}

10.3 Skillnaderna mellan listor, tuplar och set#

Egenskap List (list) Tuple (tuple) Set (set)
Ordning Bevaras Bevaras Ingen garanterad ordning
Dubbletter Tillåts Tillåts Ej tillåtna (unika element)
Ändringsbar Ja Nej (immutable) Ja (men endast unika element)
Sökning (x in ...) Långsammare Långsammare Mycket snabb
Använd som dict-nyckel Nej Ja Nej
Vanliga användningsområden Listor av data som kan ändras, ordning viktig Koordinater, fasta värden, säkra datastrukturer Unika värden, mängdoperationer (union, snitt, skillnad)
Prestanda Flexibel men lite långsammare Snabbare än listor Snabb för medlemskap och mängdlogik

11. Kommentera kod#

För att öka tydligheten i koden (för sig själv och för andra) bör man använda kommentarer. För mer komplexa program brukar kommenterar för funktioner och klasser vara mer utförlig och kommentarerna används även för att automatiskt generera dokumentation över koden. (Dokumentation \= text som i detalj beskriver hur koden fungerar.)

11.1 Riktlinjer för kommentarer#

Se till att uppdatera kommentarer ifall koden ändras:

"Comments that contradict the code are worse than no comments. Always update comments if the code changes!"

Undvik överflödiga kommentarer:

"Avoid comments that are obvious from the code itself."

Använd helst engelska i dina kommentarer:

"Python coders from non-English speaking countries: please write your comments in English, unless you are 120% sure that the code will never be read by people who don’t speak your language."

11.2 Enrads-kommentarer#

"Comments should be complete sentences. If a comment is a phrase or sentence, its first word should be capitalized, unless it is an identifier or acronym."

# Beräkna summan av alla tal i listan
total = sum(numbers)

Enrads-kommentarer bör placeras på en egen rad eller på samma rad som koden. Eftersom Pythonkod (i jämförelse med andra språk) är lätt att läsa och förstå bör man bara kommentera kod som verkligen behöver förklaras.

11.3 Blockkommentarer#

"Block comments generally apply to some (or all) code that follows them, and are indented to the same level as that code. Each line of a block comment starts with a # and a single space." — PEP 8, Comments

# Loopa igenom alla användare och
# skriv ut deras namn och ålder
for user in users:
    print(user.name, user.age)

11.4 Docstrings (dokumentationssträngar)#

Docstrings är mer utförliga kommentarer som förklarar en funktion, modul eller

"Docstrings are denoted by triple quotes """ and are used to describe all public classes and functions."

def add(a, b):
    """Returnerar summan av två tal."""
    return a + b

Eller ännu mer utförligt där även parametrar och returvärden dokumenteras:

def add(a, b):
    """
    Returnerar summan av två tal.

    Parametrar:
    a (int eller float): Första talet
    b (int eller float): Andra talet

    Returnerar:
    int eller float: Summan av a och b
    """
    return a + b

Alla citat ovan kommer från Pythons officiella stilguide: PEP (Python Enhancment Proposals) — PEP 8, Docstrings.

12. Filer: läsa och skriv#

12.1 Öppna och läs in en hel textfil#

with open('names.txt') as file:
    content = file.read()

print(content)

12.2 Läs en textfil rad för rad#

Med en for-loop kan vi gå igenom textfilen rad-för-rad. Genom att använda metoden strip() tar vi bort tecknet för "ny rad" i slutet på varje textrad.

with open('names.txt') as file:
    for line in file:
        print(line.strip())

12.3 Läs in en textfil till en lista#

with open('names.txt') as name_file:
    names = name_file.readlines()

12.4 Skriv till en textfil#

Detta tar bort eventuellt tidigare innehåll.

with open('textfile.txt', 'w') as textfile:
    textfile.write('Hello world!')

12.5 Lägg till i befintlig fil#

with open('textfile.txt', 'a') as textfile:
    textfile.write('Hello world!')

12.6 Infoga ny rad med tecknen: \n#

Om man vill lägga till en radbrytning i texten som man skriver kan man använda teckenkombinationen: \n

with open('textfile.txt', 'a') as textfile:
    textfile.write('Hello world!\n')
    textfile.write('Hello again!')

12.7 Lägeskoder vid öppning av filer#

Lägeskod Betydelse Exempel Kommentar
"r" Läsning (read) open("fil.txt", "r") Filen måste redan finnas
"w" Skrivning (write) open("fil.txt", "w") Skriver över hela filen
"a" Append (lägg till) open("fil.txt", "a") Skriver i slutet av filen
"b" Binärt läge open("bild.png", "rb") För filer som inte är text
"x" Skapa ny fil open("nyfil.txt", "x") Fel om filen redan finns

13. Modulen random#

Med modulen random kan man använda slump i sina program.

13.1 Importera moduler#

Moduler som random behöver importeras innan de används. Import av moduler görs högst upp i ens kod.

import random

13.2 Slumpar ett heltal mellan vissa värden#

r2 = random.randrange(10, 20)

13.3 Slumpar ett alternativ från en lista#

menu = ["pizza", "kebab", "pasta"]
food = random.choice(menu)

13.4 Slumpar ett decimaltal mellan 0 och 1#

r1 = random.random()

13.5 Deterministisk slump - ange seed#

Om man vill återupprepa en slumpning kan man ange en så kallad seed för slumpningen. Om man använder samma seed får man alltid samma resultat för slumpfunktionerna.

random.seed(10)

13.6 Slumpmässigt urval ur en lista#

Om man vill slumpa fram flera värden från en lista (utan risk för dubbletter) kan man använda metoden sample() - det man får tillbaka är en lista med ett slumpmässigt urval.

import random 

# Alla elever i klassen
students = ['Anna', 'Bertil', 'Ceasar', 'David', 
            'Erik', 'Frida', 'Gert', 'Henrietta']

# Tre slumpmässiga elever
volunteers = random.sample(students, 3)

print(volunteers)

13.7 Slumpa ordningen i en lista#

Om man vill blanda en lista (slumpa ordningen av dess värden) kan man använda metoden shuffle.

import random 

# Alla elever i klassen
students = ['Anna', 'Bertil', 'Ceasar', 'David', 
            'Erik', 'Frida', 'Gert', 'Henrietta']

# Blanda listan med shuffle
random.shuffle(students)
print(students)

14. Modulen datetime#

Modulen datetime används för att hantera tid och datum.

14.1 Ta fram dagens datum#

import datetime

today = datetime.date.today()

14.2 Ta fram ett annat datum#

christmas = datetime.date(2025, 12, 24)

14.3 Ta fram ett datum från en sträng i iso-format#

christmas = datetime.date.fromisoformat("2025-12-24")

14.4 Ta fram veckodag för datum#

Metoden weekday() ger veckodagens nummer. Måndag \= 0, tisdag \= 1 etc.

christmas = datetime.date(2025, 12, 24)
print(christmas.weekday())

# → 2

14.5 Räkna med datum#

christmas = datetime.date(2025, 12, 24)
today = datetime.date.today()

time_to_christmas = christmas - today

print(time_to_christmas)
today = datetime.date.today()

ten_days = datetime.timedelta(days = 10)
in_ten_days = today + ten_days

print(in_ten_days)

14.6 Datetime - datum och tid tillsammans#

now = datetime.datetime.now()

print(now)
# → 2025-09-16 10:05:21.723942

print(now.time())
# → 10:05:21.723942

print(now.date())
# → 2025-09-16

14.7 Översikt över modulen datetime#

Klass Egenskaper (attribut) Vanliga metoder
date year, month, day today(), fromisoformat(), weekday(), isoweekday(), isoformat(), replace()
datetime year, month, day, hour, minute, second, microsecond now(), today(), utcnow(), fromtimestamp(), strftime(), strptime(), date(), time(), replace()
time hour, minute, second, microsecond isoformat(), replace()
timedelta days, seconds, microseconds total_seconds() + stöder aritmetik med datum/tid (+, -)

15. Modulen CSV#

CSV (comma separated values) är ett vanligt förekommande textformat för informationsutbyte mellan olika program och system. CSV passar bäst för tabell-data och man kan exportera CSV-filer från både Excel och Google Sheets.

I CSV representeras en tabellrad av en textrad och varje cell/kolumn separeras med ett komma (eller annat valfritt tecken).

Ett kalkylark med följande innehåll:

id name age department salary
101 Alice 28 Engineering 70000
102 Bob 35 Marketing 65000
103 Charlie 22 Sales 40000
104 Diana 45 HR 80000
105 Edward 29 Engineering 72000

… ser ut så här i CSV-format:

id,name,age,department,salary
101,Alice,28,Engineering,70000
102,Bob,35,Marketing,65000
103,Charlie,22,Sales,40000
104,Diana,45,HR,80000
105,Edward,29,Engineering,72000

15.1 Läsa och tolka CSV-fil som lista#

Med metoden reader() från modulen csv läses varje rad i CSV-filen in som en lista. Genom funktionen next() hoppas första raden över (som innehåller kolumnrubrikerna).

import csv

with open('employees.csv', newline="") as csvfile:
    reader = csv.reader(csvfile)
    next(reader)
    for employee in reader:
        print(employee[1])

15.2 Läsa och tolka CSV-fil som dictionary#

Med klassen DictReader() från modulen csv läses varje rad in som en dictionary.

import csv

with open('employees.csv', newline="") as csvfile:
  reader = csv.DictReader(csvfile)
  for employee in reader:
    print(employee['name'])
    print(employee['salary'])

16. Felhantering#

En viktig del i programmering är att hantera eventuella fel som kan uppstå i ens program.

16.1 Tre typer av fel#

Typ av fel När det uppstår Kan fångas med try/except? Exempel
Syntaxfel När programmet tolkas ❌ Nej Saknat kolon, fel indentering
Körningsfel (Exception) Under körning ✅ Ja ZeroDivisionError, ValueError, NameError
Logiskt fel Under körning (utan krasch) ❌ Nej Fel formel, fel algoritm

Körningsfel (exceptions) kan fångas upp och hanteras med try/except.

16.2 Try och except#

Den kod man misstänker kan utlösa ett körningsfel sätts i ett kodblock under try. Med except anger man vilket fel som förväntas och i ett kodblock under anger man hur felet ska hanteras. I exemplet nedan skriver vi ut ett felmeddelande och avbryter programmet med funktionen exit.

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

except ValueError:
  print("Du måste ange ett heltal!")
  exit()

16.3 Felaktig input - försök igen#

Ett sätt att hantera felaktig input är att be användaren att försöka igen. Det går att göra med en evig loop som bryts (med break) när inget fel inträffar.

while True:
  try:
    age = int(input("Hur gammal är du?"))
    break

  except ValueError:
    print("Du måste ange ett heltal.")

print(f"Du är {age} år gammal!")

16.4 Några vanliga exceptions#

Feltyp När det händer Exempel
ValueError När ett värde inte kan tolkas korrekt int("hej")
TypeError När du blandar fel datatyper "hej" + 5
ZeroDivisionError När du dividerar med noll 10 / 0
IndexError När du försöker nå ett index som inte finns lista[10]
KeyError När en nyckel saknas i en dictionary min_dict["namn"] om nyckeln inte finns
FileNotFoundError När du försöker öppna en fil som inte finns open("saknas.txt")
NameError När en variabel inte är definierad print(x) utan att x finns
AttributeError När ett objekt saknar ett visst attribut "hej".append("då")
ImportError När ett importerat paket inte hittas import felpaket