Zum Hauptinhalt springen

Wiederholung 🔁

Die Wiederholung (auch als Schleife bezeichnet) ist eine der wichtigsten Kontrollstrukturen zur Erstellung von Algorithmen. Mit ihr können wir eine repetitive Sequenz von Befehlen 1x aufschreiben und beliebig oft wiederholen lassen, statt sie mehrfach aufschreiben zu müssen.

Sie kennen bisher folgende Kontrollstrukturen:

KontrollstrukturBeschreibung
SequenzAbfolge von Befehlen, die nach und nach ausgeführt werden
Wiederholung (Schleife) 🔁Eine bestimmte Sequenz wird wiederholt (bestimmte Anzahl Mal, oder bis eine Abbruchbedingung eintritt)

Bei der Schoggi-Schatzsuche stand Ihnen nur die Sequenz als Kontrollstruktur zur Verfügung. Die Wiederholung wäre aber auch nützlich gewesen:

Ohne Wiederholung (wie im Original-Spiel):
Links
Links
Links
Schritt
Schritt
Schritt
Schritt
Schritt
Schritt
Schritt
Links
Schritt
Links
Schritt
Schritt
Schritt
Mit Wiederholung (neu):
Wiederhole 3x:
Links
Wiederhole 7x:
Schritt
Links
Schritt
Links
Wiederhole 3x:
Schritt

Im obigen Beispiel enthält jede Wiederholung immer nur einen Befehl (Schritt oder Links). Wir können aber auch eine ganze Sequenz wiederholen lassen – hier z.B. für ein Zickzack-Muster:

Zickzack-Muster, 3 «Stufen», ohne Wiederholung:
Schritt
Links
Schritt
Links
Links
Links
Schritt
Links
Schritt
Links
Links
Links
Schritt
Links
Schritt
Links
Links
Links
Zickzack-Muster, 3 «Stufen», mit Wiederholung:
Wiederhole 3x:
Schritt
Links
Schritt
Links
Links
Links
Trotzdem noch repetitive Anweisungen

Im rechten Beispiel (Zickzackmuster mit Wiederholung) notieren wir 1x die Sequenz für eine «Stufe» des Zickzack-Musters: und lassen diese dann 3x wiederholen. Diese Sequenz, die wir wiederholen lassen, enthält selbst aber auch noch repetitive Befehle (es steht am Schluss 3x hintereinander Schritt, siehe Zeilen 5-7 im Beispiel rechts). Wie man dieses Problem lösen kann, erfahren Sie weiter unten.

Das Verwenden einer Wiederholung hat mehrere Vorteile:

Kürzerer Code
Durch das Zusammenfassen repetitiver Anweisungen wird der Code kürzer.
Weniger Fehler
Beim Aufschreiben repetitiver Anweisungen passieren schnell Fehler, die man mit der Wiederholung vermeiden kann. Achtung: Während der Mensch auch bei Ausführen Fehler machen kann, passiert dies dem Computer nicht.
Einfache Anpassung
Falls wir Befehle mit Zusatzinformationen (sog. Parametern) verwenden (z.B. forward(50)) müssen wir auch diese Zusatzinformation immer hinschreiben. Möchten wir nun z.B. beim Zeichnen eines Turtle-Quadrats die Seitenlänge von 50 auf 100 ändern, müssen wir die Zahl bei jedem forward(…)-Befehl (also 4x) anpassen. Das ist aufwändig und fehleranfällig. Wenn wir eine Wiederholung verwenden, haben wir nur noch einen forward(…)-Befehl und müssen somit nur eine Anpassung machen.

Die for-Schleife in Python

Zur Erinnerung: Programmieren heisst, einen Algorithmus in die Sprache des Computers zu übersetzen. Wir brauchen also eine Möglichkeit, das algorithmische Konzept einer Wiederholung auch in Python auszudrücken. Python bietet uns dazu verschiedene Möglichkeiten – am häufigsten Arbeiten wir aber mit der for-Schleife.

Ein Turtle-Quadrat können wir damit beispielsweise so zeichnen:

from turtle import *

shape('turtle')

for i in range(4):
forward(50)
right(90)

done()

Für den Moment lesen wir das range(4) dabei einfach als «4-mal». Mit den i beschäftigen Sie sich im nächsten Kapitel. Das ganze Zeile for i in range(4): können Sie also für den Moment einfach als «Wiederhole die folgenden eingerückten Anweisungen 4-mal» verstehen:

Die Anatomie einer for-SchleifeDie 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.

Einfache Anpassung

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

Aufgabe 1

Verwenden Sie eine Schleife, um mit der Turtle ein regelmässiges Sechseck mit Seitenlänge 100 zu zeichnen.

Zeilen

Ihre Lösung sollte aus maximal 6 Zeilen bestehen (Leerzeilen nicht mitgezählt).


Laden...
Aufgabe 2

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:



Laden...
Aufgabe 3

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.

Laden...
Laden...
Aufgabe 4

Verwenden Sie eine Schleife, um die folgende Figur zu zeichnen:


Laden...
Aufgabe 5

Verwenden Sie eine Schleife, um diese Treppe zu zeichnen:


Laden...
Aufgabe 6

Verwenden Sie eine Schleife, um diesen Stern zu zeichnen:


Laden...
Aufgabe 7

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


Laden...

Verschachtelte Schleifen

Das Beispiel mit dem Zickzack-Muster ist mit der Wiederholung schon deutlich besser geworden. In der wiederholten Sequenz hat es aber immer noch einen repetitiven Befehl drin (am Schluss steht zweimal nacheinander Links). Das können wir noch optimieren, indem wir eine Wiederholung innerhalb einer Wiederholung verwenden (Variante 2, Zeilen 6-7):

Variante 1:
Wiederhole 3x:
Schritt
Links
Schritt
Links
Links
Links
Variante 2:
Wiederhole 3x:
Schritt
Links
Schritt
Links
Wiederhole 2x:
Links

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-7, die äussere ist die auf den Zeilen 1-7. Das Ausführen der inneren Wiederholung ist Teil der Sequenz der äusseren Wiederholung. Die innere Wiederholung ist also quasi ein «Schritt» der äusseren Wiederholung.

Beliebige Verschachtlung

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.

Aufgabe 8
  1. Analysieren Sie das untenstehende Programm. Versuchen Sie auf einem Blatt Papier herauszufinden, was hier gezeichnet wird.
  2. Machen Sie mit der Laptop-Webcam ein Foto von Ihrer Zeichnung und fügen Sie es hier ein:
    Laden...
  3. 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()

Aufgabe 9

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.


Laden...
Aufgabe 10

Zeichnen Sie die folgende Figur wiederum mit zwei ineinander verschachtelten for-Schleifen. Die innere for-Schleife zeichnet ein Quadrat.

Turtle im Feld behalten

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().


Laden...