Hopp til innhold
Bokmål

Fag

Fagstoff

Egendefinerte funksjoner i Python

Standard Python inneholder blant annet funksjonene print() og len(), men vi kan lage våre egne funksjoner også. Hvorfor ikke lage oss en matematisk funksjon?

Problemstilling

Vi tenker oss nå en bedrift som har en funksjon som modell for kostnadene K i kroner ved å produsere x enheter av en vare lik

K(x)=0,25x2+500

Siden prisen på en enhet er 45 kroner, blir inntektsfunksjonen

Ix=45x

Oppgave – regning

Finn en funksjon O for overskuddet ut ifra de to funksjonene over.

Løsningsforslag

Overskuddet finner vi ved å trekke kostnadene fra inntekten.

Ox = Ix-Kx= 45x-(0,25x2+500)= 45x-0,25x2-500= -0,25x2+45x-500

Vi går nå ut ifra at bedriften produserer 60 enheter per dag. De vurderer å øke produksjonen til 100 enheter per dag, og de lurer på hvor mye overskuddet endrer seg. Oppdraget vårt blir å lage et program som kan regne ut forskjellen i overskudd ved to ulike antall produserte enheter.

Koding uten å bruke egendefinert funksjon

Programmet må regne ut hva overskuddet er når det produseres 100 enheter, og trekke fra overskuddet når det produseres 60 enheter. Så må svaret skrives til skjermen.

🤔 Tenk over: Hvordan skriver vi regnestykket over matematisk ved hjelp av funksjonen O?

Forklaring

O100-O60

Oppgave – algoritme

Over har vi beskrevet hva programmet skal gjøre. Skriv en litt mer detaljert algoritme til et slikt program der du bruker variabler for den nåværende og for den nye produksjonsmengden. Husk å få med gode, forklarende tekster.

Forslag til algoritme
  • Sett variabelen x_gml lik 60.
  • Sett variabelen x_ny lik 100.

  • Regn ut overskuddet med tallet i variabelen x_gml ved hjelp av funksjonsuttrykket til O, og sett det lik variabelen O_gml.

  • Regn ut overskuddet med tallet i variabelen x_ny ved hjelp av funksjonsuttrykket til O, og sett det lik variabelen O_ny.

  • Skriv til skjermen: "Endringen i overskuddet ved å endre produksjonen fra <x_gml> til <x_ny> enheter er <O_ny - O_gml> kroner."

I siste punkt betyr vinkelparentesene at vi skal ha verdien av variablene.

Oppgave – koding

Skriv koden til programmet etter algoritmen over i en programeditor for Python. Kontroller at programmet regner riktig ved for eksempel å skrive funksjonen inn i GeoGebra og regne ut O100-O60.

Løsningsforslag
Python
1x_gml = 60
2x_ny = 100
3O_gml = -0.25*x_gml**2 + 45*x_gml - 500
4O_ny = -0.25*x_ny**2 + 45*x_ny - 500
5print(f"Endringen i overskuddet ved å endre produksjonen"
6f" fra {x_gml} til {x_ny} enheter er {O_ny - O_gml:.2f} kroner.")

Programmet gir følgende utskrift: "Endringen i overskuddet ved å endre produksjonen fra 60 til 100 enheter er 200.00 kroner."

Koding med egendefinert funksjon

I utregningene i linje 3 og 4 har vi brukt den matematiske funksjonen O for overskuddet som vi kom fram til lenger opp på siden. Innholdet i linjene er vanskelig å lese. Tenk om vi kunne ha brukt skrivemåten fra matematikken her! Matematisk skriver vi

O100-O(60)

for å finne endringen i overskuddet ved å endre produksjonen fra 60 enheter til 100. Dette kan kan vi heldigvis gjøre i Python også. Vi kan fjerne linje 3 og 4, og i linje 6 kan vi erstatte O_ny - O_gml med

O(x_ny) - O(x_gml)

For å kunne gjøre det må vi lage oss funksjonen O, og hvordan gjør vi det i Python? Jo, vi kan definere funksjonen med kodeordet def. Funksjonen O blir med dette en såkalt egendefinert funksjon. Det betyr at vi øverst i programmet vårt skriver følgende:

Python
1def O(x):
2  return -0.25*x**2 + 45*x - 500

Disse to kodelinjene blir ikke utført i første omgang når vi kjører programmet fordi de utgjør en definisjon. Kodelinjene blir ikke utført før vi kaller på den egendefinerte funksjonen O første gang ved å skrive O(x_ny) i koden nedenfor funksjonsdefinisjonen. Da skjer følgende:

  • Programmet vil lete opp definisjonen av funksjonen O.

  • Programmet erstatter x i definisjonen med innholdet av variabelen x_ny.

  • Vi får regnet ut overskuddet ved denne produksjonsmengden.

