Appearance
đ§© Funktionen mit Turtle đąđąđą â
Code strukturieren und wiederverwenden â
Einstieg: Worum geht es in diesem Kapitel? â
In den letzten Einheiten hast du mit Turtle gezeichnet, Schleifen verwendet und Muster erzeugt. Dabei hast du vielleicht bemerkt: Manche Code-Teile braucht man immer wieder. Ein Quadrat, ein Dreieck, eine Bewegung zur nÀchsten Position oder eine zufÀllige Farbe können mehrfach vorkommen.
Wenn man denselben Code immer wieder kopiert, wird ein Programm schnell unĂŒbersichtlich. AuĂerdem ist es mĂŒhsam, spĂ€ter etwas zu Ă€ndern.
Genau hier helfen Funktionen. Eine Funktion fasst mehrere Befehle unter einem Namen zusammen. Danach kannst du diese Befehle immer wieder aufrufen.
Merksatz
Eine Funktion bĂŒndelt Code, den du spĂ€ter wiederverwenden kannst.
Grundlagen: Funktionen verstehen â
Warum Funktionen? â
Stell dir vor, du möchtest an mehreren Stellen ein Quadrat zeichnen. Ohne Funktion mĂŒsstest du den Code jedes Mal neu schreiben. Mit einer Funktion definierst du einmal, wie ein Quadrat gezeichnet wird, und rufst diese Funktion danach einfach auf.
Das macht deinen Code:
- kĂŒrzer
- ĂŒbersichtlicher
- leichter verÀnderbar
- besser wiederverwendbar
In dieser Einheit arbeitest du wieder mit Turtle in PyCharm. Denke daran:
python
turtle.done()muss am Ende deines Turtle-Programms stehen.
Eine erste Funktion â
Eine Funktion beginnt in Python mit def. Das steht fĂŒr define, also âdefinierenâ.
python
import turtle
def square():
for i in range(4):
turtle.forward(100)
turtle.left(90)
turtle.done()Mit def square(): wird die Funktion definiert. Mit square() wird sie aufgerufen. Erst beim Aufruf wird der Code in der Funktion ausgefĂŒhrt.
HĂ€ufiger Fehler
Eine Funktion wird nur ausgefĂŒhrt, wenn du sie aufrufst. Das Definieren mit def allein zeichnet noch nichts.
Funktionen und EinrĂŒckung â
Wie bei Schleifen ist die EinrĂŒckung entscheidend. Alles, was zur Funktion gehört, muss eingerĂŒckt sein.
python
def square():
turtle.forward(100)
turtle.left(90)Der Doppelpunkt nach def square(): zeigt: Jetzt beginnt ein eingerĂŒckter Codeblock.
Merkhilfe
Bei Python zeigen EinrĂŒckungen, welche Befehle zusammengehören.
Kurze und klare Funktionsnamen â
Funktionsnamen sollen verstÀndlich sein. In dieser Einheit verwenden wir eher kurze Namen, damit der Code gut lesbar bleibt.
Sinnvolle Namen sind zum Beispiel:
python
square()
triangle()
shape()
next_shape()
next_line()Weniger sinnvoll wÀren Namen wie:
python
abc()
ding()
test123()Gute Praxis
Ein Funktionsname soll kurz sein, aber trotzdem verraten, was die Funktion macht.
Ein Dreieck als Funktion â
Ein Dreieck kann zum Beispiel so als Funktion geschrieben werden:
python
import turtle
def triangle():
for i in range(3):
turtle.forward(70)
turtle.left(360/3)
triangle()
turtle.done()Auch hier gilt: Die Funktion wird erst ausgefĂŒhrt, wenn du triangle() aufrufst.
đą Challenge 1: Eine Zeile aus Formen â
Erstelle eine Funktion fĂŒr ein Quadrat und eine Funktion fĂŒr ein Dreieck.
Verwende beide Funktionen, um das Muster aus der Vorlage zu zeichnen.

