Python Online
Home    .  
funktionen

5. FUNKTIONEN

 

 

DU LERNST HIER...

 

wie du mit benannten Programmblöcken, in Python Funktionen genannt, deine Programme strukturieren kannst. Die Verwendung von Funktionen ist von grosser Wichtigkeit, denn du vermeidest dadurch, dass du gleichen Code mehrmals im Programm hinschreiben musst (Codeduplikation)  und du kannst damit Probleme in kleinere, leichter zu lösende Teilprobleme zerlegen.

 

 

MUSTERBEISPIELE

 

In den vorhergehenden Kapiteln hast du gelernt, wie die Turtle ein Quadrat zeichnen kann. Dies ist eine typische, in sich geschlossene Aufgabe und du kannst den dazu benötigten Code in einer Funktion zusammenfassen.

Es ist insbesondere dann sinnvoll, wenn du mehrere Quadrate zeichnen willst.

 

Die Funktionsdefinition beginnt mit dem Keyword def. Dann folgt der Name, eine sogenannte Parameterklammer und ein Doppelpunkt. Die Befehle im Funktionskörper bilden einen Programmblock und sie müssen daher eingerückt sein.

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

Im Hauptprogramm rufst du die Funktion mit ihrem Namen auf.

Programm:

from gturtle import *

def square():
    repeat 4: 
        forward(70) 
        left(90) 

makeTurtle()
setPenColor("red")
square()
right(120)
setPenColor("blue")
square()
right(120)
setPenColor("green")
square()
 

Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

Hast du die Funktion einmal definiert, so kannst du sie beliebig oft aufrufen. Damit die Zeichnung schneller erscheint, kannst du mit hideTurtle() die Turtle bereits am Anfang unsichtbar machen.

Programm:

from gturtle import *

def square():
    repeat 4: 
        forward(60) 
        left(90) 

makeTurtle()
setPenColor("blue")
hideTurtle()
repeat 20:
    square()
    right(18)
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)
 



 

 

MERKE DIR...

 

Die Funktionsnamen kannst du ziemlich frei wählen, du musst dich aber an ein paar Einschränkungen halten. Erlaubt sind Namen

  • ohne Umlaute und Spezialzeichen, ausser $ und _ (also mit den Buchstaben a..z, A..Z, den Zahlen 0..9, sowie $ und _),
  • die nicht mit einer Zahl beginnen und
  • die keine Keywords sind.

Es ist üblich, die Funktionsnamen mit einem Kleinbuchstaben zu beginnen und bei den zusammengesetzten Namen kleinGross Schreibweise (z.B. drawFigure) zu verwenden. Englische Bezeichner sind besser, da sie keine Umlaute enthalten und deine Programme universell lesbar sind

 

 

ZUM SELBST LÖSEN

  1.

Definiere einen Befehl sechseck(), mit dem die Turtle ein Sechseck zeichnet. Verwende diesen Befehl, um die nebenstehende Figur zu erstellen.

 


  2.

Definiere einen Befehl für ein Quadrat, das auf der Spitze steht und zeichne damit die nebenstehende Figur.

 
  3a.

Du erlebst in der folgenden Aufgabe, wie du unter Verwendung von Funktionen ein Problem schrittweise lösen kannst.

Definiere eine Funktion bogen(), mit der die Turtle einen Bogen zeichnet und sich dabei insgesamt um 90 Grad nach rechts dreht.

 
 
3b.


Ergänze das Programm mit der Funktion blumenblatt(), welche zwei Bogen zeichnet. Die Turtle sollte am Ende aber wieder in Startrichtung stehen.

 
  3c.

Erweitere das Programm mit der Funktion blume() so, dass eine 8-blättrige Blume entsteht.

 


  3d.

Ergänze die Funktion blumenblatt() so, das die Blätter mit einer roten Farbe gefüllt werden.

 

 

   

 

5-1
Didaktische Hinweise:

In der Mathematik verwendet man den Begriff Funktion für eine Abbildung, die Eingabeparametern (Argumenten) einen einzigen Ausgabewert zuordnet. In der Informatik wird ein anderer Funktionsbegriff verwendet: Hier handelt es sich um ein Teilprogramm, dem man bestimmte Parameterwerte übergeben kann und das beim Aufruf den darin definierten Code ausführt. Die Funktion kann Werte zurückgeben oder auch nicht.

In gewissen Programmiersprachen bezeichnet man Funktionen, die keinen Wert zurückgeben als "Prozeduren" oder "Funktionen mit void-Rückgabe".

In diesem Kapitel werden Funktionen betrachtet, die keinen Rückgabewert haben und erst später Funktionen mit Rückgabewert.

Es kann nicht genügend betont werden, wie wichtig es ist, ein Programm durch Funktionen zu strukturieren. Selbst wenn ein Programmblock nur einmal verwendet wird, macht es Sinn, ihn als Funktion zu definieren, da durch die Namensgebung auch seine Aufgabe beschrieben wird.

Obschon eigentlich strukturiertes und modulares Programmieren Überbegriffe zu funktionalem und prozeduralem Programmieren ist, werden in diesem Lehrgang alle Begriffe synonym verwendet. Ebenso werden manchmal Funktionen auch Unterprogramme genannt.

Funktionen bilden auch die Grundlage von Programmbibliotheken, beispielsweise sind ja eigentlich alle Tutlebefehle Funktionen des Turtlemoduls. Funktionen dienen hier vor allem der Wiederverwendbarkeit von Code. Da die Funktionsdefinitionen bei Bibliotheken entweder nicht bekannt ist oder nicht interessiert, entspricht modulares Programmieren auch dem Geheimnisprinzip, bei dem von gewissem Code nur die Schnittstelle, das API (Application Programming Interface), bekannt ist und die Implementierung geheim gehalten wird.

Bei der Strukturierung von Code mittels Funktionen spricht man auch vom Prinzip von Teile und Herrsche, wo man versucht, eine grössere Komplexität durch Einteilung in wohldefinierte Teilschritte bzw. Einzelaufgaben zu beherrschen. Wenn man die Teilschritte wieder in Teilschritte einteilt, spricht man auch von schrittweiser Verfeinerung oder dem Top-Down-Programmieren.

Es ist klar, dass man in einem Einführungskurs kurzer Dauer keine Theorie über Programm-Management und -Design vermittelt, sondern die Prinzipien darüber stillschweigend exemplarisch anwendet.

5-3
Didaktische Hinweise:

Die günstige Wahl der Bezeichner (Identifier) ist für eine gute Lesbarkeit des Programms von grosser Wichtigkeit. Schlechte Bezeichner zeugen von einem unseriösen Programmierstil. Wir halten uns an die Regel, dass Bezeichner im CamelCase geschrieben werden. Dabei werden Wortgruppen aneinander gefügt und ein neues Wort beginnt immer mit einem Grossbuchstaben, also beispielsweise fillSquare, myFirstFunction, RobotClass. Dadurch werden die Programme auch für andere Personen besser lesbar.

5-4
Didaktische Hinweise:

Die Idee zu dieser Aufgabe stammt von Seymour Papert, dem Vater von Logo und der Turtlegrafik, und wurde bereits 1980 in seinem Standardwerk "Mindstorms - Children, Computers and Powerful Ideas" publiziert.