Oppskrifter (funksjoner)#
Læringsmål#
Nå skal vi introdusere funksjoner. Det hjelper oss å modellere inni-algoritmer også kalt deloppgaver.
Du skal kunne
Definere (lage) en funksjon med
def
. Dette lager en “jobboppskrift”.Bruke funksjonen
Se når vi kan bruke funksjoner til å modellere virkeligheten
Finne ferdige funksjoner til oppgaver
Introduksjon#
Når vi skal addere to brøker, må vi noen ganger finne felles nevner. “Å finne felles nevner” er inni-algoritme (deloppgave) i å addere brøker.
Når vi skal gå ut med søpla, må vi først åpne en skapdør. “Å åpne skapdøra” er en inni-algoritme i å gå ut med søpla. De fleste oppgaver i livet består av inni-oppgaver. Dette modelleres i Python med funksjoner.
Representasjoner#
Ord#
Funksjoner kalles på norsk deloppgaver, inni-algoritmer, underoppgaver etc. Flere av ordene tyder på at vi ser funksjoner inni hverandre eller under hverandre. I andre programmeringsspråk kalles de også metoder, prosedyrer eller subrutiner.
En definisjon på en funksjon kan også kalles jobbinstruks, oppskrift eller kropp (body).
Argument (som vi skal komme til) kalles også parameter, selv om noen bruker ordene litt forskjellig. Argumentene er små variable som bare gjelder inne i funksjonen. Dette er informasjon *inn til funksjonen.
Returverdi (som vi skal komme til) er svar ut av funksjonen.
Scratch#
I Scratch kan man lage egne blokker. Denne funksjonaliteten har fargen rød. Se “My Blocks” nederst til venstre.
Egne blokker kan sammenliknes med funksjoner; de
kjører et antall andre blokker
“er” et antall andre blokker
Blokker i scratch har tilmed argumenter/parametre. Jeg har riktignok ikke klart å returnere verdier men har hørt noe som heter Reporter
som skal kunne gjøre det. Messages bør også kunne brukes til noe av det samme.
Python#
Definisjon#
Funksjoner blir først definert, for eksempel
def minFunksjon():
print("nå utføres minFunksjon")
print("litt til")
det kommer ikke noe ut av definisjonen. Det kan være litt forvirrende når vi ikke ser noe resultat av definisjonen. Resultatet er bare at Python har fått et nytt navn på en ny oppskrift.
Regneark#
En formel likner på en funksjon.
Viktige funksjoner (som er undervurderte):
=LAMBDA (samme navn på Norsk)
Python TODO hit#
Definisjon og bruk, uten argumenter#
En Python-funksjon blir definert med nøkkelordet def
. Etter def
følger navnet på funksjonen, parenteser og et kolon. De neste linjene, så langt det er rykket inn, er det som utføres av funksjonen. Det kalles kroppen.
Et eksempel er en funksjonen skrivutlitt
som skriver ut en tekst:
def skrivutlitt():
print("Skriv ut litt")
print("til")
Dette bare definerer funksjonen, men kjører den ikke. For kjøring skriver vi rett og slett navnet (med parentesene):
skrivutlitt()
Skriv ut litt
til
Definisjon og bruk, med argumenter inn#
Før vi går videre skal vi introdusere argumenter. Argumenter er informasjon som blir gitt inn i funksjonen. Se på følgende eksempel:
def skrivHilsen(fornavn, etternavn):
print("Hei på deg, " + fornavn + " " + etternavn)
skrivHilsen("Volodomyr", "Zelenskyy")
skrivHilsen("Maria", "Ressa")
skrivHilsen("Dmitry", "Muratov")
Hei på deg, Volodomyr Zelenskyy
Hei på deg, Maria Ressa
Hei på deg, Dmitry Muratov

