Tilbake
5.3
Kontrollstrukturer

5.3 Kontrollstrukturer

If-setninger, for-løkker og while-løkker.

35 min
6 oppgaver
If-setningerFor-løkkerWhile-løkkerBetingelser
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 6 oppgaver

Funksjonar og modular

Etter kvart som programma dine blir lengre og meir komplekse, blir det viktig å organisere koden godt. Funksjonar lèt deg samle relaterte instruksjonar i gjenbrukbare blokker med eit skildrande namn. I staden for å skrive den same koden på nytt kvar gong du treng han, kan du definere ein funksjon éin gong og kalle han så mange gonger du vil.

Modular lèt deg bruke funksjonar som andre har skrive – til dømes den innebygde math-modulen i Python med matematiske funksjonar, eller random-modulen for tilfeldige tal.

I dette kapittelet lærer du å:
- Definere eigne funksjonar med def
- Bruke parametrar for å sende inn data
- Bruke returverdiar for å hente ut resultat
- Importere og bruke modular

Funksjonar

Ein funksjon er ei namngitt blokk med kode som utfører ei bestemt oppgåve. Du definerer funksjonen med nøkkelordet def, og kallar han ved å skrive namnet med parentesar.

Enklaste form – funksjon utan parametrar:

def hils():
    print("Hei og velkommen!")
    print("Klar for programmering?")

# Kalle funksjonen:
hils()    # Skriver ut de to linjene
hils()    # Kan kalles flere ganger

Funksjonen blir ikkje utført av seg sjølv – han blir berre køyrd når du kallar han (skriv namnet med parentesar). Du kan kalle han så mange gonger du ønskjer.

Namnekonvensjonar:
- Bruk snake_case (små bokstavar med understrek)
- Vel skildrande namn som forklarar kva funksjonen gjer
- Døme: beregn_areal(), les_temperatur(), skriv_rapport()

Parametrar og argument

Parametrar gjer funksjonar fleksible – dei lèt deg sende inn ulike data kvar gong du kallar funksjonen.

def hils_person(navn):       # 'navn' er en parameter
    print(f"Hei, {navn}!")

hils_person("Ola")           # "Ola" er et argument
hils_person("Kari")          # "Kari" er et argument

Du kan ha fleire parametrar, skilde med komma:

def beskriv_maling(sted, temperatur, tid):
    print(f"Sted: {sted}")
    print(f"Temperatur: {temperatur} °C")
    print(f"Tidspunkt: {tid}")

beskriv_maling("Oslo", 18.5, "14:30")
beskriv_maling("Bergen", 15.2, "09:00")

Standardverdiar lèt deg gi parametrar førehandsdefinerte verdiar:

def beregn_kraft(masse, akselerasjon=9.81):
    kraft = masse * akselerasjon
    print(f"Kraft: {kraft:.1f} N")

beregn_kraft(10)           # Bruker standardverdien 9.81
beregn_kraft(10, 3.7)      # Overstyrer med 3.7 (f.eks. Mars)
✏️Døme: Funksjon for temperaturomrekning

Skriv ein funksjon celsius_til_fahrenheit(celsius) som reknar om Celsius til Fahrenheit, og ein funksjon fahrenheit_til_celsius(fahrenheit) som reknar den andre vegen. Test begge.

def celsius_til_fahrenheit(celsius):
    fahrenheit = celsius * 1.8 + 32
    print(f"{celsius} °C = {fahrenheit:.1f} °F")

def fahrenheit_til_celsius(fahrenheit):
    celsius = (fahrenheit - 32) / 1.8
    print(f"{fahrenheit} °F = {celsius:.1f} °C")

# Test:
celsius_til_fahrenheit(0)      # 0 °C = 32.0 °F
celsius_til_fahrenheit(100)    # 100 °C = 212.0 °F
fahrenheit_til_celsius(98.6)   # 98.6 °F = 37.0 °C

Kvar funksjon har eit tydeleg namn som skildrar kva han gjer, og tek inn éin parameter. Ved å skrive utrekninga som ein funksjon kan vi enkelt gjenbruke han med ulike verdiar.

📝Oppgave 1

Kva skriv følgjande kode ut?

def doble(x):
    print(x * 2)

doble(7)

Returverdiar

Ein funksjon kan returnere ein verdi tilbake til staden han blei kalla frå, ved å bruke nøkkelordet return.

def beregn_areal(radius):
    areal = 3.14159 * radius ** 2
    return areal

# Bruk returverdien:
mitt_areal = beregn_areal(5.0)
print(f"Arealet er {mitt_areal:.2f}")  # Arealet er 78.54

Skilnaden mellom print() og return:
- print() viser verdien på skjermen, men lagrar han ikkje
- return sender verdien tilbake slik at han kan brukast vidare i programmet

# Med print – kan ikke bruke resultatet videre:
def areal_print(r):
    print(3.14159 * r ** 2)

# Med return – resultatet kan lagres og brukes:
def areal_return(r):
    return 3.14159 * r ** 2

resultat = areal_return(3.0)      # resultat = 28.27...
dobbelt = resultat * 2             # Kan brukes videre!

Ein funksjon kan returnere fleire verdiar ved å skilje dei med komma:

def beregn_sirkel(radius):
    areal = 3.14159 * radius ** 2
    omkrets = 2 * 3.14159 * radius
    return areal, omkrets

a, o = beregn_sirkel(5.0)
print(f"Areal: {a:.1f}, Omkrets: {o:.1f}")

✏️Døme: Statistikkfunksjonar

