195
Eine Schleife für gefüllte Dreiecke
In den letzten beiden Abschnitten hat sich gezeigt, dass die
for
-Schleife
vielseitiger verwendbar ist als für bloßes Zählen:
Muster 11: Allgemeine for-Schleife:
Zweck: eine Folge von Anweisungen für jedes Element aus einem Wertevorrat
wiederholen.
Im Programmentwurf:
Wiederhole für jedes element aus Wertevorrat:
Anweisung 1
Anweisung 2
...
Im Programmcode:
for element in wertevorrat:
Anweisung1
Anweisung2
...
Eine Schleife für gefüllte Dreiecke
Eines der letzten Dreiecksprogramme aus Kapitel 5 zeichnete Dreierpacks
von Dreiecken. Wenn wir auch dort die Funktion
dreieck()
mit einer
for
-Schleife codieren, erhalten wir folgenden Code, der als
dreier-
pack_arbeit.py
im Verzeichnis
py4kids\kap07
enthalten ist:
from turtle import *
def dreieck(laenge):
"""Zeichne Dreieck mit Seitenlänge seitenlaenge.
"""
for i in range(3):
forward(laenge)
left(120)
def fuelle_dreieck(seitenlaenge, stiftfarbe, fuellfarbe):
"""Zeichne gefülltes Dreieck mit Seitenlänge seitenlaenge.
Umrandung in der stiftfarbe, gefüllt mit der fuellfarbe.
"""
Schleifenkop
f
Schleifenkörper
196
Schleifen, die zählen
Kapitel
7
color(stiftfarbe, fuellfarbe)
begin_fill()
dreieck(seitenlaenge)
end_fill()
def dreierpack(seite, aenderung):
"""Zeichne Muster aus drei Dreiecken.
Erstes Dreieck hat Seitenlaenge seite.
"""
fuelle_dreieck(seite, "red", "cyan")
left(120)
seite = seite + aenderung
fuelle_dreieck(seite, "green", "magenta")
left(120)
seite = seite + aenderung
fuelle_dreieck(seite, "blue", "yellow")
left(120)
seite = seite + aenderung
reset()
pensize(10)
right(90)
dreierpack(65, 35)
hideturtle()
Am Ende des Anweisungsblocks der Funktion
dreierpack()
steht hier
noch einmal die Anweisung zur Änderung der
seite
, obwohl das keinerlei
Auswirkung auf das Ergebnis des Programmablaufes hat. Es macht aber
deutlich, dass in
dreierpack()
wieder drei Mal drei gleiche Anweisungen
vorkommen. Kann man das nicht auch mit einer Schleife lösen?
Kann man! Und zwar mit einer
for
-Schleife, die über ein Tupel von
Far-
benpaaren
läuft. Farbenpaare brauchen wir deshalb, weil hier immer eine
Stiftfarbe und eine Füllfarbe zusammengehören.
Tupel eignen sich gut, um solche Paare zu bilden und somit erhalten wir ein
Tupel von Tupeln – genauer: ein Dreier-Tupel von Zweier-Tupeln.
>
Mach mit!
197
Eine Schleife für gefüllte Dreiecke
>>> farbenpaare = (("red","cyan"), ("green","magenta"),
("blue","yellow"))
>>> for paar in farbenpaare:
print(paar)
('red', 'cyan')
('green', 'magenta')
('blue', 'yellow')
Jetzt müssen wir aber die einzelnen Farben aus jedem Paar herauskriegen,
um sie in
fuelle_dreieck()
als Argumente einsetzen zu können. Dafür
hat Python ein spezielles Verfahren:
Clara Pythias Python-Special: Tupel entpacken
Python bietet die Möglichkeit, ein Tupel in einer besonderen Form der
Zuweisungsanweisung auszupacken, das heißt, in seine Bestandteile zu
zerlegen.
Du kannst mit dem IPI studieren, wie diese Dinge funktionieren. Zu-
nächst probieren wir das Tupel-Auspacken aus:
>
Mach mit!
>>> name = ("Charles", "Babbage")
Beachte genau die Tupel-Schreibweise: zwischen runden Klammern
mehrere Objekte, durch Kommas getrennt!
>>> vorname, zuname = name
>>> vorname
'Charles'
>>> zuname
'Babbage'
Die Objekte können auch von verschiedenem Typ sein, zum Beispiel Zah-
len und Strings gemischt:
>>> datum = (11, "September", 2001)
>>> tag, monat, jahr = datum
>>> tag
11
>>> monat
'September'
>>> jahr
2001
>>>
198
Schleifen, die zählen
Kapitel
7
Dieses Auspacken von Tupeln verwenden wir nun für unsere Farbenpaare:
>>> for paar in farbenpaare:
stiftfarbe, fuellfarbe = paar
print(stiftfarbe, "-", fuellfarbe)
red - cyan
green - magenta
blue - yellow
Damit können wir
dreierpack()
auch mit einer Schleife implementieren:
def dreierpack(seite, aenderung, farbpaare):
"""Zeichne Muster aus drei Dreiecken.
Erstes Dreieck hat Seitenlaenge seite.
"""
for farbpaar in farbpaare:
stiftfarbe, fuellfarbe = farbpaar
fuelle_dreieck(seite, stiftfarbe, fuellfarbe)
left(120)
seite = seite + aenderung
reset()
pensize(10)
right(90)
farbenpaare = (("red","cyan"), ("green","magenta"),
("blue","yellow"))
dreierpack(65, 35, farbenpaare)
hideturtle()
In diesem Code-Abschnitt wurde
dreierpack()
mit dem dritten Parame-
ter
farbpaare
ausgestattet. Im »Hauptprogramm« wurde eine Anweisung
zur Festlegung der
farbenpaare
eingefügt.
farbenpaare
wird im Aufruf
von
dreierpack()
als drittes Argument (an den Parameter
farbpaare
)
übergeben.
>
Führe diese Änderungen in
dreierpack_arbeit.py
aus. Teste das
Programm – es sollte dieselbe Zeichnung wie vor der Änderung er-
zeugen.
>
Wenn alles geklappt hat, speichere eine Kopie des Programms unter
dem Name
dreierpack.py
ab.

Get Python für Kids now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.