Eigene Prozeduren
Bis jetzt haben wir nur bereits existierende Befehle wie forward() oder makeTurtle() verwendet. Als Nächstes möchten wir unsere eigenen Prozeduren schreiben.
Mit einer Prozedur können wir ein kleineres Teilprogramm (auch Unterprogramm genannt) schreiben, welches dann mehrmals wiederverwendet werden kann. Bei einer Schleife wiederholen wir ein Teilprogramm \(x\)-mal direkt nacheinander. Bei einer Prozedur können wir ein Teilprogramm mehrmals an beliebiger Stelle wiederholen.
Definition
Die Syntax für eine Prozedursdefinition besteht mindestens aus dem Schlüsselwort def, einem Namen, zwei runde Klammern, einem Doppelpunkt sowie den Inhalt vom Unterprogramm. Dieser muss wie bei den Verzweigungen oder Schleifen eingerückt sein (es ist ein Block).
def <nameDerProzedur>(<Parameter1>, <Parameter2>, ...):
<Anweisung1>
<Anweisung2>
...
Beispiel 1
In diesem Programm wird eine neue Prozedur mit dem Namen meineGrussProzedur definiert.
def meineGrussProzedur():
print("* * * *)
print("Hallo")
print("* * * *)
Jedes mal wenn du nun irgendwo später im Programm meineGrussProzedur() schreibst, wird der oben definierte Inhalt
ausgeführt.
Probiere dies einmal aus:
Erweitere das nachfolgende Programm, so dass der Befehl meineGrussProzedur() ausgeführt wird.
Du solltest nach dem Aufruf folgende Ausgabe sehen:
* * * *
Hallo
* * * *
Beispiel 2
Wenn nun ein Problem (bzw. Aufgabe) aus mehreren ähnlichen oder gleiche Teilproblemen besteht, lohnt es sich dies einmal zu lösen und dann mehrmals anzuwenden. Wie bei diesem Beispiel.
# Tests (Groß-/Kleinschreibung wird nicht beachtet)(Ctrl+I)
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
(Esc)
Aufgaben
Sechsecke
Question
Definiere eine Prozedur sechseck(), mit dem die Turtle ein Sechseck zeichnet.
Verwende diese Prozedur, um die nebenstehende Figur zu erstellen.
# Tests (Groß-/Kleinschreibung wird nicht beachtet)(Ctrl+I)
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
(Esc)
Lösung
from gturtle import *
makeTurtle()
pencolor("blue") # ändere die Stiftfarbe zu Blau
speed(11)
def sechseck():
for i in range(6):
forward(100)
left(60)
for i in range(10):
sechseck()
right(36)
Quadrate
Question
Definiere eine Prozedur für ein Quadrat, das auf der Spitze steht und zeichne damit die nebenstehende Figur.
Überlege dir zuerst, welches "Teilproblem" du mit der Prozedur lösen möchtest. Es gibt mehrere Möglichkeiten.
# Tests (Groß-/Kleinschreibung wird nicht beachtet)(Ctrl+I)
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
(Esc)
Lösung
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
Farbige Sterne
Question
Definiere einen Befehl stern() um einen Stern zu zeichnen.
Wenn du vor einer (Teil-)Zeichnung den Befehle begin_fill() aufrufst
und nachher den Befehl end_fill(), dann wird deine Figure mit Farbe ausgefüllt.
Die Füllfarbe kannst du mit fillcolor(FARBNAME) steuern.
Verwende deinen Befehl um drei blaue Sterne zu zeichnen.
# Tests (Groß-/Kleinschreibung wird nicht beachtet)(Ctrl+I)
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
(Esc)
Lösung
from gturtle import *
makeTurtle()
color("#27408B")
def stern():
begin_fill()
for i in range(5):
forward(90)
right(720 / 5)
end_fill()
stern()
right(120)
stern()
right(120)
stern()
right(120)
ht()
Olympische Dreiecke Version 2
Question
Zeichne nochmals die folgende Figur.
Es sind fünf Dreiecke welche sich nicht berühren. Verwende dazu Schleifen!
Mit den Befehlen penup() und pendown() kannst du steuern ob gezeichnet wird.
Verwende diesmal aber deine eigenen Befehle um zuerst die Teilprobleme einzeln zu lösen!

# Tests (Groß-/Kleinschreibung wird nicht beachtet)(Ctrl+I)
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
(Esc)
Lösung
from gturtle import *
makeTurtle()
def dreieck(laenge, farbe):
setPenColor(farbe)
right(30)
for i in range(3):
forward(laenge)
left(120)
left(30)
def abstand(laenge):
penUp()
right(90)
forward(laenge)
left(90)
penDown()
speed(10)
dreieck(50, "blue")
abstand(60)
dreieck(50, "black")
abstand(60)
dreieck(50, "red")
penUp()
forward(30)
left(90)
forward(30)
left(90)
penDown()
dreieck(50, "green")
abstand(60)
dreieck(50, "yellow")
hideTurtle()
# Tests(Groß-/Kleinschreibung wird nicht beachtet)(Ctrl+I)
(Alt+: ; Ctrl, um die Spalten zu vertauschen)
(Esc)