Skriv ein funksjon beregn_gjennomsnitt(verdier) som tek inn ei liste med tal og returnerer gjennomsnittet. Skriv òg ein funksjon finn_maks(verdier) som returnerer den høgaste verdien.

def beregn_gjennomsnitt(verdier):
    total = 0
    for v in verdier:
        total = total + v
    return total / len(verdier)

def finn_maks(verdier):
    hoyest = verdier[0]
    for v in verdier:
        if v > hoyest:
            hoyest = v
    return hoyest

# Test med temperaturdata:
temperaturer = [18.3, 21.7, 19.5, 23.1, 17.8]

snitt = beregn_gjennomsnitt(temperaturer)
maks = finn_maks(temperaturer)

print(f"Gjennomsnitt: {snitt:.1f} °C")    # 20.1 °C
print(f"Høyeste: {maks} °C")               # 23.1 °C

Begge funksjonane brukar return for å sende resultatet tilbake. Vi kan deretter lagre resultata i variablar og bruke dei vidare. Funksjonen len(verdier) gir talet på element i lista.

📝Oppgave 2

Kva er verdien av resultat etter at følgjande kode er køyrt?

def legg_til(a, b):
    return a + b

def doble(x):
    return x * 2

resultat = doble(legg_til(3, 4))

Modular

Ein modul er ei fil med Python-kode som inneheld funksjonar, variablar og klassar som kan gjenbrukast i andre program. Python har mange innebygde modular som er klare til bruk.

Importere ein heil modul:

import math

print(math.pi)           # 3.141592653589793
print(math.sqrt(25))     # 5.0
print(math.sin(math.pi)) # ~0 (sinus til pi)

Importere bestemte funksjonar:

from math import sqrt, pi

print(pi)          # 3.141592653589793
print(sqrt(25))    # 5.0 (trenger ikke 'math.' foran)

Nyttige innebygde modular for teknologi og forsking:

ModulSkildringDøme
mathMatematiske funksjonarmath.sqrt(), math.log()
randomTilfeldige talrandom.randint(), random.uniform()
timeTid og forseinkingartime.sleep(), time.time()
statisticsStatistikkstatistics.mean(), statistics.stdev()

Modular i praksis

Her er eit døme som brukar fleire modular for å simulere eit vitskapleg eksperiment:

import math
import random
import statistics

# Generere simulerte temperaturdata med støy
malinger = []
for i in range(20):
    sann_temp = 22.0 + 3.0 * math.sin(i * 0.5)  # Varierer med sinus
    stoy = random.uniform(-0.5, 0.5)              # Tilfeldig målestøy
    malinger.append(sann_temp + stoy)

# Bruke statistics-modulen for analyse
gjennomsnitt = statistics.mean(malinger)
std_avvik = statistics.stdev(malinger)

print(f"Antall målinger: {len(malinger)}")
print(f"Gjennomsnitt: {gjennomsnitt:.2f} °C")
print(f"Standardavvik: {std_avvik:.2f} °C")

Du kan òg lage dine eigne modular ved å lagre funksjonar i ei Python-fil. Dersom du lagrar funksjonar i mine_funksjoner.py, kan du importere dei i eit anna program med import mine_funksjoner.

Modular er ein av dei store styrkane ved Python – dei lèt deg byggje på arbeidet til andre og gjenbruke kode på tvers av prosjekt.

📝Oppgave 3

Kva for ein modul må du importere for å bruke funksjonen sqrt() (kvadratrot)?

Oppsummering – Funksjonar og modular

Du har lært korleis du organiserer kode i gjenbrukbare blokker:

KonseptForklaringDøme
Definere funksjonLag ei namngitt kodeblokkdef beregn(x):
ParametrarDataen funksjonen tek imotdef f(a, b):
ReturverdiResultat som blir sendt tilbakereturn areal
StandardverdiFørehandsdefinert parameterverdidef f(x=10):
ModulFil med gjenbrukbare funksjonarimport math

Fordelar med funksjonar:
- Gjenbruk: Skriv koden éin gong, bruk han mange gonger
- Lesbarheit: Skildrande funksjonsnamn gjer koden lettare å forstå
- Vedlikehald: Endringar blir gjorde éin stad, verkar overalt
- Testing: Lettare å teste små, isolerte delar av programmet
Tommelfingerregel: Dersom du kopierer og limer inn den same koden meir enn to gonger, bør du lage ein funksjon.
📝Oppgave 4

Skriv ein funksjon beregn_bmi(vekt_kg, hoyde_m) som reknar ut og returnerer BMI (body mass index). Formelen er BMI=vekthøyde2\displaystyle \text{BMI} = \frac{\text{vekt}}{\text{høyde}^2}. Skriv deretter eit hovudprogram som brukar funksjonen: les inn vekt og høgd frå brukaren, rekn ut BMI, og skriv ut resultatet med éin desimal samt ei vurdering (under 18.5: «Undervekt», 18.5–24.9: «Normalvekt», 25–29.9: «Overvekt», 30+: «Feittliv»).

📝Oppgave 5

Lag eit program med tre funksjonar for enkel dataanalyse: a) generer_data(n) – genererer og returnerer ei liste med n tilfeldige heiltal mellom 1 og 100 (bruk random.randint). b) analyser_data(data) – tek inn ei liste og returnerer gjennomsnitt, høgaste verdi og lågaste verdi (bruk return snitt, maks, min_v). c) skriv_rapport(data, snitt, maks, min_v) – skriv ein pent formatert rapport. Hovudprogrammet skal generere 15 tal, analysere dei og skrive rapporten.

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.