Argumentene er egentlig variable (pappesker) hvor man kan legge verdier og hente verdier. Argumentene får i utgangspunktet verdiene som er angitt når funksjonen blir kalt. Disse variablene er lokale, det vil si at de bare finnes så lenge funksjonen blir kjørt. Vi kan altså ikke snakke om fornavn
etter at skrivHilsen
er ferdig.
Følgende kode har flere feil. Rett dem, kjør funksjonen og bruk den til å finne summen av 2 og 3.
def addere(addend1, addend2):
print("Testutskrift: addend1=" + str(addend1) + " og addend2=" + addend2)
print("Summen av " + str(addend1) + " og " + str(addend1) + " er " + str(addend1 * addend2))
Skriv en funksjon som adderer tre tall.
Skriv en Python-funksjon som tar to tall som argument og skriver ut det største. Du kan ha en if-setning inne i funksjonen; da trenger du to innrykk! I Python er det lov til å skrive ting som a > b
.
Skriv en Python-funksjon som tar tre tall som argument og skriver ut det største.
Skriv en funksjon som tar et tall n
som argument. Funksjonen skal skrive ut alle tall fra 0 til n
. Du vil trenge en for-løkke inne i funksjonen; du vil sannsynligvis også trenge range(n)
.
Returverdier#
Funksjoner slutter når oppskriften er ferdig eller når de kommer til return
. Da gir de kontrollen tilbake til sin oppdragsgiver som kalte dem. De kan også gi tilbake en returverdi (svar).
def leggeSammen(a, b):
svar = a + b
return(svar)
s = leggeSammen(1, 2)
print("s =", s)
print("en linje:", leggeSammen(3,4))
s = 3
en linje: 7
En funksjon kan faktisk levere tilbake flere verdier også, selv om det er litt mindre vanlig.
def person(a):
navn = "Johannes"
alder = a + 1
return navn, alder
navnet, alder = person(40)
print("Navn=", navnet)
print("Alder=", alder)
Navn= Johannes
Alder= 41
Turtle#
BUrde hatt noen oppgaver her.
Hva skjer når en funksjon blir kjørt?#
La oss si vi har følgende program:
def innenfor(a, b):
svar = a + b;
print("Nå kjøres 'innenfor'. Svaret er " + str(svar))
return(svar)
førstesvar = innenfor(2, 3)
andresvar = innenfor(4, 5)
print("Førstesvar er " + str(førstesvar))
Nå kjøres 'innenfor'. Svaret er 5
Nå kjøres 'innenfor'. Svaret er 9
Førstesvar er 5
Det som skjer, er følgende:
Først defineres funksjonen innenfor
. Den har to argument: a
og b
. Den har en kropp
(jobbinstruksjon) på tre linjer; kroppen er det som har innrykk. Så langt har det ikke kommet noe på skjermen.
Så kommer vi til linja førstesvar = innenfor(2, 3)
. Først kjøres funksjonen innenfor
. En kjøring av en funksjon er flere ting:
Kontrollen går til funksjonen. Det vil si at kontrollen gies til funksjonen
innenfor
. Vi kan tenke oss at kontrollen hopper opp til definisjonen.Argumentene får verdi. Argumentene
a
ogb
er egentlig variable (pappesker) som bare finnes mens funksjonen blir kjørt. De får verdiene2
og3
.Funksjonen kjører sin “jobbinstruks”. Nå er kontrollen i
innenfor
-funksjonen, som utfører sin jobbinstruks. Variabelen (pappesken)svar
er også lokal, altså at den bare finnes iinnenfor
. Vi henter verdiene fraa
ogb
, adderer dem og legger resultatet inn isvar
. Neste linje er enprint
-linje som skriver til skjermen.Funksjonen gir tilbake kontrollen. Når en funksjon kommer til
return
i sin oppskrift (eller oppskriften er slutt) returnerer den kontrollen. En funksjon gir alltid kontrollen tilbake sin til oppdragsgiver. Funksjonen kan også gi tilbake et svar til sin oppdragsgiver.
Svaret fra innenfor
blir lagt i variabelen (pappesken) førstesvar
.
Så kjøres innenfor
en gang til, med andre parametre. En oppskrift kan brukes mange ganger! Denne gangen får a
verdien 4. Resultatet fra denne kjøringen blir lagt i andresvar
.
Til sist kalles funksjonen print
med teksten "Førstesvar er 5"
.
Mønstre#
Funksjoner som er ferdigdefinerte#
Vi har sett på flere ferdigdefinerte funksjoner allerede:
print()
skriver ut en tekst til skjermenstr()
gjør et tall om til en tekst (f.eks. tallet2
til teksten"2"
)round()
(finn ut hva denne funksjonen gjør ved å søke på nettet).
Funksjoner med andre ting inne i seg#
En funksjon kan ha for
-løkker, if
-setninger, funksjonskall og mange andre ting inne i seg. Her er et eksempel:
def multiplikasjonMedLittEkstra(a, b):
print("NÅ BEGYNNER FUNKSJONEN a="+ str(a) + " b=", str(b))
if(a < 0):
print("a er mindre enn 0:", a)
if(b < 0):
print("b er mindre enn 0:", b)
for i in range(a, b):
print("i forløkke: i=", i)
print(" dette er også i for-løkke")
return;
multiplikasjonMedLittEkstra(2, 5)
multiplikasjonMedLittEkstra(-2, 1)
multiplikasjonMedLittEkstra(-2, -1)
NÅ BEGYNNER FUNKSJONEN a=2 b= 5
i forløkke: i= 2
dette er også i for-løkke
i forløkke: i= 3
dette er også i for-løkke
i forløkke: i= 4
dette er også i for-løkke
NÅ BEGYNNER FUNKSJONEN a=-2 b= 1
a er mindre enn 0: -2
i forløkke: i= -2
dette er også i for-løkke
i forløkke: i= -1
dette er også i for-løkke
i forløkke: i= 0
dette er også i for-løkke
NÅ BEGYNNER FUNKSJONEN a=-2 b= -1
a er mindre enn 0: -2
b er mindre enn 0: -1
i forløkke: i= -2
dette er også i for-løkke
Funksjoner som kaller funksjoner#
Det er svært vanlig at funksjoner kaller andre funksjoner. Se på følgende funksjoner:
def skrivFornavn():
print("Nå er jeg i skrivFornavn()")
return("Jerome")
def skrivEtternavn():
print("Nå er jeg i skrivEtternavn()");
return("Bruner")
def skrivHeleNavn():
print("skrivHeleNavn() start")
svar = skrivFornavn() + " " + skrivEtternavn();
print("skrivHeleNavn() har satt svar til " + svar)
return(svar)
print("----- KALLER BARE DEN FØRSTE")
skrivFornavn();
print("----- KALLER HELE")
heleNavn = skrivHeleNavn()
print("hele navnet ble " + heleNavn)
----- KALLER BARE DEN FØRSTE
Nå er jeg i skrivFornavn()
----- KALLER HELE
skrivHeleNavn() start
Nå er jeg i skrivFornavn()
Nå er jeg i skrivEtternavn()
skrivHeleNavn() har satt svar til Jerome Bruner
hele navnet ble Jerome Bruner
Når bruker vi funksjoner?#
Hele tida.
Vi bruker funksjoner
Når vi skal modellere deloppgaver
Når vi skal gjøre samme oppgave flere ganger; i stedet for å skrive samme kodelinjer flere ganger skriver vi dem inn i én funksjon og kaller den flere ganger
Å finne funksjoner på nett#
Ofte lager vi funksjoner selv. Ofte finner vi også funksjoner på nett. Det er svært nyttig å kunne søke etter funksjoner i dokumentasjon eller på Google. Noen ganger er det også aktuelt å få chatbot eller andre mennesker til å programmere for seg.
Finn en innebygget funksjon for gjennomsnitt. Øverst i programmet må det sannsynligvis stå from statistics import *
. Det kan tenkes du må bruke lister eller andre sekvenser.
Lag en egen funksjon gjennomsnitt
. Du kan komme til å trenge funksjonene sum()
og len()
— finn ut hva de gjør.
Pedagogiske grep#
Skuespill.#
Gjenoppfrisking fra 2023-01-02:
I#
def frokost():
print("God morgen! Hva vil du ha til frokost?")
mat = input()
print("Her er din " + mat + " Kos deg!")
#frokost()
Roller:
Menneske (bruker)
Hovedprogram
frokost
print
input
mat
(variable kan også være bare steder å lagre informasjon, f.eks. en eske eller ark å skrive verdier på)
II#
Her var variablene ikke representert med skuespillere, men med firkanter på tavla hvor vi skrev verdier.
Koble med matematikk#
Funksjoner for å utføre matematiske algoritmer, f.eks.
Multiplikasjon ved gjentatt addisjon
Brøkregning
Oppgaver#
Når du lager en funksjon er det sunt å teste den et par ganger.
Lag en funksjon som tar to tall som argument, og returnerer gjennomsnittet.
Lag en funksjon som tar tre tall som argument, og returnerer gjennomsnittet.
Lag en funksjon som tar to tall som argument, og returnerer det høyeste. Det er altså to muligheter: Enten at det første er høyest (hva skal du gjøre hvis det er høyest?) eller at det andre er høyest.
Lag en funksjon som tar tre tall som argument, og returnerer det høyeste. Her finnes flere gode løsningsmetoder; noen involverer en
if
inne i enif
(den innerste skal altså ha to innrykk), andre involverer logisk OG.
Aspekt#
Inni-funksjoner.