Wiederholungen 🔁
Im vorherigen Kapitel haben Sie eine Treppe gezeichnet. Das Programm könnte in etwas so aussehen:
from turtle import *
left(90)
forward(17)
right(90)
forward(29)
left(90)
forward(17)
right(90)
forward(29)
left(90)
forward(17)
right(90)
forward(29)
left(90)
forward(17)
right(90)
forward(29)
left(90)
forward(17)
right(90)
forward(29)
Was stellen Sie beim Treppen-Programm fest?
- Das Programm ist lang 🙄
- man sieht nicht auf einen Blick,
- wie viele Stufen die Treppe hat
- ob alle Stufen gleich breit und hoch sind
- Um die Stufenbreite oder die Stufenhöhe anzupassen, müssen viele Zeilen verändert werden
- Es kommt immer wieder dieselbe Sequenz vor:
left(90)forward(17)right(90)forward(29)
- wir sind zu faul, um immer wieder dieselbe Sequenz aufzuschreiben (oder zu Copy&Pasten)
Wiederholen von Sequenzen
Ein Algorithmus kann Sequenzen wiederholt ausführen. Die zu wiederholende Sequenz ist immer eingerückt (im Vergleich zur vorhergehenden Zeile) und wird mit einem Doppelpunkt : eingeleitet.
from turtle import *
for i in range(5):
left(90)
forward(17)
right(90)
forward(29)
Für den Moment lesen wir das range(5) dabei einfach als «5-mal». Mit dem i beschäftigen Sie sich im nächsten Kapitel. Die ganze Zeile for i in range(5): können Sie also für den Moment einfach als «Wiederhole die folgenden eingerückten Anweisungen 5-mal» verstehen. Hier noch ein anderes Beispiel:
Die Anatomie einer for-Schleife
wobei Sie die Anzahl der Wiederholungen natürlich an die entsprechende Situation und Aufgabe anpassen können, indem Sie die Zahl 4 in Klammern durch eine andere Zahl ersetzen.
Das obige Beispiel macht deutlich, weshalb die Wiederholung dafür sorgt, dass unser Code einfach anpassbar wird: Wenn Sie beim obigen Quadrat die Seitenlänge von 50 auf 100 verändern wollen, müssen Sie nur die Zahl auf Zeile 6 verändern: forward(50) wird zu forward(100).
Übungen
Übersetzen Sie das Struktogramm in ein Python Programm. Was entsteht?
from turtle import *
Zeichnen Sie für folgendes Programm ein Struktogramm auf ein Blatt Papier. Fotografieren Sie es im Anschluss und halten Sie es im untenstehenden Textfeld fest.
from turtle import *
forward(30)
left(60)
for i in range(5):
forward(100)
left(72)
backward(20)
Verwenden Sie eine Schleife, um mit der Turtle ein regelmässiges Sechseck mit Seitenlänge 100 zu zeichnen.
Ihre Lösung sollte aus maximal 6 Zeilen bestehen (Leerzeilen nicht mitgezählt).

Kopieren Sie das Programm aus der vorherigen Aufgabe und experimentieren Sie mit der Anzahl Wiederholungen und den Drehwinkeln (dazu gehören auch left(n) vs. right(n)) um die folgenden beiden Figuren zu zeichnen:


Verwenden Sie eine Schleife um eine Treppe mit 7 Stufen zu zeichnen. Die Stufen sollen je 20 Pixel hoch und tief sein.
Verständnisfrage: Auf wie vielen Codezeilen müssen Sie etwas ändern, wenn Sie statt 7 neu 25 Stufen möchten? Geben Sie Ihre Antwort hier als Zahl ein und überprüfen Sie sie mit einem Klick auf den -Button.
Verwenden Sie eine Schleife, um die folgende Figur zu zeichnen:

Verwenden Sie eine Schleife, um diese Treppe zu zeichnen:

Verwenden Sie eine Schleife, um diesen Stern zu zeichnen:

Zeichnen Sie mit der Turtle eine solche Perlenkette mit 18 Perlen. Die Turtle soll am Schluss nicht mehr zu sehen sein.

Verschachtelte Schleifen
Stellen Sie sich vor wir wollen das folgende Muster mit Hilfe einer for-Schleife zeichnen:
Das Programm könnte wie folgt aussehen:
from turtle import *
for i in range(5):
forward(40)
forward(10)
left(72)
forward(10)
left(72)
forward(10)
left(72)
forward(10)
left(72)
forward(10)
left(72)
done()
In der wiederholten Sequenz hat es aber immer noch einen repetitiven Befehl drin (mehrere aufeinanderfolgende forward(10) und left(72)). Das können wir noch optimieren, indem wir eine Wiederholung innerhalb einer Wiederholung verwenden:
from turtle import *
for i in range(5):
forward(40)
for j in range(5):
forward(10)
left(72)
done()
Das Ergebnis ist eine sogenannte verschachtelte Wiederholung. Dabei haben wir immer eine innere und eine äussere Wiederholung: Die innere Wiederholung ist die auf den Zeilen 6-8, die äussere ist die auf den Zeilen 3-8. Das Ausführen der inneren Wiederholung ist Teil der Sequenz der äusseren Wiederholung. Die innere Wiederholung ist also quasi ein «Schritt» der äusseren Wiederholung.
Wiederholungen können grundsätzlich beliebig tief verschachtelt werden: Auch die innere Wiederholung kann selbst wieder eine innere Wiederholung enthalten, die selbst auch wiederum eine innere Wiederholung enthält, und so weiter.
- Analysieren Sie das untenstehende Programm. Versuchen Sie auf einem Blatt Papier herauszufinden, was hier gezeichnet wird.
- Machen Sie mit der Laptop-Webcam ein Foto von Ihrer Zeichnung und fügen Sie es hier ein:
Laden...
- Kopieren Sie den Code anschliessend unten in den Code Editor und führen Sie das Programm aus, um Ihre Vermutung zu überprüfen.
from turtle import *
shape('turtle')
for i in range(5):
for i in range(4):
forward(100)
right(90)
left(36)
done()
Zeichnen Sie für folgendes Programm ein Struktogramm und halten Sie dieses fest.
from turtle import *
for i in range(5):
left(72)
for i in range(4):
forward(20)
left(90)
forward(100)
Wie man mit einer Schleife ein Quadrat zeichnet, wissen Sie bereits. Nun sollen Sie folgendes Bild zeichnen, welches aus 20 Quadraten (je mit einer Seitenlänge von 100) besteht, die je 18° zueinander verdreht sind.
Verwenden Sie dazu zwei ineinander verschachtelte for-Schleifen: also eine for-Schleife innerhalb einer anderen for-Schleife.

Zeichnen Sie die folgende Figur wiederum mit zwei ineinander verschachtelten for-Schleifen. Die innere for-Schleife zeichnet ein Quadrat.
Gehen Sie mit der Turtle zuerst ein bisschen zurück, damit sie nicht aus dem Fenster rennt. Verwenden Sie dazu die Befehle back(), penup() und pendown().