Tilbake
5.4
Funksjoner og moduler

5.4 Funksjoner og moduler

Definere funksjoner, parametre, returverdier og gjenbruk av kode.

30 min
5 oppgaver
FunksjonerParametreReturverdierModuler
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 5 oppgaver

Lister og datastrukturer

Når du arbeider med data fra eksperimenter og sensorer, trenger du ofte å lagre mange verdier sammen – for eksempel 100 temperaturmålinger, en serie med tidspunkter, eller navnene på ulike kjemiske stoffer. I Python bruker vi lister til dette.

En liste er en ordnet samling av verdier som du kan legge til, fjerne, sortere og lete gjennom. Lister er den mest brukte datastrukturen i Python og er helt sentrale for databehandling i teknologi og forskning.

I dette kapittelet lærer du å:
- Opprette og bruke lister
- Hente ut elementer med indeksering
- Gå gjennom lister med iterasjon
- Bruke innebygde funksjoner for sortering og analyse

Lister i Python

En liste er en ordnet samling av verdier, avgrenset med hakeparenteser [] og separert med komma.

# Ulike typer lister:
temperaturer = [18.3, 21.7, 19.5, 23.1, 17.8]
elever = ["Ola", "Kari", "Per", "Liv"]
primtall = [2, 3, 5, 7, 11, 13]
blandet = ["tekst", 42, 3.14, True]    # Kan blande typer
tom_liste = []                          # Tom liste

Viktige egenskaper ved lister:
- Ordnet: Elementene har en bestemt rekkefølge
- Indeksert: Hvert element har en indeks (posisjon) som starter på 0
- Foranderlig (mutable): Du kan legge til, fjerne og endre elementer
- Kan inneholde alle datatyper, inkludert andre lister

Lengden til en liste finner du med len():

print(len(temperaturer))   # 5
print(len(tom_liste))      # 0

Indeksering – hente ut elementer

Hvert element i en liste har en indeks som starter på 0:

frukter = ["eple", "banan", "appelsin", "druer"]
#  indeks:    0       1         2          3

Hent ut elementer med hakeparenteser:

print(frukter[0])    # eple      (første element)
print(frukter[2])    # appelsin  (tredje element)
print(frukter[-1])   # druer     (siste element)
print(frukter[-2])   # appelsin  (nest siste)

Slicing – hent ut en del av listen:

tall = [10, 20, 30, 40, 50, 60]

print(tall[1:4])     # [20, 30, 40]  (indeks 1, 2, 3)
print(tall[:3])      # [10, 20, 30]  (fra start til indeks 3)
print(tall[3:])      # [40, 50, 60]  (fra indeks 3 til slutt)

Du kan også endre et element ved å tilordne en ny verdi:

frukter[1] = "mango"
print(frukter)       # ["eple", "mango", "appelsin", "druer"]

OBS: Hvis du prøver å hente ut en indeks som ikke finnes (f.eks. frukter[10]), får du en IndexError.

✏️Eksempel: Temperaturdata

Gitt listen temp = [15.2, 18.7, 22.1, 19.8, 24.3, 20.5, 17.6] (syv daglige temperaturmålinger). Finn: a) Temperaturen på dag 1 (indeks 0), b) Temperaturen på den siste dagen, c) Temperaturene fra dag 3 til dag 5.

temp = [15.2, 18.7, 22.1, 19.8, 24.3, 20.5, 17.6]

# a) Dag 1 (indeks 0):
print(f"Dag 1: {temp[0]} °C")       # 15.2 °C

# b) Siste dag:
print(f"Siste dag: {temp[-1]} °C")  # 17.6 °C

# c) Dag 3 til dag 5 (indeks 2, 3, 4):
print(f"Dag 3–5: {temp[2:5]}")      # [22.1, 19.8, 24.3]

Husk at indeksering starter på 0, så «dag 1» er indeks 0 og «dag 3» er indeks 2. Ved slicing er startindeksen inkludert, men sluttindeksen er ikke inkludert – temp[2:5] gir indeks 2, 3 og 4.

📝Oppgave 1

Gitt data = [10, 20, 30, 40, 50]. Hva er verdien av data[3]?

Listemetoder

Python har mange innebygde metoder for å manipulere lister:

