Ein Unterprogramm stellt einen wiederverwendbaren Code-Block dar. Es kann durch übergebene Argumente mit verschiedenen Situationen umgehen. Zudem kann es einen Wert berechnen und diesen als Rückgabewert an den Aufrufenden zurückliefern.
def unterprogramm(argument1, argument2, ...):
block
return rückgabewert
variable = unterprogramm(argument1, argument2, ...)
Beispiel
Wir schreiben die Lösungsformel der Quadratischen Gleichung neu und verpacken die Berechnung in ein Unterprogramm, so dass wir dieses mehrmals verwenden können:
from math import sqrt
def quadr(a, b, c):
x1 = (-b + sqrt(b**2 - 4*a*c))/(2*a)
x2 = (-b - sqrt(b**2 - 4*a*c))/(2*a)
return (x1, x2)
print("Dieses Programm löst eine Quadratische")
print("Gleichung der Form ax^2 + bx + c = 0")
a = float(input("Gib den Wert für den Koeffizienten a ein: "))
b = float(input("Gib den Wert für den Koeffizienten b ein: "))
c = float(input("Gib den Wert für den Koeffizienten c ein: "))
(x1, x2) = quadr(a, b, c)
print("Die Lösungen lauten:")
print("x1 =", x1)
print("x2 =", x2)
from math import sqrt
print("Dieses Programm löst eine Quadratische")
print("Gleichung der Form ax^2 + bx + c = 0")
a = float(input("Gib den Wert für den Koeffizienten a ein: "))
b = float(input("Gib den Wert für den Koeffizienten b ein: "))
c = float(input("Gib den Wert für den Koeffizienten c ein: "))
x1 = (-b + sqrt(b**2 - 4*a*c))/(2*a)
x2 = (-b - sqrt(b**2 - 4*a*c))/(2*a)
print("Die Lösungen lauten:")
print("x1 =", x1)
print("x2 =", x2)
Aufgabe
Löse mit dem obigen Programm die folgenden Quadratischen Gleichungen:
- Was beobachtest du?
- Wo gibt es Probleme? Wieso?
Aufruf
Im Allgemeinen ruft man ein Unterprogramm auf, indem man seinen Namen, gefolgt von runden Klammern mit – falls vorhanden – durch Kommas getrennte Werte, sogenannte Argumente, schreibt.
Definition
Wenn wir ein eigenes Unterprogramm definieren, so verlassen wir die eigentliche Haupt-Sequenz des Programms. Dies kennzeichnen wir durch Einrücken:
def hallo():
print("Hallo Welt")
print("Hallo Zorg")
print("hi")
hallo()
hi
Hallo Welt
Hallo Zorg
- Zeile 1
- definiert ein Unterprogramm
name
mit Argumentenargs
- Zeilen 2-3
- gehören zur Sequenz des Unterprogramms, werden also erst aufgerufen wenn irgendwo das Unterprogramm aufgerufen wird
- Zeile 5
- gehört nicht mehr zum Unterprogramm
- Zeile 6
- ruft das Unterprogramm auf.
Das Unterprogramm hallo
wird zwar auf den Zeilen 1-3 definiert, aber erst am Schluss aufgerufen. Der erste print
-Befehl, der ausgeführt wird, ist der auf Zeile 5.
Warnung
Bevor ein Unterprogramm aufgerufen werden kann, muss es definiert sein!
Argumente
Ein Unterprogramm kann kein, ein oder mehrere Argumente entgegennehmen. Damit wir ein Unterprogramm mit den korrekten Argumenten «füttern» können, müssen wir aber wissen, was es tut und was es als Argument(e) erwartet.
Übergeben von Argumenten beim Aufruf
Wir schauen uns das Beispiel mit der quadratischen Lösungsformel an. Hier werden die Argumente des Unterprogramms quadr
auf Zeile 3 definiert:
from math import sqrt
def quadr(a, b, c):
x1 = (-b + sqrt(b**2 - 4*a*c))/(2*a)
x2 = (-b - sqrt(b**2 - 4*a*c))/(2*a)
return (x1, x2)
Das Unterprogramm quadr
erhält 3 Argumente. Diese werden mit a
, b
und c
bezeichnet. Die Namen der Argumente verhalten sich wie Variablennamen. Die Argumente selbst sind nur im Unterprogramm drin gültig.
Entgegennehmen von Argumenten bei der Definition
Beim Aufruf des Unterprogramms quadr
müssen wir wissen wieviele Argumente dieses erwartet und welches Argumente für was steht – also die Reihenfolge der Argumente.
a = float(input("Gib den Wert für den Koeffizienten a ein: "))
b = float(input("Gib den Wert für den Koeffizienten b ein: "))
c = float(input("Gib den Wert für den Koeffizienten c ein: "))
(x1, x2) = quadr(a, b, c)
print(x1, x2)
Als Argumente übergeben werden Werte! Wir müssen beim Aufruf keine Variablen verwenden und diese müssen auch nicht gleich lauten wie die Argumente:
(x1, x2) = quadr(1, -2, 1)
print(x1, x2)
koeff1 = 1
koeff2 = -4
koeff3 = 3
(x1, x2) = quadr(koeff1, koeff2, koeff3)
print(x1, x2)
Syntax
Eingeleitet wird die Definition des Unterprogramms mit dem Schlüsselwort def
gefolgt vom Namen des Unterprogramms, der sicherstellt, dass das Unterprogramm auch aufgerufen werden kann.
Nach dem Namen folgt eine Runde Klammer, worin die übergebenen Argumente aufgelistet werden. Die Klammer muss da sein, kann aber auch leer bleiben.
Die Definition wird mit einem Doppelpunkt abgeschlossen.
Der Inhalt des Unterprogramms muss eine Ebene eingerückt sein. Als letzter Befehl kann mit dem Schlüsselwort return
ein Wert zurückgegeben werden. return
bricht die Ausführung des Unterprogramms ab!
def unterprogramm(argument1, argument2, ...):
befehl1
befehl2
...
return rückgabewert
variablen = unterprogramm(argument1, argument2, ...)