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 datastrukturar

Når du arbeider med data frå eksperiment og sensorar, treng du ofte å lagre mange verdiar saman – til dømes 100 temperaturmålingar, ein serie med tidspunkt, eller namna på ulike kjemiske stoff. I Python brukar vi lister til dette.

Ei liste er ei ordna samling av verdiar som du kan leggje til, fjerne, sortere og leite gjennom. Lister er den mest brukte datastrukturen i Python og er heilt sentrale for databehandling i teknologi og forsking.

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

Lister i Python

Ei liste er ei ordna samling av verdiar, avgrensa med hakeparentesar [] og skild 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 eigenskapar ved lister:
- Ordna: Elementa har ei bestemt rekkjefølgje
- Indeksert: Kvart element har ein indeks (posisjon) som startar på 0
- Foranderleg (mutable): Du kan leggje til, fjerne og endre element
- Kan innehalde alle datatypar, inkludert andre lister

Lengda til ei liste finn du med len():

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

Indeksering – hente ut element

Kvart element i ei liste har ein indeks som startar på 0:

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

Hent ut element med hakeparentesar:

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 ein del av lista:

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 òg endre eit element ved å tilordne ein ny verdi:

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

OBS: Dersom du prøver å hente ut ein indeks som ikkje finst (f.eks. frukter[10]), får du ein IndexError.

✏️Døme: Temperaturdata

Gitt lista temp = [15.2, 18.7, 22.1, 19.8, 24.3, 20.5, 17.6] (sju daglege temperaturmålingar). Finn: a) Temperaturen på dag 1 (indeks 0), b) Temperaturen på den siste dagen, c) Temperaturane frå 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]

Hugs at indekseringa startar på 0, så «dag 1» er indeks 0 og «dag 3» er indeks 2. Ved slicing er startindeksen inkludert, men sluttindeksen er ikkje inkludert – temp[2:5] gir indeks 2, 3 og 4.

📝Oppgave 1

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

Listemetodar

Python har mange innebygde metodar for å manipulere lister:

MetodeSkildringDøme
append(x)Legg til x på sluttenliste.append(42)
insert(i, x)Set inn x på indeks iliste.insert(0, "ny")
remove(x)Fjernar første førekomst av xliste.remove(42)
pop(i)Fjernar og returnerer element på indeks iliste.pop(2)
sort()Sorterer lista (endrar originalen)liste.sort()
reverse()Snur rekkjefølgjaliste.reverse()
count(x)Tel førekomstar av xliste.count(5)
index(x)Finn indeks til første xliste.index("Ola")

Innebygde funksjonar som verkar på lister:
FunksjonSkildringDøme
len(liste)Tal på elementlen([1, 2, 3]) → 3
sum(liste)Summen av talasum([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]

Byggje opp lister dynamisk

I teknologi og forsking byggjer vi ofte opp lister trinn for trinn – til dømes ved å lese inn sensordata i ei 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}")

Skilnaden 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 behalde originalen, og .sort() når du er ferdig med den opphavlege rekkjefølgja.

✏️Døme: Analyse av eksperimentdata

Du har målt pH-verdiar i ei elv på 8 ulike stader: [7.2, 6.8, 7.5, 6.3, 7.1, 6.9, 7.8, 6.5]. Skriv eit program som finn gjennomsnitt, høgaste og lågaste verdi, sorterer målingane og tel kor 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

Kva skriv følgjande kode ut?

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

Iterasjon over lister
Iterasjon tyder å gå gjennom kvart element i ei liste. Det finst fleire måtar å gjere dette på i Python:

Metode 1: Direkte iterasjon (vanlegast)

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 – ein kompakt måte å lage nye lister på:

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 – til dømes å filtrere ut målingar som overstig ein grenseverdi.

✏️Døme: Filtrering av sensordata

Du har ei liste med 10 lysmålingar (i lux): [450, 120, 890, 35, 670, 15, 780, 200, 950, 80]. Skriv eit program som filtrerer ut alle målingar under 100 lux (mørke forhold) og reknar ut gjennomsnittet av dei attståande målingane.

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] lagar ei ny liste med berre dei verdiane som oppfyller vilkåret. Dette er ein svært nyttig teknikk for å filtrere eksperimentdata.

📝Oppgave 3

Kva blir resultatet av følgjande kode?

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

Oppsummering – Lister og datastrukturar

Du har lært å arbeide med den viktigaste datastrukturen i Python:

KonseptForklaringDøme
Opprette listeHakeparentesar med komma[1, 2, 3]
IndekseringHente element med posisjonliste[0], liste[-1]
SlicingHente ein del av listaliste[1:4]
append()Leggje til på sluttenliste.append(x)
sort() / sorted()Sortere listaliste.sort()
len/sum/min/maxInnebygde funksjonarsum(liste)
List comprehensionKompakt listebygging[x**2 for x in tall]
IterasjonGå gjennom alle elementfor x in liste:

Viktige prinsipp:
- Indekseringa startar alltid på 0
- Negative indeksar tel bakfrå (-1 = siste)
- Ved slicing er sluttindeksen ikkje inkludert
- sort() endrar originallista, sorted() lagar ein kopi
Lister er uunnverlege for databehandling – frå innsamling av sensordata til analyse og presentasjon av resultat.
📝Oppgave 4

Skriv eit Python-program som ber brukaren om å skrive inn karakterar (heiltal 1–6) til dei skriv «ferdig». Programmet skal lagre karakterane i ei liste og deretter skrive ut: talet på karakterar, gjennomsnittskarakteren (med éin desimal), beste og dårlegaste karakter, og lista sortert frå best til dårlegast.

📝Oppgave 5

Skriv eit program som simulerer eit enkelt vêrstasjons-datasystem. Programmet skal: a) Generere 30 tilfeldige temperaturmålingar mellom -10.0 og 30.0 °C (bruk random.uniform(-10, 30)). b) Rekne ut gjennomsnitt, medianen (midtverdi i sortert liste), høgaste og lågaste temperatur. c) Telje talet på dagar med frost (under 0 °C), lune dagar (0–20 °C) og varme dagar (over 20 °C). d) Skrive ut ein pent formatert rapport med alle resultata.

📝Oppgave 6

Skriv eit program som les inn ei liste med namn og tilhøyrande poeng (frå ein konkurranse). Programmet skal: a) Be brukaren skrive inn namn og poeng for minst 5 deltakarar (lagre i to parallelle lister). b) Finne og skrive ut vinnaren (den med flest poeng). c) Sortere deltakarane etter poeng (synkande) og skrive ut ei resultatliste med plassering. Bruk funksjonar 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.