7080 definiera funktioner
Funktionsanrop
Tidigare har vi sett hur funktioner anropas. Nedan följer en repetition.
# anrop av funktionen print
print("Hello!")
# skriver ut blankrad
print()
# skriver ut: 5 kr
print(5, "kr")
Funktionen print
behöver veta vad den ska skriva ut. Denna information skickas med som argument till funktionsanropet.
I anropet
print("Hello!")
är "Hello!" ett argument.
Anropet
print()
tar inget argument.
Anropet
print(5, "kr")
tar två argument: 5 och "kr".
Kanske inte så viktigt
Det finns två typer av funktioner. De som inte ger ett svar som print
och de som ger ett svar tillbaka, till exempel int
och input
. Det kan undersökas i Python Console på följande vis:
type(print())
<class 'NoneType'>
type(int("32"))
<class 'int'>
Funktionsdefinition
De inbyggda funktionerna som print
och input
är redan definierade. Vi ska nu se hur man kan definiera egna funktioner. Det är användbart för att slippa upprepa samma kod på flera ställen i ett program. Funktioner måste definieras före de anropas i koden. Koden körs ju rad för rad med start högst upp i filen.
Exempel g(x)
# definition av funktionen g(x)
# funktionen beräknar kvadraten på x och skriver ut svaret
def g(x):
svar = x * x
print(svar)
Exempel på anrop av funktionen g
i = 1
print("x", "g(x) = x^2")
while i < 6:
print(i, end=" ") #end=" " används för att unvika ny rad
g(i)
i = i + 1
Utskriften blir som följer:
x g(x) = x^2
1 1
2 4
3 9
4 16
5 25
Exempel f(x)
Definitionen av f är nästan identisk med definitionen av g. Skillnaden är att f returnerar svaret istället för att skriva ut det.
def f(x):
return x * x
Nedan visas hur funktionen kan anropas:
i = 1
print("x", "f(x) = x^2")
while i < 6:
print(i, f(i))
i = i + 1
Nedan följer hur utskriften blir:
x f(x) = x^2
1 1
2 4
3 9
4 16
5 25
Exempel visa tärning
def show_die(dots):
if dots == 1:
print(" -------")
print("| |")
print("| o |")
print("| |")
print(" -------")
elif dots == 2:
print(" -------")
print("|o |")
print("| |")
print("| o|")
print(" -------")
show_die(1)
show_die(2)
Ovanstående ger utskriften nedan:
-------
| |
| o |
| |
-------
-------
|o |
| |
| o|
-------
Exempel enhetsomvandling
Nedan visas en funktion som kan användas för att omvandla från grader Celsius till Kelvin.
def celsiusToKelvin(celsius):
answer = celsius + 273.15
return answer
Koden kan också skrivas utan variabeln answer
se nedan:
def celsiusToKelvin(celsius):
return celsius + 273.15
Nedan följer ett anrop av funktionen.
temp = float(input("Ange temperatur i grader Celsius: "))
print("Temperaturen är", celsiusToKelvin(temp), "Kelvin")
Utskriften blir som följer.
Ange temperatur i grader Celsius: 10
Temperaturen är 283.15 Kelvin
Syntax för definition av funktion
varialbel_1, variabel_2, ...
kan utelämnas
svar
är bara ett exempel på variabelnamn
Vissa andra variationer är möjliga.
def funktionsnamn(variabel_1, variabel_2):
sats 1
sats 2
sats 3
...
svar = ...
# return används om ett svar ska återlämnas
return svar
Uppgifter
1 Kelvin till Celsius
Definiera en funktion som omvandlar från Kelvin till Celsius. Anropa därefter funktionen för att se att den fungerar.
2A Celsius till Farenheight
Definiera en funktion som omvandlar från Celsius till Farenheight. Använd den matematiska formeln nedan, men kom ihåg att du måste räkna med decimaltal.
F = (9/5) * C + 32
Anropa funktionen.
2B Farenheight till Celsius
Definiera den omvända funktionen till den ovan, så att omvandling kan ske från Farenheight till Celsius.
C = (5/9) * (F - 32)
Anropa funktionen.
3 Kelvin till Farenheight
Definiera en funktion som omvandlar från Kelvin till Farenheight. I definitionen kan du anropa ovanstående funktioner. Anropa din nya funktion för att testa den.
4 Temperaturomvandlingar - Extra
Skriv ett program där man kan välja vilken typ av omvandling man vill göra samt där man kan välja att avsluta programmet.
5 funktionen addition
Skriv en funktion som tar två tal som argument och returnerar summan. Funktionen ska alltså inte skriva ut summan. Den kan skrivas ut av en annan del av programmet där funktionen addition anropas.
6 Jämnt eller udda
Skriv en funktion som tar ett heltal som argument och returnerar True
eller False
beroende på om talet är jämnt eller udda. Ge funktionen ett lämpligt namn.
Tips: använd modulus
6 % 2 blir 0
7 % 2 blir 1
8 % 2 blir 0
9 % 2 blir 1
7 Caesarshiffer
Skriv ett program som kan lösa Ceasarshiffer.
Använd funktioner. Det kan vara lämpligt att låta en funktion skifta en bokstav ett valbart antal steg.
Tips:
ord('a') # blir 97
ord('z') # blir 122
chr(97) # blir 'a'
chr(122) #blir 'z'
Testa att programmet fungerar. Kryptera ett meddelande. Dekryptera det sedan.
Kan du dekryptera:
lwthni_lnqqfw_qtb_bjnlmy_utqdstrnfq_rzqynuqjx
8 fler uppgifter
Längst ner på, Think Python, Chapter 3 Functions, finns uppgifter.