Arbeite weiter in einem Python-File. Strukturiere deinen Code mit Kommentaren.
python
# Challenge 1
# Quadrat- und DreieckfunktionenDein Programm soll mindestens diese Funktionen enthalten:
python
start()
square()
triangle()
next_shape()Die Funktion start() soll die Turtle an eine sinnvolle Startposition bringen. Ăberlege selbst, welche Koordinaten dafĂŒr passen. Die Funktion next_shape() soll die Turtle danach jeweils zur nĂ€chsten Form bewegen.
Hinweis
Ăberlege zuerst, welche Teilformen sich wiederholen. Danach ĂŒberlege, wo dein Muster beginnen soll und wie groĂ der Abstand zwischen den Formen sein muss.
Wichtig
Die Startposition und die AbstÀnde sollen nicht zufÀllig gewÀhlt werden. Teste deine Werte so lange, bis das Muster gut sichtbar und sinnvoll platziert ist.
Muster strukturieren: Bewegung, Wiederholung und Zeilen â
Bewegungen auslagern â
Wenn du mehrere Formen zeichnest, muss die Turtle oft an eine neue Position bewegt werden. Auch diese Bewegung kannst du in eine Funktion auslagern.
Eine Funktion wie next_shape() soll die Turtle zur nÀchsten Form bewegen, ohne dabei eine störende Linie zu zeichnen.
DafĂŒr können diese Befehle hilfreich sein:
python
turtle.penup()
turtle.forward(...)
turtle.pendown()penup() hebt den Stift an. Die Turtle kann sich dann bewegen, ohne zu zeichnen. Mit pendown() setzt du den Stift wieder ab.
Merksatz
Nicht nur Formen können als Funktionen geschrieben werden. Auch wiederkehrende Bewegungen können eigene Funktionen sein.
Muster wiederholen â
Wenn eine Zeile deines Musters funktioniert, kannst du ĂŒberlegen, welche Teile sich wiederholen. Vielleicht musst du nicht jede Form einzeln aufrufen, sondern kannst eine Schleife verwenden.
Eine Schleife kann zum Beispiel mehrmals eine Form zeichnen und danach jeweils zur nÀchsten Position wechseln.
Hinweis
PrĂŒfe zuerst, ob dein Muster einmal korrekt funktioniert. Danach kannst du ĂŒberlegen, welche Befehle sich wiederholen und durch eine Schleife ersetzt werden können.
Die nĂ€chste Zeile planen â
FĂŒr ein gröĂeres Muster brauchst du nicht nur eine Bewegung zur nĂ€chsten Form, sondern auch eine Bewegung in die nĂ€chste Zeile.
DafĂŒr ist eine weitere Funktion sinnvoll:
python
next_line()Diese Funktion soll die Turtle so bewegen, dass die nÀchste Zeile an einer passenden Stelle beginnt. Dabei gibt es zwei naheliegende Möglichkeiten.
Möglichkeit 1: Mit ycor() â
Manchmal ist es praktisch, die aktuelle Position der Turtle auszulesen. DafĂŒr gibt es:
python
turtle.xcor()
turtle.ycor()turtle.xcor() liefert die aktuelle x-Position der Turtle. turtle.ycor() liefert die aktuelle y-Position der Turtle.
FĂŒr next_line() ist vor allem turtle.ycor() hilfreich, weil du die Turtle relativ zur aktuellen Höhe eine Zeile nach unten setzen kannst.
Eine mögliche Idee ist:
python
def next_line():
turtle.penup()
turtle.setposition(-300, turtle.ycor() - 130)
turtle.pendown()Dieser Befehl bedeutet:
- Die Turtle wird auf die x-Position
-300gesetzt. - Die aktuelle y-Position wird mit
turtle.ycor()ausgelesen. - Von dieser y-Position werden
130abgezogen. - Dadurch springt die Turtle eine Zeile nach unten.
Die Werte -300 und 130 sind nur Beispiele. Du musst sie an dein Muster anpassen.
Merksatz
Mit ycor() kannst du die aktuelle Höhe der Turtle auslesen und daraus die Position der nÀchsten Zeile berechnen.
Möglichkeit 2: Manuell mit Bewegung und Drehung â
Du kannst eine neue Zeile auch ohne Koordinaten beginnen. Dann bewegst du die Turtle relativ zu ihrer aktuellen Position.
Eine mögliche Idee ist:
python
def next_line():
turtle.penup()
turtle.backward(520)
turtle.right(90)
turtle.forward(130)
turtle.left(90)
turtle.pendown()Diese Variante bedeutet ungefÀhr:
- Die Turtle geht zurĂŒck an den Anfang der Zeile.
- Sie dreht sich nach unten.
- Sie geht eine Zeile nach unten.
- Sie dreht sich wieder in die ursprĂŒngliche Richtung.
Wichtig
Bei dieser Variante ist die Blickrichtung der Turtle entscheidend. Wenn die Turtle vorher anders ausgerichtet ist, bewegt sie sich möglicherweise nicht dorthin, wo du es erwartest.
Hinweis
FĂŒr strukturierte Muster ist die Variante mit setposition() und ycor() oft leichter zu kontrollieren. Die manuelle Variante hilft aber gut zu verstehen, wie Bewegungen und Richtungen zusammenhĂ€ngen.
Expert:innenwissen: Richtung bewusst setzen mit setheading()
Wenn du mit relativen Bewegungen arbeitest, kann es hilfreich sein, die Blickrichtung der Turtle bewusst festzulegen. DafĂŒr gibt es setheading().
python
turtle.setheading(0)setheading(0) richtet die Turtle nach rechts aus. Danach ist klarer, in welche Richtung forward() lÀuft.
Weitere wichtige Richtungen:
python
turtle.setheading(0) # nach rechts
turtle.setheading(90) # nach oben
turtle.setheading(180) # nach links
turtle.setheading(270) # nach untenDas kann besonders hilfreich sein, wenn deine Turtle nach dem Zeichnen einer Form in eine unerwartete Richtung schaut.
Verschachtelte Schleifen â
Wenn du mehrere Reihen und Spalten zeichnen möchtest, helfen verschachtelte Schleifen. Das bedeutet: Eine Schleife befindet sich innerhalb einer anderen Schleife.
Die innere Schleife kann eine Zeile zeichnen. Die Ă€uĂere Schleife kann dafĂŒr sorgen, dass mehrere Zeilen entstehen.
Merksatz
Eine verschachtelte Schleife eignet sich gut fĂŒr Muster mit Reihen und Spalten.
đą Challenge 2: Muster mit mehreren Zeilen â
Erweitere dein Programm aus Challenge 1.
Du sollst nicht neu beginnen, sondern deine bestehenden Funktionen weiterverwenden und sinnvoll ergÀnzen.
Verwende weiterhin:
python
start()
square()
triangle()
next_shape()ErgĂ€nze zusĂ€tzlich eine Funktion fĂŒr den Wechsel in die nĂ€chste Zeile:
python
next_line()Zeichne nun mit verschachtelten Schleifen ein gröĂeres Muster aus mehreren Zeilen.

