Skip to content

Rückgabewerte

Programmieren

Ein Unterprogramm stellt einen wiederverwendbaren Code-Block dar. Dieses kann durch übergebene Argumente mit verschiedenen Situationen umgehen. Zudem kann es einen Wert berechnen und diesen als Rückgabewert zurückliefern.

Rückgabewerte weiterverwenden

Gewisse Unterprogramme berechnen etwas und liefern den Wert zurück. Bei den Turtle-Unterprogrammen gibt es auch solche. Mit ihnen lässt sich der momentane Zustand der Turtle abfragen.

turtle.shape("classic")
setze die Form der Turtle auf ein Dreieck. Liefert keinen Wert zurück.
turtle.shape()
fragt die Turtle welche Form aktiv ist und liefert diese als Rückgabewert zurück.
python
import turtle

turtle.shape('turtle')    # setzt den Turtle-Typ auf "turtle"
print(turtle.shape())     # gibt in der Shell "turtle" aus
turtle.shape('classic')   # setzt den Turtle-Typ auf "classic"
print(turtle.shape())     # gibt in der Shell "classic" aus

turtle.done()

Weitere Turtle-Unterprogramme mit Rückgabewert sind position() (liefert Koordinaten als Vec2D) oder heading() (liefert den momentanen Winkel der Turtle als Zahl).

python
import turtle

turtle.left(42)
turtle.forward(123)

h = turtle.heading()
c = turtle.position()
print("richtung:", h, "koordinaten:", c)

turtle.done()

Rückgabewert zurückliefern

Unsere selbst definierten Unterprogramme haben die Turtle herumfahren lassen. Häufig werden Unterprogramme aber verwendet, um etwas zu Berechnen. Der berechnete Wert wird dann zurückgeliefert und kann vom aufrufenden Programm weiterverwendet werden.

Wir könnten z.B. berechnen, wie weit die Turtle von ihrem Ausgangspunkt entfernt ist. Da die Turtle beim Punkt (0,0) startet, können wir die Berechnung einfach mit Pythagoras machen. Mit den aktuellen Koordinaten der Turtle (x,y) lässt sich die Distanz d wie folgt berechnen:

d=x2+y2

Diesen berechneten Wert soll dann weiterverwendet werden können:

Definition (links) und Aufruf (rechts) der Funktion distanz mit Rückgabewert

Das Unterprogramm zur Berechnung der Quadratwurzel finden wir im math-Modul.

python
import turtle, math

def distanz():
    x,y = turtle.pos()
    d = math.sqrt(x*x + y*y)
    return d

turtle.left(30)
turtle.forward(100)
turtle.left(160)
turtle.forward(50)

strecke = distanz()     # Funktion aufrufen und Wert merken
print(strecke)          # Wert ausgeben

turtle.left(39)         # etwa in Richtung Start ausrichten
turtle.forward(strecke) # zum Start zurückfahren

turtle.done()

Aufgaben

Bei der Turtle braucht man eher selten Rückgabewerte – wir erhalten meistens genügend Rückmeldung durch die Turtle und dem was sie zeichnet. Unterprogramme braucht man häufig, wenn man etwas berechnen möchte:

Aufgabe: Umfang gleichseitiges Dreieck

Gegeben sei ein Unterprogramm, welches ein gleichseitiges Dreieck zeichnet. Die Seitenlänge wird als Argument übergeben:

python
import turtle

def dreieck_gleichseitig(s):
    turtle.forward(s)
    turtle.left(120)
    turtle.forward(s)
    turtle.left(120)
    turtle.forward(s)
    turtle.left(120)

dreieck_gleichseitig(100)
turtle.backward(200)
dreieck_gleichseitig(144)

turtle.done()
  • Schreibe ein zweites Unterprogramm umfang(s), welches ebenfalls als Argument die Seitenlänge eines gleichseitigen Dreickes erhält und daraus den Umfange berechnet und zurückgibt.
  • Rufe dieses Unterprogramm im Unterprogramm dreieck_gleichseitig() auf und schreibe mit turtle.write() den Umfang in eine Ecke des Dreiecks.
mehr: Tipp
python
import turtle

def umfang(s):
    umfang = ...
    return umfang

def dreieck_gleichseitig(s):
    ...
    u = umfang(s)
    turtle.write(u)
    ...
    return ...

dreieck_gleichseitig(100)
turtle.backward(200)
dreieck_gleichseitig(144)

turtle.done()
Lösung
python
import turtle

def umfang(s):
    umfang = 3*s
    return umfang

def dreieck_gleichseitig(s):
    turtle.forward(s)
    turtle.left(120)
    u = umfang(s)
    turtle.write(u)
    turtle.forward(s)
    turtle.left(120)
    turtle.forward(s)
    turtle.left(120)

dreieck_gleichseitig(100)
turtle.backward(200)
dreieck_gleichseitig(144)


turtle.done()

Aufgabe: Fläche gleichseitiges Dreieck

Schreibe ein Unterprogramm, das die Fläche eines gleichseitigen Dreiecks gegeben durch die Seitenlänge berechnet. Das Unterprogramm soll nichts zeichnen, sondern nur die Berechnung anstellen und das Ergebnis als Rückgabewert zurückliefern. Es kann dann im vorherigen Beispiel eingebaut werden, so dass neben dem Umfang auch die Fläche des Dreiecks, z.B. in der nächsten Ecke, angezeigt wird.

mehr: Tipp

Du kennst ja nur die Seitenlänge des Dreiecks. Zur Berechnung der Fläche brauchst du die Höhe. Diese kannst du mit Pythagoras berechnen, da die Höhe ja das gleichseitige Dreieck in zwei rechtwinklige Dreiecke unterteilt.

Lösung
python
import turtle, math

def umfang(s):
    umfang = 3*s
    return umfang

def flaeche(s):
    h = math.sqrt(s**2 + (s/2)**2)
    a = s * h /2
    return a

def dreieck_gleichseitig(s):
    turtle.forward(s)
    turtle.left(120)
    u = umfang(s)
    turtle.write(u)
    turtle.forward(s)
    turtle.left(120)
    f = flaeche(s)
    turtle.write(f)
    turtle.forward(s)
    turtle.left(120)

dreieck_gleichseitig(100)
turtle.backward(200)
dreieck_gleichseitig(144)


turtle.done()

Zusatzaufgabe: Formatierung

Wie könntest du die Fläche etwas schöner ausgeben, z.B. keine oder nur wenige Nachkommastellen.

mehr: Tipp

https://www.w3schools.com/python/ref_func_round.asp
https://www.w3schools.com/python/python_string_formatting.asp

Lösung: Formatierung

Man kann mit dem round-Unterprogramm auf eine bestimmte Anzahl Nachkommstellen (zweites Argument) runden.

Hier wird auch zwei Nachkommastellen gerundet:

python
x = 12.33434
y = round(x,2)

print(x,y)

Mehr unter https://www.w3schools.com/python/ref_func_round.asp

Eine Alternative sind sogenannt F-Strings. Dort können direkt Variablen eingebaut und formatiert werden. In folgendem Beispiel wird {price:.2f} mit der Variablen price ersetzt, formatiert als float mit 2 Kommastellen.

python
price = 59
txt = f"The price is {price:.2f} dollars"
print(txt)

Mehr unter https://www.w3schools.com/python/python_string_formatting.asp

Gymnasium Kirchenfeld, fts