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?
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
Siden prisen på en enhet er 45 kroner, blir inntektsfunksjonen
Oppgave – regning
Finn en funksjon O for overskuddet ut ifra de to funksjonene over.
Løsningsforslag
Overskuddet finner vi ved å trekke kostnadene fra inntekten.
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.
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
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 .
LøsningsforslagPython
1x_gml =602x_ny =1003O_gml =-0.25*x_gml**2+45*x_gml -5004O_ny =-0.25*x_ny**2+45*x_ny -5005print(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."
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
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
1defO(x):2return-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øsningsforslagPython
1defO(x):2return-0.25*x**2+45*x -50034x_gml =605x_ny =1006print(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:
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.
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 i et program som skal regne ut funksjonsverdier. Da skriver vi
def f(x): return 3*x - 2
øverst i programkoden. Kodeordetreturnbruker vi for å få tilbake noe fra funksjonen. Dersom vi i koden til programmet skriver
verdi = f(1)
vil funksjonen regne ut 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.
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
1defO(x):2return-0.25*x**2+45*x -50034for x inrange(40,241,40):5print(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.