Dein Programm soll danach mindestens diese Funktionen enthalten:
python
start()
square()
triangle()
next_shape()
next_line()Hinweis
Die innere Schleife kann eine Zeile zeichnen. Die Ă€uĂere Schleife kann dafĂŒr sorgen, dass mehrere Zeilen entstehen. Nach jeder Zeile brauchst du eine passende Bewegung zur nĂ€chsten Zeile.
Wichtig
Arbeite bewusst auf Basis deiner Lösung aus Challenge 1 weiter. Ziel ist nicht, den Code neu zu schreiben, sondern ihn mit einer weiteren Funktion und einer verschachtelten Schleife zu erweitern.
Zufall und Farben â
Zufallszahlen verwenden â
Bisher hast du Farben selbst festgelegt. Nun soll Python zufÀllige Farben erzeugen.
DafĂŒr brauchst du die Funktion randint() aus der Bibliothek random.
python
from random import randintDann kannst du eine zufÀllige ganze Zahl erzeugen:
python
zahl = randint(0, 255)Das Ergebnis ist eine Zahl zwischen 0 und 255.
Wichtig
FĂŒr RGB-Farben mit Werten von 0 bis 255 brauchst du wieder turtle.colormode(255).
ZufĂ€llige Farben mit Turtle â
Eine zufÀllige Farbe kann direkt mit drei Zufallszahlen gesetzt werden:
python
from random import randint
import turtle
turtle.colormode(255)
turtle.color(randint(0, 255), randint(0, 255), randint(0, 255))Die drei Werte stehen fĂŒr Rot, GrĂŒn und Blau.
Merksatz
Eine RGB-Farbe besteht aus drei Zahlen: Rot, GrĂŒn und Blau.
Eine Farbfunktion als Zusatzidee â
Wenn du zufĂ€llige Farben öfter brauchst, kannst du auch dafĂŒr eine Funktion erstellen.
python
def random_color():
turtle.color(randint(0, 255), randint(0, 255), randint(0, 255))Diese Funktion setzt direkt eine zufĂ€llige Turtle-Farbe. Du kannst sie dann vor dem Zeichnen oder FĂŒllen einer Form aufrufen:
python
random_color()Hinweis
FĂŒr Challenge 3 ist eine eigene Farbfunktion nicht zwingend notwendig. Du kannst die zufĂ€llige Farbe auch direkt mit turtle.color(randint(...), randint(...), randint(...)) setzen.
đą Challenge 3: ZufĂ€llige Farben â
Verwende zufĂ€llige Farben fĂŒr deine Formen.
Nutze dafĂŒr:
randint()turtle.colormode(255)turtle.color()begin_fill()end_fill()

