Durch das Definieren von Funktionen (auch Unterprogramme genannt) und dem mehrmaligen Aufruf dieser, vermeidet man, dass Code doppelt geschrieben werden muss.
Lerne etwas neues …
mache es …
Syntax
Definition
- Zeile 1
- Eine Unterprogramm beginnt mit dem Schlüsselwort
def
(für definition) - Anschliessend folgt der Name für das Unterprogramm. Dieser kann wie bei den Variablennamen mehr oder weniger frei gewählt werden
- Dann kommen die Argumente in einer runden Klammer
- Die Definition wird mit einem Doppelpunkt abgeschlossen
def name(args, kwargs):
do1
do2
...
return x
- Zeilen 2-4
- Der Inhalt des Unterprogramms
- Hier ist beliebiger Code möglich
- alles was zum Unterprogramm gehört, muss um eine Ebene (3 Leerzeichen oder 1 Tab) eingerückt werden
- Letzte Zeile
- Das Unterprogramm wird mit der
return
-Anweisung abgeschlossen und kann einen Wert zurückgeben
Aufruf
Ein Unterprogramm rufen wir mit dessen Namen und einer runden Klammer auf. In die runde Klammer kommen die Argumente. Wenn es keine Argumente hat, steht dort eine leere runde Klammer.
z = name(args, kwargs)
Der Aufruf eines Unterprogramms wird wie ein Ausdruck ausgewertet. Das Ergebnis (der Rückgabewert) kann wie bei einem Ausdruck einer Variablen zugewiesen oder direkt in einem Ausdruck weiterverwendet werden.
Argumente
- args
- Einem Unterprogramm können Argumente (arguments) übergeben werden. Dadurch kann ein Unterprogramm mit variablen Eingaben eine Klasse von Problemen lösen.
- kwargs
- Eine Spezialität von Python sind sogenannte keyword arguments. Es handelt sich um benannte Argumente. Der Vorteil: Weil sie benannt sind, können sie in beliebiger Reihenfolge stehen und dank eines Default-Wertes können sie auch weggelassen werden.
Beispiel
def hallo(vorname, nachname, anrede, dutzen=True):
if dutzen:
print("Hallo", vorname)
else:
print("Guten Morgen", anrede, nachname)
hallo("Donald", "Duck", "Herr")
hallo("Donald", "Duck", "Herr", False)
hallo("Donald", "Duck", "Herr", True)
Aufgabe
Führe das Beispiel aus:
- Was geschieht?
- Was sind keyword arguments
Aufgaben
Aufgabe: Pythagoras
Von Pythagoras kennen wir die Formel
Dabei stehen
Wir können also bei 2 gegebenen Seitenlängen die Länge der dritten Seite berechnen.
Wir definieren eine einfache Funktion die bei bekannten Katheten die Hypothenuse berechnet:
import math
def hypotenuse(a, b):
c = math.sqrt(a**2 + b**2)
return c
hypotenuse(3,4)
Wir versuchen das nun mit keyword arguments:
import math
def pythagoras(a=0, b=0, c=0):
if c==0:
return math.sqrt(a**2 + b**2)
pythagoras(a=3,b=4)
Erweitere die Funkion pythagoras
, so dass aus Hypothenuse c
und einer Kathete (a
oder b
) die andere Kathete berechnet werden kann.
pythagoras(c=5,b=4)
pythagoras(a=3,c=5)
Was geschieht bei den folgenden Aufrufen?
Wie könnten wir die Funktion im Hinblick auf diese Fälle besser programmieren?
pythagoras(a=3,b=4,c=5)
pythagoras(a=3)
pythagoras()
Rückgabewerte
Das Unterprogramm kann mit dem Schlüsselwort return
einen sogenannten Rückgabewert liefern. return
stellt das Ende des Unterprogramms dar. Der Rückgabewert kann von einem beliebigen Datentyp sein.
Aufgabe: Quadratische Gleichung
Bekanntlicherweise lassen sich Quadratische Gleichungen der Form
mit der folgenden Lösungsformel lösen.
Das Spezielle: es kann kein, eine oder zwei Lösungen geben!
- Die Gleichung
sollte zwei Lösungen haben: -1 und 1 - Die Gleichung
hat genau eine Lösung: 1 - Die Gleichung
hat keine Lösung
Die untenstehende Funktion zeigt die Lösungen einer Quadratischen Gleichung gegeben durch ihre Koeffizienten a
, b
und c
an:
import math
def quadr(a,b,c):
D = b**2 - 4*a*c
if D < 0:
print("keine Lösung")
elif D == 0:
x = (-b + math.sqrt(D))/2*a
print(x)
else:
x1 = (-b + math.sqrt(D))/2*a
x2 = (-b - math.sqrt(D))/2*a
print(x1, x2)
quadr(1,0,-1)
quadr(1,-2,1)
quadr(1,0,1)
Verbessere nun die Funktion: Statt mit print
zu arbeiten, soll die Funktion Werte zurückliefern die weiterverwendet werden können!