Funksjoner#
Vi kan tenke på en funksjon som en spesifikk oppgave som kan inneholde flere instruksjoner. For å kjøre en funksjon gjør vi et kall på funksjonen.
def hils():
print("Hei!")
hils()
Hei!
Når vi skriver hils()
gjør vi et kall på funksjonen. Da gjennomføres det som står med innrykk.
Argumenter og return
-verdier#
Ofte ønsker vi å sette variabler inn i en funksjon, la gjøre funksjonen gjøre noe, og så få ut noe.
Det vi setter inn kalles funksjonens argumenter. Det vi får ut kalles funksjonens return
-verdier.
def f(x):
return 2*x
print(f(2))
4
Når vi kjører funksjonen med funksjonskallet f(2)
så skjer dette:
2
settes inn i funksjonen somx
funksjonen returnerer to ganger
x
, som blir4
Derfor skrives 4
ut.
Nå kan vi lage matematiske funksjoner!
Skrive ut punkter
Vi kan bruke en enkel for
-løkke for å skrive ut punktene til en funksjon.
def f(x):
return 2 * x
for n in range(-2, 3):
print(n, f(n))
-2 -4
-1 -2
0 0
1 2
2 4
Flere argumenter#
Vi kan gi en funksjon flere argumenter ved å skille de med komma.
def størst(a, b):
if a >= b:
return a
else:
return b
print(størst(2, 3))
print(størst(-2, 1))
3
1
Denne funksjonen returnerer det som er størst av enten a
eller b
.
type-hints 📎
Det kan være nyttig å vise hva man forventer inn i en funksjon, og hva som returneres.
def er_oddetall(x : int) -> bool:
if x % 2 != 0:
return True
return False
Her står det at funksjonen forventer at du skriver inn et heltall og at den returnerer en sannhetsverdi
lambda-funksjoner \(\lambda\)
Man kan skrive hele funksjoner på én linje. Dette kan være nyttig for diverse småfunksjoner.
kvadrer = lambda x : x**2
kuber = lambda x : x**3
print(kvadrer(3))
print(kuber(3))
9
27
Oppgaver#
Oppgave 1 👋
Lag en funksjon hils(navn)
som tar et navn som argument og skriver ut Hei, <navn>
Løsningsforslag
def hils(navn):
print("Hei,", navn)
Oppgave 2 🎢
I denne oppgaven skal vi lage den matematiske funksjonen \(f(x) = x^2\)
Lag en funksjon
f(x)
som returnerer verdienx**2
. Prøv den med noen verdier.Bruk en for-løkke til å skrive ut \(x\) og \(f(x)\) for tallene \(\{0,1,2,3,\dots,10\}\)
Løsningsforslag
def f(x):
return x ** 2
for n in range(11):
print(n, f(n))
0 0
1 1
2 4
3 9
4 16
5 25
6 36
7 49
8 64
9 81
10 100
Oppgave 3 🧑🤝🧑
Lag en funksjon er_partall(x)
som sjekker om et tall x
er et partall.
Funksjonen skal returnere True
om x
er et partall, og False
om det ikke er det.`
Løsningsforslag
def er_partall(x):
if x % 2 == 0: # Hvis resten når man deler på to er lik null
return True
else:
return False
Oppgave 4 📐
Lag en funksjon som tar lengden av to sider a
og b
som argumenter og returnerer lengden av den lengste siden c
.
Løsningsforslag
from math import sqrt
def hypotenus(a, b):
return sqrt(a**2 + b**2)
print(hypotenus(3, 4))
5.0
Oppgave 5 ➗
I denne oppgaven kan det være nyttig å se tilbake på Rest og heltallsdivisjon
Lag en funksjon er_primtall(x)
som skjekker om et tall x
er et primtall. Den skal returnere True
dersom tallet er et primtall og False
dersom det ikke er det.
Løsningsforslag
Den enkleste sjekken innebærer å sjekke alle tall opp til tallet \(x\). Hvis \(x\) er delbar med et av tallene, er det ikke et primtall.
def er_primtall(x):
# 0 og 1 er ikke primtall
if x == 0 or x == 1:
return False
# Vi sjekker om x er delbar med noen av tallene opp til x. Hvis den er delbar er det ikke primtall.
for n in range(2, x):
if x % n == 0:
return False
return True
Sjekken over vil sjekke veldig mange unødvendige tall.
Vi trenger ikke sjekke opp lengre enn til kvadratroten av \(x\). Ingen tall har faktorer som er større enn kvadratroten av tallet selv. I tillegg trenger vi ikke sjekke noen partall over \(2\).
from math import sqrt
def er_primtall(x):
# 0 og 1 er ikke primtall
if x == 0 or x == 1:
return False
# 2 er et partall
if x == 2:
return True
# Ingen partall over 2 er primtall
if x % 2 == 0:
return False
# Vi sjekker alle oddetall under og opp til og med kvadratroten av tallet.
for n in range(3, int(sqrt(x)) + 1, 2):
if x % n == 0:
return False
return True
Oppgave 6 🧠 (utfordring)
Pytagoreiske tripler er tre og tre tall som passer i likningen \(a^2 + b^2 = c^2\). Det enkleste eksemplet er \(a=3\), \(b=4\) og \(c=5\). Vi kan skrive det som \((3,4,5)\).
Skriv ut alle pytagoreiske tripler bestående av heltall under \(100\).
Primitive pytagoreiske tripler er de triplene som ikke deler en felles faktor større enn \(1\). Med andre ord er \((3,4,5)\) en primitiv pytagoreisk trippel, men ikke \((6,8,10)\) fordi \(6\), \(8\) og \(10\) deler en faktor \(2\).
Modifiser programmet til å bare skrive ut de primitive pytagoreiske triplene.