Hinweis
Setze die Farbe direkt vor dem FĂŒllen der jeweiligen Form. Du brauchst fĂŒr jede RGB-Farbe drei Zahlen: Rot, GrĂŒn und Blau.
Parameter und flexible Formen â
Werte an Funktionen ĂŒbergeben â
Bisher zeichnet eine Funktion immer genau dasselbe. Das ist praktisch, aber manchmal zu unflexibel.
In der letzten Einheit hast du mit einer Variable wie seiten regelmĂ€Ăige Vielecke gezeichnet. Dieses Prinzip kannst du nun in eine Funktion ĂŒbertragen.
Eine Funktion kann einen Wert erhalten und diesen Wert im eigenen Code verwenden. Dieser ĂŒbergebene Wert heiĂt Parameter.
python
def shape(sides):
for i in range(sides):
turtle.forward(100)
turtle.left(360 / sides)Beim Aufruf gibst du an, wie viele Seiten die Form haben soll:
python
shape(5)
shape(8)
shape(12)shape(5) zeichnet ein FĂŒnfeck. shape(8) zeichnet ein Achteck. shape(12) zeichnet ein Zwölfeck.
Merksatz
Ein Parameter macht eine Funktion flexibler.
SeitenlĂ€nge anpassen â
Wenn alle Formen ungefÀhr gleich groà wirken sollen, reicht es nicht immer, nur die Seitenzahl zu Àndern. Ein Dreieck mit SeitenlÀnge 100 wirkt anders als ein Zwölfeck mit SeitenlÀnge 100.
Du kannst daher auch die SeitenlĂ€nge als zweiten Parameter ĂŒbergeben:
python
def shape(sides, length):
for i in range(sides):
turtle.forward(length)
turtle.left(360 / sides)Dann kannst du die Funktion so aufrufen:
python
shape(3, 100)
shape(6, 70)
shape(12, 40)Bei dieser Version bedeutet length: Jede einzelne Seite der Form ist genau so lang. Wenn du also bei vielen Seiten dieselbe SeitenlĂ€nge verwendest, wird die gesamte Form gröĂer.
Hinweis
Funktionen können mehrere Parameter haben. Die Reihenfolge beim Aufruf muss zu deiner Definition passen.
Formen ĂŒber den Umfang maĂstabsgetreu annĂ€hern â
FĂŒr Challenge 4 ist es sinnvoll, darĂŒber nachzudenken, wie Formen mit unterschiedlicher Seitenanzahl ungefĂ€hr gleich groĂ wirken können.
Eine Möglichkeit ist, nicht die LĂ€nge einer einzelnen Seite zu ĂŒbergeben, sondern einen ungefĂ€hren Umfang. Auf Englisch nennt man Umfang circumference. Der Umfang beschreibt die gesamte Strecke rund um die Form. Wenn dieser Umfang gleich bleibt, mĂŒssen die einzelnen Seiten bei mehr Seiten kĂŒrzer werden.
Die Funktionsidee könnte dann so beginnen:
python
def shape(sides, circumference):
for i in range(sides):
turtle.forward(...)
turtle.left(360 / sides)Jetzt bedeutet circumference nicht mehr âLĂ€nge einer einzelnen Seiteâ, sondern ungefĂ€hr âGesamtstrecke um die Form herumâ.
Ăberlege:
Was muss bei turtle.forward(...) stehen, wenn der Umfang auf alle Seiten verteilt werden soll?
Hinweis
Wenn der Umfang auf mehrere Seiten aufgeteilt wird, hÀngt die LÀnge einer einzelnen Seite von sides ab.
Wichtig
Diese Lösung sorgt nicht dafĂŒr, dass alle Formen exakt dieselbe FlĂ€che haben. Sie ist aber eine gute AnnĂ€herung fĂŒr Turtle-Muster, weil Formen mit vielen Seiten dadurch nicht automatisch viel gröĂer werden.
đą Challenge 4: ZufĂ€llige regelmĂ€Ăige Formen â
Erstelle eine Funktion, die regelmĂ€Ăige Formen mit beliebiger Seitenanzahl zeichnen kann.
Die Formen sollen ungefÀhr gleich groà wirken.
Verwende anschlieĂend randint(), um zufĂ€llige Formen in einem Muster zu zeichnen.

