Funktionen in Python dienen zum Auslagern von Programmteilen. Man übergibt beim Funktionsaufruf Werte und erhält von der Funktion einen berechneten Wert zurück. Dadurch werden Programme übersichtlicher, die Fehlersuche vereinfacht sich und Programmteile sind mehrfach verwendbar.
In diesem Artikel lernst Du den Aufbau von Funktionen und deren Anwendung kennen. Begriffe wie Rückgabewert, Parameter und Funktionsname werden erklärt.
Große Apfelmengen werden in Pressen zu vielen Litern Apfelsaft umgearbeitet. Die Arbeit übernimmt die Presse für viele Obstbauern, die Arbeit wird ausgelagert. Das gleiche Prinzip kann man beim Programmieren anwenden. Wir lagern bestimmte Aufgaben in eigene Unterprogramme aus. Die so erstellten Funktionen erhöhen die Struktur/Übersichtlichkeit und sind mehrfach von Vielen verwendbar. Die Fehlersuche wird vereinfacht und Arbeiten in Projekten lassen sich besser aufteilen.
Für die Berechnung der Saftmenge soll folgende Tabelle verwendet werden:Apfelsorte | Gala | Elstar | Delicious |
Saftausbeute pro 100 kg | 75 | 68 | 82 |
Das Schlüsselwort def
leitet eine Funktionsdefinition ein. Es wird ein Name für die Funktion festgelegt, gefolgt von einem Doppelpunkt. Der Inhalt der Funktion muss eingerückt werden.
Beachte: Funktionsnamen beginnen in der Regel mit einem Kleinbuchstaben, da die Funktion etwas ausführt. Außerhalb der Funktion wird der Text wieder ausgerückt.
def meinGedicht():
print("Ein Hund lief in die Küche")
print("und stahl dem Koch einen Apfel.\n")
for i in range(5):
meinGedicht()
def
gekennzeichnet. Ihm folgt ein frei wählbarer Name mit Doppelpunkt. Der Inhalt der Funktion wird eingerückt.
Jeder Funktion können Werte mitgegeben werden. Diese Parameter schreibt man in die Klammern hinter dem Funktionsname.
def begruesse(name):
print(f"Hallo {name},\n wir freuen uns ...")
Beim Funktionsaufruf müssen nun die Parameter mit angegeben werden:
namen = ["Anna", "Michael", "Daniel"]
for name in namen:
begruesse(name)
In der Parameterliste werden die einzelnen Werte/Variablen mit Komma getrennt geschrieben. Bei mehreren Parametern ist die Reihenfolge der Parameter bei der Definition und dem Aufruf der Funktion identisch zu wählen. Auch Listen dürfen übergeben werden.
Rückgabewert verwenden:
def verdopple(x):
return x*2
Beim Aufruf ist darauf zu achten, dass man den Rückgabewert in einer Variablen speichert:
y = verdopple(3)
Hallo Frau Müller,
Sie haben 12 kg Äpfel 🍎 gekauft.
Vielen Dank für Ihren Einkauf!
def begruesse(name, isMale, menge):
print(f"Hallo {"Herr" if isMale else "Frau"} {name}," )
print(f"Sie haben {menge} kg Äpfel gekauft.")
print("Vielen Dank für Ihren Einkauf!")
begruesse("Müller", False, 12)
100.0 kg Gala ergeben 75.0 l Saft.
Genieße dein Getränk 🥃!
def berechneSaftmenge(sorte: str, menge: int) -> float:
if sorte == "Gala": saft = 0.75*menge
else: saft = 0.68*menge
return saft
sorte = input("Wähle: Gala, Elstar")
menge = float(input("Gib die Menge in kg ein: "))
saft = berechneSaftmenge(sorte, menge)
print(f"{menge} kg {sorte} ergeben {saft:.1f} l Saft.")
return
gibt in der Funktion an, welcher Wert nach dem Aufruf zurück gegeben wird. Dieser Wert muss beim Aufruf in einer Variable gespeichert werden.
Die benötigte Menge Holzdielen soll für eine vorgegebene Raumgröße in einer Funktion berechnet werden.
05-Funktionen.ipynb
an.Holzdielen
und definiere die Funktion berechneLaufendeMeterDielen
. Der Funktion wird die Raumgröße in Quadratmeter übergeben und sie liefert die Holzmenge von 0,2 m breiten Holzdielen in laufenden Metern.Um bei einer Raumgröße von 8 m2 die laufenden Meter zu erhalten, teil man diesen Wert durch 0,2: 8 m2/0,2 m = 40 m
berechneLaufendeMeterDielen
wird aufgerufen und das Ergebnis am Bildschirm ausgegeben.Die Ausgabe sollte wie folgt aussehen:
Raumgröße: 12.5 qm
Laufende Meter Dielen: 62.5 m
Ordne den Funktionsaufruf dem Funktionskopf zu oder finde die Fehler.
Welcher Aufruf passt zum Funktionskopf? Wähle eine Antwort.
def add(a: int, b: float) -> int: ..
summe: float = add(2, 3.2)
summe: float = add(3.2, 2)
summe: int = add(2, 3.2)
summe: int = add(2.3, 3)
Welcher Funktionskopf passt zu dem Aufruf? Wähle eine Antwort.
add2(4, 3.41)
def add2(a: float, b: float) -> int: ..
def add2(a: int, b: float): ..
def add2(a: int, b: float) -> int: ..
def add2(a: str, b: float): ..
Finde die Anzahl der Fehler im folgenden Quelltext.
def suche(a: str, p: int) -> str:
pass
platz: int = suche("a", "b")
Finde die Anzahl der Fehler im folgenden Quelltext.
def bestimmeMenge(a: int, b: int) -> int:
return a*b
a: int = 4
terassengroesse: int = bestimmeMenge(a, 12)
Welcher Aufruf passt zum Funktionskopf? Wähle eine Antwort.
def anzeigen( ): ..
summe: float = anzeigen( )
anzeigen(2)
anzeigen( )
anzeigen("a")
Welcher Funktionskopf passt zu dem Aufruf? Wähle eine Antwort.
x: float = berechne(4, 3.41)
def berechne(a: int, b: float) -> float: ..
def berechne(int a, double b) -> int: ..
def berechne(a: bool, b: float) -> float: ..
def berechne(a: bool, b: float) -> str: ..
Zum Einkaufen von frischem Apfelsaft wird ein Programm geschrieben: Man wählt die Apfelsorte, Menge und erhält als Ausgabe entsprechend die Saftmenge und Preise angezeigt.
Hallo Frau Müller,
Sie haben 100 kg Gala 🍎 gekauft.
100.0 kg Gala ergeben 75.0 l Saft.
Ihr Warenkorb 🛒
100 kg Gala ⋅ 0.42 €/kg: 42.00 €
75 l Saft ⋅ 0.07 €/l: 5.25 €
Grundgebühr: 10.00 €
Gesamt: 57.25 €
def begruesse(name: str, isFemale: bool)
.def berechneSaftmenge(sorte: str, menge: int) -> float
für mindestens drei Apfelsaftsorten. Bei nicht vorhandener Sorte soll eine Fehlermeldung erscheinen.def anzeigenWarenkorb(sorte, menge, saftmenge)
.Eine Pyramide hat eine rechteckige Grundfläche mit den den Seiten $a$ und $b$ und der Höhe $h$. Die Grundfläche $G$ und das Volumen $V$ berechnet sich wie folgt:
$G=ab$ und $V=\frac{G\cdot h}{3}$.
Pyramide
und definiere die Funktion berechnePyramidenVolumen
.berechnePyramidenVolumen
auf. Der Funktion werden die beiden Seitenlängen und die Höhe der Pyramide übergeben. Das zurückgegebene Volumen wird am Monitor ausgegeben.Die Lösung sollte folgendermaßen aussehen:
Berechnung des PyramidenvolumensDie Mehrwertsteuer beträgt Anfang 2019 in Deutschland 19 %. Bedingt durch die Coronakrise wird diese im Juli 2020 um drei Prozentpunkte auf 16 % gesenkt.
Mehrwertsteuer
und definiere die Funktion def berechneSteuervorteil(...) -> float
.berechneSteuervorteil
auf. Der Funktion wird der Bruttobetrag als Parameter übergeben. Die zurückgegebene Steuerersparnis bei verringertem Mehrwertsteuersatz soll ausgegeben werden.def berechneMehrwertsteuer (...):
, welche den Nettobetrag, den Mehrwertsteuerbetrag und den Bruttobetrag ausgibt.Die Lösung sollte folgendermaßen aussehen:
MehrwertsteuerrechnerIdee: I. Supper
Du fährst mit dem Auto und hältst eine konstante Geschwindigkeit ein.
Auf deiner linken Seite befindet sich ein Abhang. Auf deiner rechten Seite fährt ein riesiges Feuerwehrauto und hält die gleiche Geschwindigkeit wie du. Vor dir galoppiert ein Schwein, das eindeutig größer ist als dein Auto und du kannst nicht vorbei. Hinter dir verfolgt dich ein Hubschrauber auf Bodenhöhe. Das Schwein und der Hubschrauber haben exakt deine Geschwindigkeit.
Was unternimmst du, um dieser Situation gefahrlos zu entkommen?
Vom Kinderkarusell steigen und weniger Glühwein trinken.
GroessteZahl
und definiere die Funktion def ziehe6aus49(reihe)
zum Erzeugen der Zahlenliste.def ausgebenZahlenreihe (x)
um die unsortierte Zahlenreihe am Monitor auszugeben.def bubblesort(bubblereihe)
um die Zahlenreihe zu sortieren.from random import randint def get_random_num_list(length: int) -> list[int]: num_list: list[int] = [] for i in range(length): num_list.append(randint(0, 1000)) print(num_list) return num_list
Die Lösung sollte folgendermaßen aussehen:
Die unsortierte Zahlenreihe:Jedem Parameter in einer Funktion kann auch ein Standardwert (engl. default parameter value) zugewiesen werden. Diese Standardwert weißt man im Funktionskopf zu.
def begruesse(name, anrede = "Frau"):
print(f"Hallo {anrede} {name},\n wir freuen uns ...")
Beim Funktionsaufruf müssen für Parameter mit Standardwert nun keine Argumente angegeben werden:
begruesse("Müller", "Herr")
begruesse("Maier")
Hallo Frau Müller,
Sie haben 12 kg Äpfel 🍎 gekauft.
Vielen Dank für Ihren Einkauf!
def begruesse(name = "Müller", isMale = False, menge = 12):
print(f"Hallo {"Herr" if isMale else "Frau"} {name}," )
print(f"Sie haben {menge} kg Äpfel gekauft.")
print("Vielen Dank für Ihren Einkauf!")
begruesse()
Man kann auch Argumente als Werte mit Schlüssel (engl. keyword arguments) senden. Der Schlüssel ist dann immer in der Funktionsdefinition festgelegte Name. Die Parameterreihenfolge spielt dann keine Rolle mehr.
def beschreibeTier(tierart, isFemale = True):
print(f"{"Meine" if isFemale else "Mein"} {tierart} ...")
Beim Aufruf kann man die Reihenfolge beliebig wählen und bei gesetzten Standardwerten diese ggf. weglassen:
beschreibeTier(isFemale = False, tierart = "Hund")
beschreibeTier(tierart="Katze")
Mein Hund 🐕 heißt Struppi.
Meine Katze 🐈 heißt Mimi.
def beschreibeTier(name, tierart, isFemale=True):
print(f"{"Meine" if isFemale else "Mein"} {tierart} heißt {name}.")
beschreibeTier(tierart = "Hund 🐕", name = "Struppi", isFemale = False)
beschreibeTier(name = "Mimi", tierart="Katze 🐈")
def meineFunktion(*, x):
. Übrigens kann eine Funktion auch mehrere Werte zurückgeben: return x/3, x%3
. Beim Aufruf müssen dann entsprechend mehrere Werte verarbeitet werden: ergebnis, rest = meineFunktion(10)
.
*
, *args
, **kwargs
*
Gibt man als Parameter *
als ersten Parameter an, sind ausschließlich keyword arguments erlaubt. Dadurch garantiert man beim Aufruf der Funktion eine bessere Lesbarkeit.
Hallo Herr Müller!
def begruessung(*, anrede, name):
print(f"Hallo {anrede} {name}!")
begruessung(anrede="Herr", name="Müller")
*args
Gibt man als Parameter *args
an, sind beliebig viele Parameter erlaubt. Dieser Parameter wird beispielweise in der Funktion print
verwendet. Mit dem Aufruf help(print)
kann man sich die Funktionsbeschreibung anschauen.
ein Argument von *args: Felix
ein Argument von *args: Ella
erstes normales Argument: 4
def testfunktion(*args, x):
for argument in args:
print("ein Argument von *args:", argument)
print("erstes normales Argument:", x)
testfunktion("Felix", "Ella", x= 4)
**kwargs
Benötigt man beliebig viele Parameter mit Schlüsselwert (keyword), verwendet man **kwargs
als Parameter.
name1 = Julia
name2 = Felix
def gruesseMich(**kwargs):
for key, value in kwargs.items():
print(f"{key} = {value}")
gruesseMich(name1="Julia", name2="Felix")
Kreise
und schreibe die Funktion def zeichneKreis(...)
zum Erzeugen der Grafik.def zeichne2Kreise(...)
um in ein Diagramm zwei verschiedene Kreise zu zeichnen.display
heraus oder lass eine bestimmte Anzahl an Kreisen zufällig angeordnet werden.from IPython.display import SVG def zeichneKreis(x, y, radius=10, rot=0, gruen=0, blau=0): svg_str = f'''<svg width="375" height="211"> <circle cx="{x}" cy="{y}" r="{radius}" fill="rgb({rot},{gruen},{blau})"> </circle></svg>''' return SVG(svg_str) #Funktionsaufruf zeichneKreis(30, 40, rot=200, gruen=200, blau=0, radius=20)
Die Lösung sollte bspw. folgendermaßen aussehen:
die Funktion, -n | Eine Funktion ist ein ausgelagerter Programmteil. |
die Funktionsdefinition | Die Funktion wird definiert durch den Funktionskopf und den Funktionsrumpf. Der Funktionskopf besteht aus Modifier, Datentyp des Rückgabewertes, Funktionsname und der Parameterliste; der Funktionsrupf aus den Anweisungen inkl. der Rückgabe. |
der Funktionsname, -n | Der Funktionsname beginnt klein mit einem Verb, da die Funktion etwas ausführt. |
die Parameterliste, -n | eine Liste von Datentypen mit Variablennamen, welche beim Funktionsaufruf übergeben werden |
der Funktionsaufruf, -e | Aufruf eines ausgelagerten Programmteils |
der Rückgabewert, -e | Wert der aus einer Funktion zurückgegeben wird |