parameter

7. PARAMETER

 

 

DU LERNST HIER...

 

wie du eine Funktion definierst, der du Parameterwerte übergeben kannst. Du kennst dies bereits von vielen Turtlebefehlen. Wenn du beispielsweise forward(100) schreibst, erhält die Funktion forward() den Wert 100 und bewegt anschliessend die Turtle gemäss dieser Schrittweite vorwärts.

 

 

MUSTERBEISPIELE

 

Im Kapitel 5 hast du eine Funktion square() definiert, die ein Quadrat mit fixer Seitenlänge 100 zeichnet. Man sagt anschaulich, dass die Seitenlänge 100 im Programm "fest verdrahtet" sei.

Die Funktion kann viel flexibler eingesetzt werden, wenn du die Seitenlänge beim Funktionsaufruf angeben kannst, also z.B. square(50) oder square(70) schreiben kannst. Dazu musst du die Funktionsdefinition von square(s) mit einem Parameter versehen, dessen Name du in die Parameterklammer schreibst. Den Parameter kannst du im Innern der Funktion (im Funktionskörper) wie eine gewöhnliche Variable verwenden. Im Programm zeichnet die Turtle zwei Quadrate mit den Seitenlängen 80 und 50.

 


from gturtle import *

def square(s):    
    repeat(4): 
        forward(s) 
        left(90)
      
makeTurtle()
setPenColor("red")
square(80)
left(180)
setPenColor("green")
square(50)
► In Zwischenablage kopieren

 

Erst richtig einleuchtend ist die Verwendung des Parameters s, wenn du, wie im folgenden Programm, sehr viele, sagen wir 100 Quadrate mit verschiedenen Seitenlängen zeichnen willst. Damit die Turtle schnell arbeitet, versteckst du sie. Zudem setzt du die Turtle am Anfang mit setPos(-200, -200) nach links unten, damit das Bild schön zentriert ist.

from gturtle import *

def square(s):
    repeat 4:
        forward(s)
        right(90)

makeTurtle()
hideTurtle()
setPos(-200, -200)
side = 400
repeat 100:
    square(side) 
    side -= 4
► In Zwischenablage kopieren
 

 

Eine Funktion kann auch mehrere Parameter haben. In deinem Beispel definierst du eine Funktion polygon(n, c) mit zwei Parametern n für Anzahl Ecken und c für die Stiftfarbe. Die funktion zeichnet regelmässige Vielecke mit der gegebenen Anzahl Ecken und Farbe. Im Hauptprogramm wird die Funktion 6 mal aufgerufen und zeichnet dabei ein Dreieck, Quadrat, 5-Eck, 6-Eck, 8-Eck und 10 Eck un verschiedenen Farben.

Der Drewinkel, den du zum Zeichnen benötigst, lässt sich mit 360 / n bereichnen.

 


from gturtle import *

def polygon(n, c):
    w = 360 / n
    setPenColor(c)
    repeat n:
        forward(100)
        left(w)

makeTurtle()
setPos(-50, -200)
setPenWidth(3)
right(90)
polygon(3, "red")
polygon(4, "green")
polygon(5, "blue")
polygon(6, "magenta")
polygon(8, "cyan")
polygon(10, "black")
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Eine Funktion kann einen oder mehrere Parameter haben. Die Werte der Parameter werden beim Funktionsaufruf festgelegt.


Mit dem Befehl setPos(x, y) kannst du die Turtle an eine beliebige Position im Turtlefenster versetzen.

Die x-y-Achsen des Koordinatensystems sind wie in der Mathematik üblich positioniert mit dem Urprung in der Mitte, der positiven x-Achse nach rechts und der positiven y-Achse nach oben.

 

 

 

 

ZUM SELBST LÖSEN

 
1.

Das nebenstehende Bild entsteht, indem die Länge der Quadratseite ausgehend von 180 bei jedem nachfolgenden Quadrat um den Faktor 0.95 verkleinert wird. Es werden 100 Quadrate gezeichnet. Schreibe das Programm mit der Funktion square(s)

 


2.

Die Funktion star(s) zeichnet einen gefüllten 5-zackigen Stern mit der Strichlänge s. Schreibe das Programm so, dass etwa nebenstehendes Bild erscheint.

 


3.

Auch Farbnamen können als Parameter verwendet werden. Definiere eine Funktion, dreieck(color), welche ein gefülltes Dreieck mit der gegebenen Farbe zeichnet. Erstelle damit das nebenstehende Bild.


 

4.