Hinweis
Du kannst die Seitenzahl zufĂ€llig wĂ€hlen, zum Beispiel zwischen 3 und 10. Ăberlege auĂerdem, wie du die SeitenlĂ€nge sinnvoll anpassen kannst.
Erinnerung
Ein Parameter macht eine Funktion flexibler. Statt fĂŒr jede Form eine eigene Funktion zu schreiben, kann eine Funktion mit Parametern verschiedene Formen erzeugen.
Komplexere Muster planen â
Ein Hexagon-Muster planen â
Nun wird es komplexer: Du sollst ein Muster aus mehreren Dreiecken erstellen, das wie ein Hexagon-Muster wirkt.
DafĂŒr ist es sinnvoll, das Problem in kleinere Teile zu zerlegen:
- eine zufÀllige Farbe erzeugen
- ein Dreieck zeichnen
- ein Hexagon-Muster aus Dreiecken zusammensetzen
- die Turtle an eine zufÀllige Position bewegen
Genau dafĂŒr sind Funktionen gedacht. Du musst nicht alles in einem langen Codeblock lösen, sondern kannst dein Programm in sinnvolle Bausteine aufteilen.
Merksatz
Bei gröĂeren Aufgaben hilft es, zuerst die Teilprobleme zu erkennen. Aus diesen Teilproblemen können Funktionen entstehen.
đą Challenge 5: Hexagon-Muster â
Erstelle ein Programm, das ein Hexagon-Muster mehrfach an zufÀlligen Positionen zeichnet.

