Rückgabewerte
Unterprogramme mit einer Rückgabe
In der folgenden Aufgabe wird das Konzept von Rückgabewerten eingeführt. Sie ermöglichen, dass man mithilfe von Unterprogrammen gesuchte Werte für Variablen bestimmt.
Aufgabe
Wir analysieren das folgende kurze Programm:
# Unterprogramme
def countLeafs():
i = 0
while kara.onLeaf():
kara.move()
i = i+1
return i
def walk(distance):
i = 0
while i < distance:
kara.move()
i = i+1
# Hauptprogramm
n = countLeafs()
walk(n)
(a) Versuche zuerst, rein anhand des Quelltextes zu erschließen, wozu das neue Unterprogramm countLeafs()
da ist.
(b) Teste das Programm aus, indem du Kara auf eine Kleeblatt-Strecke (z.B. mit 3 Blättern) postierst und das Programm ausführst.
(c) Beschreibe möglichst präzise, was in Zeile 7 geschieht. Wie hängt dies mit der Zuweisung in Zeile 16 zusammen? Schaue dir nach deinen eigenen Überlegungen die nachfolgende Erklärung an.
Unterprogramme können in Python einen Wert „zurückliefern“, man nennt ihn einen Rückgabewert:
-
In der Unterprogrammdeklaration wird festgelegt, dass eine Variable, die im Unterprogramm vorkommt, zurückgeliefert wird. Das geschieht mit dem Befehl
return
. In diesem Fall bedeutet das, dass das Unterprogramm „ganz normal“ abläuft (also diewhile
-Schleife in Zeile 4 bis 6 durchläuft) und danach der Wert der Variablei
ans Hauptprogramm übermittelt wird. -
Im Unterprogrammaufruf kann man festlegen, was mit dem Rückgabewert des Unterprogramms geschehen soll. Hier wird er durch die Zuweisung in Zeile 16 als Wert der Variable
n
übernommen. Hat ein Unterprogramm keinen Rückgabewert, ergibt eine solche Zuweisung natürlich keinen Sinn. -
Ein Unterprogramm mit Rückgabewert kann auch aufgerufen und sein Rückgabewert direkt als Parameter eines weiteren Unterprogramms verwendet werden. Man kann z.B. das Hauptprogramm auf eine Zeile zusammenkürzen:
walk(countLeafs())
. Jetzt arbeitet Python das von innen nach außen ab: Erst wirdcountLeafs()
ausgeführt, dann wird der Rückgabewert davon als Parameter für das Unterprogrammwalk(...)
genutzt.
(d) Wir kennen Variablen in Unterprogrammen nun in zwei verschiedenen besonderen Rollen: als Parameter (z.B. in walk(...)
) und als Rückgabewerte (z.B. in countLeafs()
). Erkläre den Unterschied.
(e) Schreibe ein ähnliches Unterprogramm, das Folgendes bewirkt: Kara läuft bis zum nächsten Baum. Das Unterprogramm gibt die Anzahl der Schritte als Rückgabewert zurück. Nenne es z.B. countToTree()
.
(f) Optional: Mit countToTree()
und walkAndPut(...)
kannst du Programme in verschiedenen Situationen deutlich verkürzen. Löse (noch einmal) die Übungsaufgabe 3 (Bau spiegeln) mithilfe dieser Unterprogramme.