TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
rueckgabewerte

12. FUNKTIONEN MIT RÜCKGABEWERTEN

 

 

DU LERNST HIER...

 

wie eine Funktion mit dem Schlüsselwort return  Informationen  zurückgeben kann. Auch einige Turtlebefehle sind Funktionen, die Werte zurückgeben, wie beispielsweise die Funktion getX(), welche die aktuelle x-Koordinate der Turtle zurück liefert.

 

 

MUSTERBEISPIEL

 

Du willst mit der Maus Häuser zeichnen und zwar so, dass du die Maus mit gedrückter Maustaste von der linken unteren Ecke bis zur rechten oberen Ecke des Hauses bewegst. Sobald du die Maustaste loslässt, wird das Haus gezeichnet.

Die Funktion getDimension() bestimmt aus den Mauskoordinaten die Breite, Höhe und die Dachgrösse und gibt diese Werte mit return zurück. Mit dem Aufruf von b, h, r = getDimension() in der Funktion drawHouse() stehen diese Werte für das Zeichnen des Hauses zur Verfügung.

 


from gturtle import *
from math import sqrt 

def onMousePressed(x,y):
    global x0, y0
    x0 = x
    y0 = y    
    setPos(x0, y0)
    dot(8)  
    
def onMouseReleased(x,y):
    global x1, y1
    x1 = x
    y1 = y   
    setPos(x1, y1)    
    dot(8)
    drawHouse()       
                  
def getDimension():
    base = x1 - x0
    height = y1 - y0
    roof = base / sqrt(2)
    return base, height, roof

def drawHouse():
    b, h, r = getDimension()
    setPos(x0, y0)
    repeat 2:
        forward(h)
        right(90)
        forward(b)
        right(90)
    forward(h)
    right(45)   
    forward(r)
    right(90) 
    forward(r) 
    n = 0
    heading(0)  
            

makeTurtle(mousePressed = onMousePressed, mouseReleased = onMouseReleased)
hideTurtle()
n = 0
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Eine Funktion kann einen oder mehrere Werte zurückgeben. Dabei ist die Reihenfolge in der return Anweisung wichtig. Genau in dieser Reihenfolge holst du die Werte mit b, h, r = getDimension() zurück.

Für die Berechnung der Dachlänge nach dem Satz von Pythagoras brauchst du die Wurzel aus 2. Dazu verwendest du die Funktion sqrt() aus dem Modul math.

Damit die Werte x0, y0, x1, y1 in den Calbackfunktionen onMousePressed() und onMouseReleased() geändert werden können, müssen sie als global definiert sein.

 

 

ZUM SELBST LÖSEN

  1.
Dein Programm soll nach der Eingabe der Seitenlänge s ein Haus zeichnen, das aus einem Quadrat mit der Seite s und einem mit 45° geneigten Dach besteht.  
Für die Berechnung der Dachgrösse verwendest du eine Funktion mit Rückgabewert.

Eine Dialogbox für die Eingabe der Seitenlänge erhältst du mit:

s = inputInt("Gib die Seitenlänge ein")

 
  2.

Du sollst die Werte der Funktion

y = 
(1)/ 4 x + 50

im Bereich x = -250 bis 250 mit einer Schrittweite von 5 berechnen und den Graf der Funktion zeichnen. Verwende für die Berechnung der Werte eine Funktion mit Rückgabewert. Zeichne eine x- und eine y-Achse und verwende die Funktion moveTo(x, y), um die Funktion zu zeichnen.

 

Schreibe die Funktionswerte auch mit print x, y im Ausgabefenster aus. So kannst du sehr einfach den Schnittpunkt der Geraden mit der x-Achse bestimmen.  


   

 

12-1
Didaktische Hinweise:

Diese Vorstellung entspricht dem Begriff der Funktion y = f(x) aus der Mathematik, wo zu jedem Eingabewert (Abszisse, x-Wert) ein eindeutiger Ausgabewert y (Ordinate, y-Wert) gehört. Hier spricht man allerdings nicht von "abgeben".

In diesem Zusammenhang können auch fächerverbindende Aspekte zwischen Mathematik und Informatik gepfleg werden, wie die nachfolgende Flächenberechnung mit der Formel von Heron zeigt.

Begriffe wie

  • Funktionales Programmieren, Werte- und Variablenparameter, seiteneffektfreie Funktionen
  • Rekursive Funktionen
  • Lambda-Kalkül

gehören zwar zu den Grundkonzepten der Informatik, werden aber in diesem Einführungslehrgang ausgeklammert.

12-2
Fachliche Hinweise:

Für die Schreibweise von algebraischen Ausdrücken ist Folgendes zu beachten:

  • Zur Klammerung gibt es nur die runden Klammern, die immer als Klammerpaar gesetzt werden müssen. Die Abarbeitung erfolgt von "Innen nach Aussen"
  • Das Multiplikationszeichen * muss immer gesetzt werden, d.h. 2x muss als 2 * x geschrieben werden
  • Es gibt keinen durchgehenden Bruchstrich, d.h. Brüche müssen durch geeignete Klammerung geschrieben werden, beispielsweise
      (   a     / b + c als a / (b + c)
  • Für die Bindung bzw. der Rangfolge der Rechenoperationen gelten die gleichen Regeln wie in der Mathematik: + und - binden gleich stark, * und / ebenfalls; *  und / binden stärker als + und -.
  • Potenzen wie y = x2 können auf verschiedene Arten geschrieben werden:
    y = x * x
    y = x ** 2
    y  = math.pow(x, 2)

    Im letzten Fall muss noch import math im Programmkopf stehen
  • Leerschläge zwischen den Operationszeichen und Klammern können nach Belieben gesetzt werden. Es gehört zum guten Programmierstil, damit grosszügig umzugehen, aber insbesondere, sich immer an die gleichen selbstauferlegten Konventionen zu halten.
8-3
Didaktischer Hinweis:

Das Programm sollte noch "robust" gemacht werden, d.h. unsinnige Eingaben, die zu einem Programmabbruch führen, sollten mit einer Fehlermeldung zurückgewiesen werden, beispielsweise falls a grösser als c gewählt wird. Da if-Bedingungen noch nicht behandelt sind, wird diese Verbesserung auf später verschoben.

8-4
Fachlicher Hinweis:

Eigentlich wird auch in Python nur ein Funktionswert zurückgegeben, und zwar ein Tupel. Mit der Kommaschreibweise return a, b in der Funktion f() werden a und b automatisch in ein Tupel verpackt und bei der Zuweisung  x, y = f() automatisch wieder ausgepackt.