Zum Hauptinhalt springen
25h

5. Unterprogramme 🏷

Einführung

In einer Bildkomposition 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 hier 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()
dreieck
Starte Auffüllen
3 mal wiederholen
50 Schritte vorwärts
120° nach links
Ende Auffüllen
rote Füllfarbe
dreieck zeichnen
120° nach links
grüne Füllfarbe
dreieck zeichnen
120° nach links
blaue Füllfarbe
dreieck zeichnen
Aufgabe 1

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!

sequentiell.py
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()
functions.py
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?

SSR

Eigene Befehle definieren

Bei Python werden Befehle auch Funktionen genannt.

Definition

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:

def zick_zack():  # <-- Doppelpunkt nicht vergessen!
left(45)
forward(50)
right(90)
forward(50)
left(45)
Befehlsaufruf

Die Definition alleine führt das Programm noch nicht aus. Dazu muss der Befehl erst noch aufgerufen werden:

from turtle import *
def zick_zack(): # <-- Doppelpunkt nicht vergessen!
left(45)
forward(50)
right(90)
forward(50)
left(45)
### PRE
zick_zack()

Aufgabe 2: Struktogramm → Python
  1. Erzeugen Sie ein Programm gemäss folgendem Struktogramm:

stufe
95° links
20 Schritte vorwärts
95° rechts
30 Schritte vorwärts
100 Schritte vorwärts
stufe zeichnen
stufe zeichnen
stufe zeichnen
befehl1.py
from turtle import *
  1. Ändern Sie obiges Programm so, dass der Winkel einer Stufe neu 110° beträgt.

  2. Zeichnen Sie eine Treppe mit 30 Stufen. Denken Sie dabei auch an das letzte Kapitel (Stichwort: Wiederholungen!)

SSR
Aufgabe 3 – Sechsecke
sechseck.py
from turtle import *

  1. Zeichnen Sie ein Sechseck

  1. Verschieben Sie die Sequenz, die das Sechseck zeichnet, in einen neuen Befehl namens sechseck(). Denken Sie daran, der neue Befehl muss aufgerufen werden, damit er ausgeführt wird.

  2. Verwenden Sie den neuen Befehl, um die folgende Figur zu zeichnen, welche aus 10 Sechsecken besteht:

Tipp

Nach jedem Sechseck muss 36° gedreht werden.

SSR
Aufgabe 4 – Häuser

Für diese Aufgabe können Sie als Ausgangslage Ihr Programm aus Kapitel 1, Aufgabe 6 "Haus von Nikolaus" verwenden.

stadt.py
from turtle import *

  1. Definieren Sie einen Befehl haus(), der ein Haus des Nikolaus zeichnet:
    Achten Sie darauf, dass die Turtle am Ende eines Häuschens jeweils unten rechts ist und nach rechts schaut.

  1. Zeichnen Sie nun 4 Häuser nacheinander in unterschiedlichen Farben.

SSR
Aufgabe 5 – Blume

Sie werden in dieser Aufgabe unter der Verwendung mehrerer Unterprogramme eine komplexe Aufgabe schrittweise lösen.

blume.py
from turtle import *

  1. Definieren Sie Unterprogramm bogen(), mit dem die Turtle einen Bogen zeichnet und sich dabei insgesamt um 90° nach rechts dreht.

  2. Fügen Sie einen weiteren Befehl blumenblatt() hinzu, welches zwei Bögen zeichnet. Die Turtle sollte am Ende aber wieder in Startrichtung stehen.

  3. Ergänzen Sie blumenblatt() so, dass ein rot gefülltes Blatt gezeichnet wird. Setzen Sie mit pencolor die Stiftfarbe ebenfalls auf rot, damit die Umrandungslinie die gleiche Farbe hat.

  4. Erweitern Sie das Programm mit dem Befehl blume(), so dass eine fünfblättrige Blume gezeichnet wird.

  5. ⭐️ Zusatz: Blume mit Stiel. Ergänzen Sie die Blume mit einem Stiel.

SSR