Presentationer Slide 1/1

Kapitel 8

Funktioner

Dela upp, återanvänd och strukturera kod.

Mål

Efter kapitlet ska du kunna...

  • förklara varför funktioner används
  • definiera och anropa egna funktioner
  • skilja mellan parametrar och argument
  • returnera och använda värden
  • strukturera ett program med flera funktioner

8.1

En funktion är en namngiven koddel

Funktionen utför en bestämd uppgift.

Koden skrivs en gång och kan användas flera gånger.

Programmet delas upp i mindre, tydligare delar.

Utan funktion

Samma kod upprepas

print("Hej och välkommen")
print("Hej och välkommen")
print("Hej och välkommen")

Om texten ändras måste tre rader redigeras.

Med funktion

Skriv uppgiften en gång

def greet():
    print("Hej och välkommen")

greet()
greet()
greet()

Funktionen definieras en gång och anropas tre gånger.

Två moment

Definiera och anropa

1. Definiera

def greet():
    print("Hej")

Beskriver vad funktionen ska göra.

2. Anropa

greet()

Kör funktionens kod.

Viktig regel

Definitionen kör inte uppgiften

def greet():
    print("Hej")

Python lär sig att funktionen finns.

Ingen hälsning skrivs ut förrän programmet når greet().

8.2 · Grundstruktur

Så definieras en funktion

def funktionsnamn():
    kod som ska köras
  • def startar definitionen.
  • Namnet beskriver uppgiften.
  • Parenteser och kolon krävs.
  • Funktionskroppen är indragen.

Funktion med information

Ta emot ett namn

def greet(name):
    print(f"Hej {name}")

greet("Anna")
greet("Erik")
Hej Anna
Hej Erik

Steg för steg

Vad händer vid anropet?

  1. Programmet når greet("Anna").
  2. Värdet "Anna" skickas in.
  3. Parametern name får värdet "Anna".
  4. F-strängen använder värdet.
  5. Funktionen avslutas och programmet fortsätter.

8.3

Parameter och argument

Parameter

def greet(name):

name är namnet som används inne i funktionen.

Argument

greet("Anna")

"Anna" är värdet som skickas in vid anropet.

Flera parametrar

Värden kopplas efter position

def introduce(name, age):
    print(f"{name} är {age} år gammal")

introduce("Sara", 17)

"Sara" → name

17 → age

Ordningen spelar roll

Argumenten följer parametrarna

introduce("Sara", 17)

Första argumentet hör till första parametern.

Andra argumentet hör till andra parametern.

introduce(17, "Sara") ger värdena fel betydelse.

Vanligt fel

Rätt antal argument krävs

def introduce(name, age):
    print(f"{name} är {age} år")

introduce("Sara")
TypeError: introduce() missing 1 required
positional argument: 'age'

8.4

return skickar tillbaka ett värde

def add(a, b):
    return a + b

result = add(3, 5)
print(result)
8

return · flöde

Argument in – resultat ut

3, 5add(a, b)return 8result = 8

Interaktiv kontroll

Argument och returvärde

Funktionsspårning
Välj en funktion.

print eller return?

De gör olika saker

print()return
Visar text i terminalen.Skickar ett värde till anropet.
Resultatet är främst för användaren.Värdet kan sparas och beräknas vidare.

Återanvänd returvärdet

Resultatet kan användas igen

def add(a, b):
    return a + b

total = add(10, 7)
print(f"Summan är {total}")
print(f"Dubbla summan är {total * 2}")
Summan är 17
Dubbla summan är 34

Kontrollfråga

Vad returneras?

def square(number):
    return number * number

result = square(4)

Svar: funktionen returnerar 16.

Ingenting visas förrän programmet använder print(result).

8.5

Funktioner överst – huvudprogram nederst

def greet(name):
    print(f"Hej {name}")

def add(a, b):
    return a + b

# Huvudprogram
name = input("Vad heter du? ")
greet(name)
result = add(4, 6)
print(f"Summan är {result}")

Programstruktur

Två tydliga delar

Funktionsdefinitioner

  • beskriver programmets uppgifter
  • kan återanvändas
  • ligger högst upp

Huvudprogram

  • läser in data
  • anropar funktioner
  • visar resultat

Bra funktionsnamn

Namnet ska beskriva uppgiften

TydligtOtydligt
calculate_total()do_it()
print_receipt()func1()
is_even()check()

En funktion bör helst göra en tydlig uppgift.

8.6

Flera funktioner kan samarbeta

def greet(name):
    print(f"Hej {name}")

def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

Varje funktion har en avgränsad uppgift.

Huvudprogrammet

Anropa funktionerna

name = input("Vad heter du? ")
greet(name)

x = int(input("Skriv ett tal: "))
y = int(input("Skriv ett tal: "))

sum_result = add(x, y)
product_result = multiply(x, y)

print(f"Summan är {sum_result}")
print(f"Produkten är {product_result}")

Större exempel · del 1

Funktioner för ett kvitto

def calculate_subtotal(price, quantity):
    return price * quantity

def calculate_discount(subtotal, percent):
    return subtotal * percent / 100

def print_receipt(product, subtotal, discount, total):
    print(f"Vara: {product}")
    print(f"Pris före rabatt: {subtotal} kr")
    print(f"Rabatt: {discount} kr")
    print(f"Att betala: {total} kr")

Större exempel · del 2

Kvittots huvudprogram

product = input("Vilken vara? ")
price = int(input("Pris per vara: "))
quantity = int(input("Antal: "))
percent = int(input("Rabatt i procent: "))

subtotal = calculate_subtotal(price, quantity)
discount = calculate_discount(subtotal, percent)
total = subtotal - discount

print_receipt(product, subtotal, discount, total)

Kvitto · dataflöde

Resultat skickas mellan delarna

Inputcalculate_subtotal()calculate_discount()totalprint_receipt()

8.7 · Övning

Skapa tre funktioner

  • greet(name) skriver en hälsning.
  • square(number) returnerar talet i kvadrat.
  • double(number) returnerar talet gånger två.

Huvudprogrammet ska fråga efter namn och tal, anropa funktionerna och skriva ut resultaten.

Övning

Rektangelns area

def area(width, height):
    return width * height
  1. Läs in bredd och höjd.
  2. Anropa funktionen med två argument.
  3. Spara returvärdet.
  4. Skriv ut arean.

Sammanfattning

Kom ihåg

  • def definierar en funktion; namnet med parenteser anropar den.
  • Parametrar står i definitionen, argument skickas vid anropet.
  • return skickar tillbaka ett värde.
  • print() visar något men ersätter inte return.
  • Funktioner bör ha tydliga namn och avgränsade uppgifter.
  • Funktionsdefinitioner överst och huvudprogram nederst ger tydlig struktur.