Du kannst einer Funktion auch beliebig viele Parameter übergeben, die du mit einem Komma trennst. Definiere unter Verwendung des Befehls rightCircle(radius) den neuen Befehl fillRightCircle(radius, color), mit dem die Turtle einen gefüllten Kreis mit gegebenen Radius und gegebener Füllfarbe zeichnet und erstelle damit die nebenstehende Zeichnung. Wie du siehst, kann man mit eigenen Funktionen die Befehlsliste der Turtle ergänzen.

 
5

Definiere eine Funktion square(s, c) mit zwei Parametern: s für die Seitenlänge und c für die Füllfarbe. Rufe dann die Funktion dreimal auf, so dass die nebenstehende Figur entsteht.

 


6.


Erweitere die Befehlsliste der Turtle mit dem Befehl colorDot(d), welcher ausgehend von den Befehlen dot(d) und getRandomX11Color() einen gefüllten Kreis mit dem Durchmesser d zeichnet, der mit einer zufälligen Farbe gefüllt ist. Erstelle damit einige lustige Bilder, beispielsweise in der Art des nebenstehenden.

 

7*.

Ergänze den Programmcode aus dem Musterbeispiel 2 mit Farben. Du zeichnest 100 gefüllte Quadrate, wobei das grösste Quadrat eine hellgrüne Farbe und jedes weitere Quadrat eine etwas dunklere Farbe hat.

Die Farben erhältst du mit dem Befehl makeColor(r, g, b) wobei r, g, b die roten, grünen und blauen Farbkomponenten sind. Diese können entweder als eine ganze Zahl zwischen 0 und 255 oder als eine Dezimalzahl zwischen 0 und 1 angegeben werden.

 
Hier wählst du die rote und blaue Komponente 0 und änderst die grüne in der Wiederholschleife.

 

   

 

7-1
Didaktische Hinweise:

Statt von Parameter wird auch vielfach von Argumenten gesprochen. Die beiden Begriffe sind synonym und es ist daher Geschmackssache, welchen Namen man vorzieht. In diesem Lehrgang wird konsequent die Bezeichnung Parameter verwendet.

7-1
Fachliche Hinweise:

Die Parametrisierung von Funktionen ist  für das modulare Programmierer von grosser Wichtigkeit, denn damit erhalten die Funktionen erst die Flexibilität, sich "anpasst" zu verhalten. Neben der Parameterübergabe gibt es auch noch die Möglichkeit, dass Funktionen globale Variablen verwenden, um ihr Verhalten anzupassen. Wegen möglichen Seiteneffekten ist aber die Verwendung von Parameter fast immer vorzuziehen.

7-2
Fachliche Hinweise:

Speziell in Python ist die Möglichkeit sogenannte "benannte Parameter" zu verwenden. Man verwendet in der Funktionsdefinition beliebige Parameternamen. Beim Aufruf werden den Parametern die Werte mit Namen zugeordnet, z.B. color = "red". Die Reihenfolge der aufgerufenen Parameter spiel hier keine Rolle.

from gturtle import *

def polygon(number, color):
    w = 360 / number
    setPenColor(color)
    repeat number:
        forward(100)
        left(w)

makeTurtle()
setPenWidth(3)
right(90)
setPos(-50, -200)
polygon(color = "red", number = 3)
polygon(color = "green", number = 4)
polygon(number = 5, color = "blue")
7-4
Didaktische Hinweise:

Es kann nicht genügend betont werden, wie wichtig das hier angewendete Verfahren ist, um eine bestehende Bibliothek zu erweitern. Lagert man die zusätzlichen Funktionen in ein eigenes Modul, beispielsweise unter dem Namen zturtle aus, so stehen sie nachfolgend mit

from zturtle import *

als eigene Turtlebibliothek zur Verfügung, die so auch weitergegeben werden kann.

Die Erweiterung von bestehenden Funktionalitäten ist auch zentraler Gegenstand der Objektorientierten Programmierung (OOP).

7-5
Fachliche Hinweise:

 

Du kannst die Grösse des Turtle-Fensters ändern:

  Klicke auf das Symbol Einstellungen und wähle das Register Bibliotheken.

Willst du z.B. ein quadratisches Fenster, so wählst du Manuell (600, 600). Du musst danach TigerJython neu starten. Die Einstellung wird gespeichert und dein Turtle-Fenster hat beim nächsten Start von TigerJython die eingestellte Grösse.

Du kannst auch die Standardwerte der Stift-, Turtle- und Hintergrundfarbe verändern.