Dein Programm soll enthalten:
- eine Funktion fĂŒr eine zufĂ€llige Farbe oder eine direkte Zufallsfarbe
- eine Funktion
triangle() - eine Funktion fĂŒr das Hexagon-Muster
- Code, der die Turtle nach jedem Muster an eine zufÀllige Position bewegt
Hinweis
Es kann hilfreich sein, das Hexagon-Muster zuerst ohne Funktion und ohne Schleife zu testen. Danach kannst du den Code schrittweise verbessern.
Wichtig
Achte darauf, dass deine Funktionen klar getrennte Aufgaben haben. Eine Funktion sollte nicht âalles auf einmalâ erledigen.
Weitere Muster mit Funktionen â
Wenn du Funktionen sinnvoll verwendest, kannst du auch gröĂere Muster deutlich ĂŒbersichtlicher zeichnen. Du musst nicht jedes Detail neu schreiben, sondern kannst vorhandene Bausteine wiederverwenden.
đą Challenge 6: Neues Muster â
Erstelle ein neues Programm und zeichne das Muster aus der Vorlage.

Verwende Code aus dieser und den vorherigen Einheiten, wenn er dir hilft.
Hinweis
Ăberlege zuerst, welche Teilform sich wiederholt. Daraus kann eine Funktion entstehen.
Zusatzidee
Du kannst Code aus frĂŒheren Challenges wiederverwenden und anpassen. Das ist kein Schummeln, sondern ein wichtiger Teil des Programmierens.
Allgemeines zum Erlernen einer Programmiersprache â
In dieser Einheit geht es nicht nur darum, neue Befehle kennenzulernen. Der wichtige Schritt ist, Code bewusst zu strukturieren.
Funktionen helfen dir, ein gröĂeres Problem in kleinere Teilprobleme zu zerlegen. Wenn ein Muster schwierig wirkt, frage dich zuerst:
- Welche Teile wiederholen sich?
- Welche Aufgabe kann eine eigene Funktion ĂŒbernehmen?
- Welche Werte sollten flexibel bleiben?
- Welche Funktionen kann ich wiederverwenden?
So arbeitest du nicht einfach Zeile fĂŒr Zeile weiter, sondern beginnst, dein Programm zu planen.
Wissensspeicher â
Wichtige Begriffe
Funktion Ein benannter Codeblock, der eine bestimmte Aufgabe ausfĂŒhrt.
Unterprogramm / Subroutine Anderer Begriff fĂŒr eine Funktion.
def SchlĂŒsselwort, mit dem eine Funktion definiert wird.
Funktionsaufruf AusfĂŒhren einer Funktion, zum Beispiel square().
Parameter Wert, den eine Funktion beim Aufruf erhalten kann.
Argument Konkreter Wert, der an eine Funktion ĂŒbergeben wird, zum Beispiel 5 in shape(5).
return Gibt einen Wert aus einer Funktion zurĂŒck.
verschachtelte Schleife Eine Schleife innerhalb einer anderen Schleife.
randint() Funktion aus der Bibliothek random, die eine zufÀllige ganze Zahl erzeugt.
RGB-Farbe Farbe aus drei Werten fĂŒr Rot, GrĂŒn und Blau.
turtle.colormode(255) Legt fest, dass RGB-Werte von 0 bis 255 verwendet werden.
xcor() / ycor() Befehle, mit denen du die aktuelle x- oder y-Position der Turtle auslesen kannst.
setheading() Befehl, mit dem du die Blickrichtung der Turtle bewusst setzen kannst.
Abschlussgedanke â
Funktionen sind ein wichtiger Schritt vom Ausprobieren zum planvollen Programmieren. Sie helfen dir, Code zu ordnen, wiederzuverwenden und gröĂere Aufgaben in kleinere lösbare Teile zu zerlegen.
Weitere Beispiele zur Vorbereitung auf praktische Ăbung â

