4. Unterprogramme 🏷
Einführung
In einer Bildkomposition wie unten kommen Figuren wie Dreiecke und Quadrate mehrmals vor. Die Turtle weiss aber nicht, was ein Dreieck oder ein Quadrat ist. Da in der Bildkomposition die Dreiecke und Quadrate nicht systematisch angeordnet sind, ist die Verwendung von Wiederholungen nicht naheliegend.
from turtle import *
fillcolor('red')
begin_fill()
for i in range(3):
forward(50)
left(120)
end_fill()
left(120)
fillcolor('green')
begin_fill()
for i in range(3):
forward(50)
left(120)
end_fill()
left(120)
fillcolor('blue')
begin_fill()
for i in range(3):
forward(50)
left(120)
end_fill()
26 Zeilen Code?? Geht das nicht auch einfacher?
Es geht einfacher! Es lassen sich nämlich neue Befehle festlegen, die z.B. ein Dreieck oder ein Quadrat zeichnen.
from turtle import *
def dreieck():
begin_fill()
for i in range(3):
forward(50)
left(120)
end_fill()
fillcolor('red')
dreieck()
left(120)
fillcolor('green')
dreieck()
left(120)
fillcolor('blue')
dreieck()
Im folgenden ist zweimal derselbe Algorithmus programmiert - links ohne Unterprogramme, rechts mit Unterprogrammen.
Ändern Sie beide Programme so ab, dass die Dreiecke doppelt so gross gezeichnet werden!
from turtle import *
fillcolor('yellow')
begin_fill()
for i in range(3):
forward(50)
left(120)
end_fill()
left(60)
fillcolor('orange')
begin_fill()
for i in range(3):
forward(50)
left(120)
end_fill()
left(60)
fillcolor('red')
begin_fill()
for i in range(3):
forward(50)
left(120)
end_fill()
left(60)
fillcolor('purple')
begin_fill()
for i in range(3):
forward(50)
left(120)
end_fill()
left(60)
fillcolor('blue')
begin_fill()
for i in range(3):
forward(50)
left(120)
end_fill()
left(60)
fillcolor('green')
begin_fill()
for i in range(3):
forward(50)
left(120)
end_fill()
from turtle import *
def dreieck():
begin_fill()
for i in range(3):
forward(50)
left(120)
end_fill()
fillcolor('yellow')
dreieck()
left(60)
fillcolor('orange')
dreieck()
left(60)
fillcolor('red')
dreieck()
left(60)
fillcolor('purple')
dreieck()
left(60)
fillcolor('blue')
dreieck()
left(60)
fillcolor('green')
dreieck()
left(60)
Wie viele Zeilen mussten Sie im linken bzw. im rechten Programm ändern? Welche Vorteile sehen Sie bei der Verwendung von Unterprogrammen?
Eigene Befehle definieren
Bei Python werden Befehle auch Funktionen genannt.
def name():
Mit def name(): wird ein neues Unterprogramm (ein neuer Befehl) definiert. Als Name sollte immer etwas gewählt werden, das die Tätigkeit dieser Sequenz widerspiegelt. Alle Anweisungen, die zum neuen Befehl gehören, müssen eingerückt sein!
Beispiel:
Als Name wird hier zick_zack gewählt, da die Turtle in einem Zick-Zack-Muster zeichnet.
def zick_zack(): # <-- Doppelpunkt nicht vergessen!
left(45)
forward(50)
right(90)
forward(50)
left(45)
Die Definition alleine führt das Programm noch nicht aus. Dazu muss der Befehl erst noch aufgerufen werden:
zick_zack()
- Erzeugen Sie ein Programm gemäss folgendem Struktogramm:
from turtle import *
-
Ändern Sie obiges Programm so, dass der Winkel einer Stufe neu
110°beträgt. -
Zeichnen Sie eine Treppe mit 30 Stufen. Denken Sie dabei auch an das letzte Kapitel (Stichwort: Wiederholungen!)
Gehen Sie schrittweise die Anleitung durch - das Ergebnis muss noch nicht im ersten Schritt programmiert werden.
from turtle import *
Sie werden in dieser Aufgabe1 unter der Verwendung mehrerer Unterprogramme eine komplexe Aufgabe schrittweise lösen.
from turtle import *
-
Definieren Sie Unterprogramm
bogen(), mit dem die Turtle einen Bogen zeichnet und sich dabei insgesamt um90°nach rechts dreht. -
Fügen Sie einen weiteren Befehl
blumenblatt()hinzu, welches zwei Bögen zeichnet. Die Turtle sollte am Ende aber wieder in Startrichtung stehen. -
Ergänzen Sie
blumenblatt()so, dass ein rot gefülltes Blatt gezeichnet wird. Setzen Sie mit 👉pencolordie Stiftfarbe ebenfalls auf rot, damit die Umrandungslinie die gleiche Farbe hat. -
Erweitern Sie das Programm mit dem Befehl
blume(), so dass eine fünfblättrige Blume gezeichnet wird. -
⭐️ Zusatz: Blume mit Stiel. Ergänzen Sie die Blume mit einem Stiel.