Oppgave – koding

Endre på programmet ved å definere funksjonen O, fjerne variablene O_gml og O_ny og i stedet kalle på funksjonen O. Kontroller at programmet fungerer som før.

Løsningsforslag
Python
1def O(x):
2  return -0.25*x**2 + 45*x - 500
3
4x_gml = 60
5x_ny = 100
6print(f"Endringen i overskuddet ved å endre produksjonen"
7f" fra {x_gml} til {x_ny} enheter er {O(x_ny) - O(x_gml):.2f} kroner.")

Koden gir samme utskrift som før.

b) Hvilke endringer blir det i algoritmen til programmet når vi bruker den egendefinerte funksjonen O i stedet for å regne ut overskuddsendringen direkte?

Løsningsforslag

Algoritmen til programmet blir kortere:

  • Sett variabelen x_gml lik 60.
  • Sett variabelen x_ny lik 100.

  • Skriv til skjermen: "Endringen i overskuddet ved å endre produksjonen fra <x_gml> til <x_ny> enheter er <O(x_ny) - O(x_gml)> kroner."

Selve funksjonsdefinisjonen er ikke en del av algoritmen til programmet siden det bare er en definisjon. Funksjonen O(x) har sin egen algoritme:

  • Regn ut følgende: -0,25·x2+45·x-500 
  • Returner svaret.

Spørsmål – vurdering

Hvorfor er det lurt å endre programkoden ved å lage en egendefinert funksjon?

Svar

Den viktigste årsaken er at vi får ryddigere og kortere programkode (selv om koden ikke ble kortere her). Dette blir viktigere og viktigere jo større programmet blir.

En annen viktig årsak er gjenbruk av kode. Kanskje skal den funksjonen du definerer i ett program brukes i et annet program? Da er det bare å kopiere og lime inn hele funksjonsdefinisjonen inn i det andre programmet. Å definere egne funksjoner gjør det mye lettere å utveksle kode med andre. I Python finnes det mange programbibliotek med egendefinerte funksjoner som vi kan laste ned og bruke.

Pythonkode å lære seg

Vis innhold

Egendefinert funksjon

Struktur:

def funksjonsnavn(parameter1, parameter2, ...):
   kodelinje
   kodelinje
   ...

Kodelinjene her er definisjoner og blir ikke utført før det blir skrevet funksjonsnavn(verdi1, verdi2, ...) i den egentlige programkoden nedenfor funksjonsdefinisjonen. Husk kolon på slutten av linja som begynner med "def", og legg merke til at kodelinjene til en funksjon skal rykkes inn.

Eksempel:

Vi skal bruke den matematiske funksjonen f(x)=3x-2 i et program som skal regne ut funksjonsverdier. Da skriver vi

def f(x):
   return 3*x - 2

øverst i programkoden. Kodeordet return bruker vi for å få tilbake noe fra funksjonen. Dersom vi i koden til programmet skriver

verdi = f(1)

vil funksjonen regne ut f(1)=3·1-2=1 og sette det lik variabelen verdi.

I eksempelet skal funksjonen f bare ha én verdi inn (x), men vi kan lage funksjoner som skal ha inn flere verdier, som det generelle eksempelet over viser.

Aktiviteter

a) Algoritme

Bedriften ønsker å få testet hvor stort overskuddet er ved flere ulike produksjonsmengder: 40, 80, 120, 160, 200 og 240.

Skriv en algoritme for et slikt program. Bruk den egendefinerte funksjonen O fra over.

Forslag til algoritme

Her kan vi utnytte at produksjonsmengden øker med 40 fra ett nivå til neste.

  • Sett variabelen x lik 0.

  • Gjenta 6 ganger:

    • Øk x med 40.

    • Skriv til skjermen: "Overskuddet ved <x> produserte enheter er <O(x)> kroner."

I tillegg må vi ha algoritmen for funksjonen O som før.

b) Koding

Skriv en kode som passer til algoritmen ovenfor.

Løsningsforslag

Det er flere måter å løse dette på. Her velger vi å bruke ei for-løkke.

Python
1def O(x):
2  return -0.25*x**2 + 45*x - 500
3
4for x in range(40,241,40):
5  print(f"Overskuddet ved {x} produserte enheter er {O(x)} kroner.")

Programmet gir at av de undersøkte produksjonsmengdene blir overskuddet størst når det produseres 80 enheter. Ved en produksjon på 200 eller 240 enheter går bedriften med underskudd.

Skrevet av Bjarne Skurdal.
Sist oppdatert 14.08.2026