139
Funktionen mit mehreren Parametern
color("red", "cyan")
fuelle_dreieck(seite)
left(120)
seite = seite + aenderung
color("green", "magenta")
fuelle_dreieck(seite)
left(120)
seite = seite + aenderung
color("blue", "yellow")
fuelle_dreieck(seite)
>
Speichere das Programm und teste es!
>
Speichere eine Kopie des Programms als
dreieck10.py
.
Vielleicht denkst du jetzt: Was bringt denn das? Wir haben keine einzige
Anweisung eingespart und das Programm ist eher komplizierter geworden.
Immerhin bleibt der Vorteil, dass wir nicht wissen müssen, wie die Funktio-
nen
dreieck()
und
fuelle_dreieck()
programmiert sind, insbesonde-
re, welcher Variablenname für die Länge der Dreieckseite verwendet wird.
Mache dir das am Beispiel der Funktion
forward()
klar: Sicherlich wäre es
sehr unpraktisch, wenn wir
forward()
in der Form
distanz = 50
forward()
verwenden müssten. Wir müssten dazu wissen und ständig daran denken,
dass innerhalb der Funktion
forward()
der Variablenname
distanz
ver-
wendet wird.
Funktionen mit mehreren
Parametern
Oft ist es nötig, einer Funktion mehr als eine Information zu übergeben.
Denke beispielsweise an die Turtle-Grafik-Funktion
color()
.
140
Funktionen mit Parametern
Kapitel
5
Stelle dir vor, du kennst von einem Rechteck die Länge, zum Beispiel 54.5
und die Breite, zum Beispiel 36.8. Du möchtest eine Funktion schreiben, die
für jedes Rechteck auf den Bildschirm schreibt, wie groß sein Flächeninhalt
ist.
Um der Funktion beide Werte übergeben zu können, werden wir sie mit
zwei Parametern,
laenge
und
breite
, versehen. Um genau zu sehen, wie
die Funktion arbeitet, wollen wir auch die Werte, auf die die Parameterna-
men
laenge
und
breite
verweisen, mit einer
print()
-Funktion ausge-
ben.
Das können wir ganz leicht mit dem IPI ausprobieren:
>
Mach mit!
>>> def rechteckflaeche(laenge, breite):
print("Länge:", laenge, " Breite:", breite)
flaeche = laenge * breite
print("Die Fläche beträgt:", flaeche)
>>> rechteckflaeche(16, 5)
Länge: 16 Breite: 5
Die Fläche beträgt: 80
>>> rechteckflaeche(5, 16)
Länge: 5 Breite: 16
Die Fläche beträgt: 80
Beachte: Der erste Parameter ist immer die Länge, der zweite die Breite
unabhängig von ihrer Größe! Daher ist im letzten Beispiel die
laenge
klei-
ner als die
breite
.
>>> a = 54.5
>>> b = 36.8
>>> rechteckflaeche(a,b)
Länge: 54.5 Breite: 36.8
Die Fläche beträgt: 2005.6
>>>
Sehen wir uns nochmals den Code von
dreieck_arbeit.py
an. Vor je-
dem Aufruf unserer Funktion
fuelle_dreieck()
steht ein Aufruf der
Turtle-Grafik-Funktion
color()
. Wir können diesen Aufruf in die Funktion
fuelle_dreieck()
hineinnehmen, wenn wir die Stiftfarbe und Füllfarbe
für das Dreieck als zweiten und dritten Parameter festlegen:
141
Funktionen mit mehreren Parametern
def fuelle_dreieck(seitenlaenge, stiftfarbe, fuellfarbe):
"""Zeichne gefülltes Dreieck mit Seite seitenlaenge.
Umrandung in stiftfarbe, Füllung mit fuellfarbe.
"""
color(stiftfarbe, fuellfarbe)
begin_fill()
dreieck(seitenlaenge)
end_fill()
Damit vereinfachen sich die Passagen, wo die Dreiecke gezeichnet werden:
seite = startseite
fuelle_dreieck(seite, "red", "cyan")
left(120)
seite = seite + aenderung
fuelle_dreieck(seite, "green", "magenta")
left(120)
seite = seite + aenderung
fuelle_dreieck(seite, "blue", "yellow")
>
Führe diese beiden Änderungen in
dreieck_arbeit.py
aus. Teste
das Programm und speichere danach eine Kopie unter dem Namen
dreieck11.py
ab.
Warum wir die beiden anderen Anweisungen nicht in die Funktion
fuel-
le_dreieck()
hineinnehmen, haben wir schon im vorigen Kapitel geklärt!
Funktionen mit Parametern gehören zu den wichtigsten Elementen von
Python-Programmen. Daher hier zusammenfassend ein Muster dafür:
Muster 7: Definition einer Funktion mit Parametern
def Funktionsname(param1, param2, ...):
Anweisung 1
Anweisung 2
Funktionskop
f
Funktionskörper
Anweisungen verwenden die lokalen Namen
param1
,
param2
, ...
Alle Anweisungen des Funktionskörpers gleich weit eingerückt

Get Python für Kids now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.