If-setninger, for-løkker og while-løkker.
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
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 gangerFunksjonen 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 argumentDu 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)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 °CKvar 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.
Kva skriv følgjande kode ut?
def doble(x):
print(x * 2)
doble(7)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.54Skilnaden 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}")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 °CBegge 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.
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))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:
| Modul | Skildring | Døme |
|---|---|---|
math | Matematiske funksjonar | math.sqrt(), math.log() |
random | Tilfeldige tal | random.randint(), random.uniform() |
time | Tid og forseinkingar | time.sleep(), time.time() |
statistics | Statistikk | statistics.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.
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:
| Konsept | Forklaring | Døme |
|---|---|---|
| Definere funksjon | Lag ei namngitt kodeblokk | def beregn(x): |
| Parametrar | Dataen funksjonen tek imot | def f(a, b): |
| Returverdi | Resultat som blir sendt tilbake | return areal |
| Standardverdi | Førehandsdefinert parameterverdi | def f(x=10): |
| Modul | Fil med gjenbrukbare funksjonar | import 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.
Skriv ein funksjon beregn_bmi(vekt_kg, hoyde_m) som reknar ut og returnerer BMI (body mass index). Formelen er . 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»).
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.