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.

Om Caesarshiffer på Wikipedia

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

se säkerhets-SM.

8 fler uppgifter

Längst ner på, Think Python, Chapter 3 Functions, finns uppgifter.