163
Weg 2: Bottom-up. Schrittweise von unten nach oben
Weg 2: Bottom-up. Schrittweise
von unten nach oben
Diesmal machen wir es umgekehrt. Wir sehen zuerst nach, ob wir an unse-
rer Aufgabenstellung ganz kleine Teilprobleme erkennen können, die wir
gleich codieren können. Um Details zu klären, können wir ja den IPI zu
Hilfe nehmen.
Beginnen wir damit, die Umrisslinie für den weißen Teil eines Yinyang-
Symbols zu zeichnen, das 200 Pixel Durchmesser, also 100 Pixel Radius hat.
Er wird von drei Halbkreisen begrenzt, zwei kleinen und einem großen. Du
erinnerst dich aus Kapitel 2, dass Halbkreise mit der Funktion
circle()
gezeichnet werden können mit einem
extent
von 180. Du erinnerst dich
auch, dass mit positiven Radien Kreise nach links, mit negativen Radien
Kreise nach rechts gezeichnet werden.
>
Starte den IPI-T
URTLE
G
RAFIK
neu und mach mit!
>>> from turtle import *
>>> reset()
>>> pensize(3)
>>> circle(50, 180)
>>> circle(100, 180)
Das waren zwei nach links gedrehte Halbkreise.
Sieht schon gut aus. Bevor sie nun den nächsten
Halbkreis zeichnet, muss sich die Turtle umdrehen.
Oder besser: müssen wir die Turtle umdrehen.
>>> left(180)
Jetzt Achtung! Der nächste Halbkreis muss nach
rechts gedreht werden, also müssen wir einen nega-
tiven Radius verwenden:
>>> circle(-50, 180)
Genau, was wir brauchen. Daraus machen wir eine
Funktion!
>
Öffne ein neues Editor-Fenster. Schreibe einen
Kopfkommentar und speichere das (ent-
stehende) Programm unter dem Namen
yinyang_arbeit.py
ab.
>
Weil wir beide, du und ich, nicht so gerne tippen, kopieren wir jetzt
die letzten sechs Zeilen aus dem IPI-S
HELL
-Fenster ins Editor-Fenster.
164
Von oben nach unten und zurück
Kapitel
6
Hier stören natürlich die Dreifachpfeile samt Leerzeichen der Prompts, die
in einem Programm absolut nichts verloren haben! Aber die sind leicht
wegzukriegen.
>
Starte über das Menü E
DIT
|R
EPLACE
… den R
EPLACE
D
IALOG
.
>
Schreibe in die F
IND
-Zeile das Python-Prompt,
>>>
,
und ein Leerzei-
chen
. Die R
EPLACE WITH
-Zeile lasse leer, denn die obigen vier Zeichen
sollen ja durch nichts ersetzt – und damit einfach entfernt – werden.
Klicke auf R
EPLACE
A
LL
. Fertig!.
>
Kontrolliere, ob wirklich alle Programmzeilen ganz links beginnen.
Wenn sich dort noch Leerzeichen finden, müssen sie weg!
>
Speichere und führe das Programm aus. Erstellt es die Yin-Figur rich-
tig?
>
Nun wollen wir die letzten vier Anweisungen zu einer Funktion zu-
sammenfassen. Füge vor dem ersten
circle()
-Aufruf zwei Leerzei-
len ein. In die zweite schreibe die Kopfzeile einer Funktionsdefinition
für die Funktion – sagen wir:
yin()
.
Die vier Zeilen danach bilden den Funktionskörper und müssen eingerückt
werden. Das geht am schnellsten so:
165
Weg 2: Bottom-up. Schrittweise von unten nach oben
>
Markiere diese vier Zeilen mit der Maus und drücke auf die
(ÿ)
-
Taste. Verschiebe zuletzt noch die
reset()
-Anweisung unter die
Funktionsdefinition. Das Programm sieht jetzt so aus:
from turtle import *
def yin():
circle(50, 180)
circle(100, 180)
left(180)
circle(-50, 180)
reset()
Ist dir klar, warum
reset()
keinesfalls
im Funktionskörper von
yin()
stehen darf? Wenn nicht, probiere aus, was dann (bei den folgenden »Mach
mit!«-Anweisungen) passiert!
>
Speichere das Programm und führe es erneut aus.
Nun hat
reset()
die alte Grafik gelöscht und der IPI sollte die neue Funk-
tion
yin()
kennen. Das wollen wir gleich ausprobieren.
>
Mach mit!
>>> yin()
>>> left(180)
>>> yin()
>>> left(180)
Das sieht ja schon recht vielversprechend aus. (Die letzte
left()
-
Anweisung hat die Turtle wieder in die ursprüngliche Richtung gestellt.)
Unsere Funktion
yin()
muss aber jetzt noch verbessert werden. (1) Sie soll
das Symbol in verschiedenen Größen zeichnen können. Und (2) muss die
Yin-Figur auch mit einer Farbe gefüllt werden können. Unternehmen wir
zuerst die Verbesserung (1) und verpassen wir
yin()
einen Parameter
ra-
dius
. Wir müssen aber daran denken, dass die kleinen Halbkreise nur mit
dem halb so großen Radius gezeichnet werden dürfen. Also:
>
Setze im Funktionskopf von
yin()
den Parameter
radius
ein. Erset-
ze in den
circle()
-Aufrufen
100
durch
radius
und
50
durch
ra-
dius / 2
. So sieht dann das Ergebnis aus:

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.