MetodeBeskrivelseEksempel
append(x)Legger til x på sluttenliste.append(42)
insert(i, x)Setter inn x på indeks iliste.insert(0, "ny")
remove(x)Fjerner første forekomst av xliste.remove(42)
pop(i)Fjerner og returnerer element på indeks iliste.pop(2)
sort()Sorterer listen (endrer originalen)liste.sort()
reverse()Snur rekkefølgenliste.reverse()
count(x)Teller forekomster av xliste.count(5)
index(x)Finner indeks til første xliste.index("Ola")

Innebygde funksjoner som virker på lister:
FunksjonBeskrivelseEksempel
len(liste)Antall elementerlen([1, 2, 3]) → 3
sum(liste)Summen av tallenesum([1, 2, 3]) → 6
min(liste)Minste verdimin([3, 1, 2]) → 1
max(liste)Største verdimax([3, 1, 2]) → 3
sorted(liste)Ny sortert kopisorted([3, 1, 2]) → [1, 2, 3]

Bygge opp lister dynamisk

I teknologi og forskning bygger vi ofte opp lister trinn for trinn – for eksempel ved å lese inn sensordata i en løkke:

malinger = []    # Start med tom liste

for i in range(5):
    verdi = float(input(f"Måling {i + 1}: "))
    malinger.append(verdi)    # Legg til ny måling

print(f"Du skrev inn: {malinger}")
print(f"Gjennomsnitt: {sum(malinger) / len(malinger):.1f}")

Forskjellen mellom sort() og sorted():

tall = [5, 2, 8, 1, 9]

# sort() endrer originalen:
tall.sort()
print(tall)           # [1, 2, 5, 8, 9]  (originalen er endret)

# sorted() lager en ny liste:
tall = [5, 2, 8, 1, 9]
ny = sorted(tall)
print(ny)             # [1, 2, 5, 8, 9]  (ny sortert liste)
print(tall)           # [5, 2, 8, 1, 9]  (originalen er uendret)

Bruk sorted() når du vil beholde originalen, og .sort() når du er ferdig med den opprinnelige rekkefølgen.

✏️Eksempel: Analyse av eksperimentdata

Du har målt pH-verdier i en elv på 8 ulike steder: [7.2, 6.8, 7.5, 6.3, 7.1, 6.9, 7.8, 6.5]. Skriv et program som finner gjennomsnitt, høyeste og laveste verdi, sorterer målingene og teller hvor mange som er under 7.0 (sur).

ph_verdier = [7.2, 6.8, 7.5, 6.3, 7.1, 6.9, 7.8, 6.5]

# Grunnleggende statistikk:
gjennomsnitt = sum(ph_verdier) / len(ph_verdier)
hoyest = max(ph_verdier)
lavest = min(ph_verdier)

# Tell sure prøver (pH < 7.0):
antall_sure = 0
for ph in ph_verdier:
    if ph < 7.0:
        antall_sure = antall_sure + 1

# Sortert oversikt:
sortert = sorted(ph_verdier)

print(f"Antall målinger: {len(ph_verdier)}")
print(f"Gjennomsnitt pH: {gjennomsnitt:.2f}")
print(f"Laveste pH: {lavest}")
print(f"Høyeste pH: {hoyest}")
print(f"Sortert: {sortert}")
print(f"Antall sure prøver (pH < 7): {antall_sure}")

Utskrift:

Antall målinger: 8
Gjennomsnitt pH: 7.01
Laveste pH: 6.3
Høyeste pH: 7.8
Sortert: [6.3, 6.5, 6.8, 6.9, 7.1, 7.2, 7.5, 7.8]
Antall sure prøver (pH < 7): 4
📝Oppgave 2

Hva skriver følgende kode ut?

tall = [3, 1, 4, 1, 5]
tall.append(9)
tall.sort()
print(tall[0], tall[-1])

Iterasjon over lister
Iterasjon betyr å gå gjennom hvert element i en liste. Det finnes flere måter å gjøre dette på i Python:

Metode 1: Direkte iterasjon (vanligst)

farger = ["rød", "grønn", "blå"]
for farge in farger:
    print(farge)

Metode 2: Iterasjon med indeks

for i in range(len(farger)):
    print(f"Indeks {i}: {farger[i]}")

Metode 3: enumerate() – gir både indeks og verdi

for i, farge in enumerate(farger):
    print(f"{i}: {farge}")

