def Funktionsname(Parameter1, Parameter2):
Anweisungsblockreturn Rückgabewert
6 Eigene Funktionen definieren
Das Definieren eigener Funktionen eröffnet vielfältige Möglichkeiten in Python:
Komplexe Programme können mit einer einzigen Zeile Code aufgerufen und ausgeführt werden.
Funktionen können praktisch beliebig oft aufgerufen werden und sind durch den Einsatz von Parametern und Methoden der Flusskontrolle gleichzeitig in der Lage, flexibel auf wechselnde Bedingungen zu reagieren.
Funktionen machen Programmcode kürzer und lesbarer. Außerdem gibt es nur eine Stelle, welche bei Änderungen angepasst werden muss.
6.1 Syntax
Das Schlüsselwort def
leitet die Funktionsdefinition ein. Es wird gefolgt vom Funktionsnamen und den Funktionsparametern, welche in runden Klammern ()
eingeschlossen sind. Der Funktionskopf wird mit einem Doppelpunkt :
beendet. Der Anweisungsblock der Funktion ist eingerückt. Jede Funktion liefert einen Rückgabewert, welche durch das Schlüsselwort return
an die aufrufende Stelle zurückgegeben wird. return
beendet die Ausführung der Schleife, auch wenn es nicht am Ende des Anweisungsblocks steht.
Damit die Funktion ausgeführt wird, muss der definierte Funktionsname aufgerufen werden. In der Funktion ist nach dem Schlüsselwort return
eine weitere Anweisung enthalten, die nicht mehr ausgeführt wird.
# Beispiel 1: Summe der Quadrate
# Definition einer Funktion zur Berechnung der Summe der Quadrate von zwei Argumenten
def sum_quadrate(a, b):
print('Argument a:', a)
print('Argument b:', b)
print(18 * '=')
= a**2 + b**2
summe return summe
print("Anweisungen nach dem Schlüsselwort return werden nicht mehr ausgeführt.")
print(sum_quadrate(6, 7))
Argument a: 6
Argument b: 7
==================
85
Der Rückgabewert kann in einer Variablen gespeichert werden.
= sum_quadrate(6, 7)
ergebnis print(ergebnis)
Argument a: 6
Argument b: 7
==================
85
6.2 Optionale Parameter
Mit Hilfe von optionalen Parametern kann die Programmausführung gesteuert werden. Optionale Parameter müssen nach verpflichtend zu übergebenen Parametern definiert werden. In diesem Beispiel wird die print-Ausgabe der Funktion mit dem Parameter ausgabe
gesteuert.
# Beispiel 2: optionale Argumente
# Definition einer Funktion zur Berechnung der Summe der Quadrate von zwei Argumenten
def sum_quadrate(a, b, ausgabe = False):
if ausgabe:
print('Wert Argument a:', a)
print('Wert Argument b:', b)
print(18 * '=')
= a**2 + b**2
summe return summe
print(sum_quadrate(42, 7), "\n")
print(sum_quadrate(42, 7, ausgabe = True))
1813
Wert Argument a: 42
Wert Argument b: 7
==================
1813
Gibt es mehrere optionale Parameter, so erfolgt die Zuweisung von Argumenten positional oder über das Schlüsselwort.
# Beispiel 3: mehrere optionale Argumente
# Definition einer Funktion zur Berechnung der Summe der Quadrate von zwei Argumenten
def sum_potenzen(a, b, p = 2, ausgabe = False):
if ausgabe:
print('Argument a:', a)
print('Argument b:', b)
print('Argument p:', p)
print(18 * '=')
= a**p + b**p
summe return summe
# positionale Übergabe
print(sum_potenzen(42, 7, 3, True), "\n")
# Übergabe per Schlüsselwort
print(sum_potenzen(42, 7, ausgabe = True, p = 4))
Argument a: 42
Argument b: 7
Argument p: 3
==================
74431
Argument a: 42
Argument b: 7
Argument p: 4
==================
3114097
6.3 Rückgabewert(e)
Funktionen können in Python nur einen einzigen Rückgabewert haben. Trotzdem können mehrere Rückgabewerte mit einem Komma getrennt werden. Python gibt diese als Tupel zurück.
# Beispiel 4: mehrere Rückgabewerte
# Definition einer Funktion zur Berechnung der Summe der Quadrate von zwei Argumenten
def sum_potenzen(a, b, p = 2, ausgabe = False):
if ausgabe:
print('Argument a:', a)
print('Argument b:', b)
print('Argument p:', p)
print(18 * '=')
= a**p + b**p
summe return a, b, summe
= sum_potenzen(2, 7, ausgabe = False, p = 4)
ergebnis print(ergebnis, type(ergebnis))
(2, 7, 2417) <class 'tuple'>
Mit dem Slice Operator kann ein bestimmter Rückgabewert ausgewählt werden.
print(ergebnis[2])
= sum_potenzen(2, 7, ausgabe = False, p = 4)[2]
summe_potenzen print(summe_potenzen, type(summe_potenzen))
2417
2417 <class 'int'>
6.4 Aufgaben Funktionen definieren
- Palindrom
Schreiben Sie eine Funktion is_palindrome(), die prüft, ob es sich bei einer übergebenen Zeichenkette um ein Palindrom handelt.
Hinweis: Ein Palindrom ist eine Zeichenkette, die von vorne und von hinten gelesen gleich bleibt, wie beispielsweise ‘Anna’, ‘Otto’, ‘Lagerregal’. Palindrome müssen nicht aus Buchstaben bestehen, sie können sich auch aus Zahlen oder Buchstaben und Zahlen zusammensetzen wie beispielsweise ‘345g543’.
- Fibonacci-Zahlenreihe
Entwickeln Sie eine Funktion fibonacci(n), die die ersten n Zahlen der Fibonacci-Reihe generiert und als Liste zurückgibt. Die Fibonacci-Reihe beginnt mit 0 und 1, jede weitere Zahl ist die Summe der beiden vorhergehenden Zahlen.
- Verschlüsselung
Bei Geocachen werden oft verschlüsselte Botschaften als Rätsel verwendet. Oft wird folgende Logik zur Verschlüsselung angewendet:
A -> Z
B -> Y
C -> X
…
Schreiben Sie eine Funktion verschluesseln(str)
, die einen String als Eingabewert bekommt und einen verschlüsselten String zurückgibt. Wie können Sie einen verschlüsselten String am einfachsten wieder entschlüsseln?
- Temperaturkonverter
Entwickeln Sie eine Funktion temperatur_umrechnen(wert, von_einheit, nach_einheit)
, die eine Temperatur von einer Einheit in eine andere umwandelt. Die Funktion soll folgende Parameter verwenden:
wert: Der Temperaturwert, der umgewandelt werden soll.
von_einheit / nach_einheit: Die Einheit des Ausgangs- bzw. des Zielwerts als string. Mögliche Werte sind ‘C’ für Celsius, ‘F’ für Fahrenheit und ‘K’ für Kelvin.
Es gelten die folgenden Umrechnungsformeln zwischen den Einheiten:
Celsius nach Fahrenheit: F = C * 9/5 + 32
Fahrenheit nach Celsius: C = (F - 32) * 5/9
Celsius nach Kelvin: K = C + 273.15
Kelvin nach Celsius: C = K - 273.15
Fahrenheit nach Kelvin: K = (F - 32) * 5/9 + 273.15
Kelvin nach Fahrenheit: F = (K - 273.15) * 9/5 + 32
Die Musterlösung kann Marc machen
(Arnold (2023))