List comprehension – en kompakt måte å lage nye lister:

tall = [1, 2, 3, 4, 5]
kvadrater = [x ** 2 for x in tall]
print(kvadrater)   # [1, 4, 9, 16, 25]

# Med betingelse:
store = [x for x in tall if x > 3]
print(store)       # [4, 5]

List comprehension er spesielt nyttig for databehandling – for eksempel å filtrere ut målinger som overstiger en grenseverdi.

✏️Eksempel: Filtrering av sensordata

Du har en liste med 10 lysmålinger (i lux): [450, 120, 890, 35, 670, 15, 780, 200, 950, 80]. Skriv et program som filtrerer ut alle målinger under 100 lux (mørke forhold) og beregner gjennomsnittet av de gjenværende målingene.

malinger = [450, 120, 890, 35, 670, 15, 780, 200, 950, 80]

# Filtrer med list comprehension:
lyse = [m for m in malinger if m >= 100]
morke = [m for m in malinger if m < 100]

print(f"Alle målinger: {malinger}")
print(f"Lyse målinger (>= 100 lux): {lyse}")
print(f"Mørke målinger (< 100 lux): {morke}")

if len(lyse) > 0:
    snitt = sum(lyse) / len(lyse)
    print(f"Gjennomsnitt (uten mørke): {snitt:.0f} lux")

Utskrift:

Alle målinger: [450, 120, 890, 35, 670, 15, 780, 200, 950, 80]
Lyse målinger (>= 100 lux): [450, 120, 890, 670, 780, 200, 950]
Mørke målinger (< 100 lux): [35, 15, 80]
Gjennomsnitt (uten mørke): 580 lux

List comprehension [m for m in malinger if m >= 100] lager en ny liste med bare de verdiene som oppfyller betingelsen. Dette er en svært nyttig teknikk for å filtrere eksperimentdata.

📝Oppgave 3

Hva blir resultatet av følgende kode?

tall = [2, 4, 6, 8, 10]
resultat = [x * 3 for x in tall if x > 5]
print(resultat)

Oppsummering – Lister og datastrukturer

Du har lært å arbeide med Pythons viktigste datastruktur:

KonseptForklaringEksempel
Opprette listeHakeparenteser med komma[1, 2, 3]
IndekseringHente element med posisjonliste[0], liste[-1]
SlicingHente en del av listenliste[1:4]
append()Legge til på sluttenliste.append(x)
sort() / sorted()Sortere listenliste.sort()
len/sum/min/maxInnebygde funksjonersum(liste)
List comprehensionKompakt listebygging[x**2 for x in tall]
IterasjonGå gjennom alle elementerfor x in liste:

Viktige prinsipper:
- Indeksering starter alltid på 0
- Negative indekser teller bakfra (-1 = siste)
- Ved slicing er sluttindeksen ikke inkludert
- sort() endrer originallisten, sorted() lager en kopi
Lister er uunnværlige for databehandling – fra innsamling av sensordata til analyse og presentasjon av resultater.
📝Oppgave 4

Skriv et Python-program som ber brukeren om å skrive inn karakterer (heltall 1–6) til de skriver «ferdig». Programmet skal lagre karakterene i en liste og deretter skrive ut: antall karakterer, gjennomsnittskarakteren (med én desimal), beste og dårligste karakter, og listen sortert fra best til dårligst.

📝Oppgave 5

Skriv et program som simulerer et enkelt værstasjons-datasystem. Programmet skal: a) Generere 30 tilfeldige temperaturmålinger mellom -10.0 og 30.0 °C (bruk random.uniform(-10, 30)). b) Beregne gjennomsnitt, medianen (midtverdi i sortert liste), høyeste og laveste temperatur. c) Telle antall dager med frost (under 0 °C), lune dager (0–20 °C) og varme dager (over 20 °C). d) Skrive ut en pent formatert rapport med alle resultatene.

📝Oppgave 6

Skriv et program som leser inn en liste med navn og tilhørende poeng (fra en konkurranse). Programmet skal: a) Be brukeren skrive inn navn og poeng for minst 5 deltakere (lagre i to parallelle lister). b) Finne og skrive ut vinneren (den med flest poeng). c) Sortere deltakerne etter poeng (synkende) og skrive ut en resultatliste med plassering. Bruk funksjoner for å strukturere programmet.

Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.