Schleifen
Beim Säulendiagramm im letzten Kapitel hast du dieselben fünf Zeilen fünfmal abgetippt. Das war mühsam – und je größer das Programm wird, desto unübersichtlicher wird es.
Dafür gibt es Schleifen.
Flussdiagramme
Bevor wir programmieren, planen wir. Ein Flussdiagramm (auch: Programmablaufplan) stellt den Ablauf eines Programms grafisch dar.
Unten siehst du zwei Flussdiagramme. Sie stellen jeweils den Ablauf eines Turtle-Programms dar.
a) Interpretiere die beiden Diagramme. Gehe darauf ein, welche Bedeutung die verschiedenen Symbole haben.
b) Fasse zusammen, welches Ergebnis die beschriebenen Programme liefern. Sind die Ergebnisse gleich?
Diagramm A – ohne Schleife
flowchart TD
S([Start]) --> A1[forward 100]
A1 --> A2[right 90]
A2 --> A3[forward 100]
A3 --> A4[right 90]
A4 --> A5[forward 100]
A5 --> A6[right 90]
A6 --> A7[forward 100]
A7 --> A8[right 90]
A8 --> E([Ende])
Diagramm B – mit Schleife
flowchart TD
S([Start]) --> P[/Wiederhole 4 mal/]
P --> B1[forward 100]
B1 --> B2[right 90]
B2 --> P
P -- fertig --> E([Ende])
Die wichtigsten Symbole im Flussdiagramm:
| Symbol | Bedeutung |
|---|---|
| Abgerundetes Rechteck | Start oder Ende des Programms |
| Rechteck | eine Anweisung |
| Parallelogramm | Ein- oder Ausgabe, auch der Schleifenkopf |
| Raute | eine Bedingung – der Ablauf verzweigt sich |
| Pfeil | zeigt an, wie es weitergeht |
Die for-Schleife
In Python setzt man eine Wiederholung mit einer for-Schleife um:
for i in range(4):bedeutet: „Wiederhole den folgenden Block viermal."- Der Doppelpunkt
:am Ende der Zeile ist Pflicht. - Alle Zeilen, die wiederholt werden sollen, müssen eingerückt sein – üblicherweise um vier Leerzeichen.
- Die Einrückung entscheidet, was zur Schleife gehört. Was nicht eingerückt ist, läuft erst nach der Schleife.
iist eine Zählvariable. Sie nimmt nacheinander die Werte 0, 1, 2, 3 an. Oft braucht man sie gar nicht.
Teste, wie wichtig die Einrückung ist: Rücke im Beispiel oben die Zeile right(90) nicht ein und führe das Programm aus.
Erkläre, was passiert und warum.
Auflösung: Was passiert da?
Ohne Einrückung gehört right(90) nicht mehr zur Schleife. Das Programm läuft dann so ab:
- viermal
forward(100)– die Turtle läuft eine lange gerade Linie, - danach einmal
right(90).
Statt eines Quadrats entsteht eine 400 Pixel lange Strecke.
Aufgabe 1: Drei Zeichnungen mit Schleifen
Für jede der folgenden drei Zeichnungen gilt:
a) Entwickle zuerst ein Flussdiagramm auf Papier.
b) Überführe dein Flussdiagramm anschließend in ein Programm.
a) Die Punktekette
Tipp 1: Was wiederholt sich?
Sieh dir die Zeichnung an: Es sind zehn Punkte in gleichem Abstand. Was passiert bei jedem einzelnen Punkt? Genau zwei Dinge.
Tipp 2: Der Schleifenrumpf
for i in range(10):
dot(20)
forward(25)
Damit die Kette mittig steht, setze die Turtle vorher mit penup() und goto(-120, 0) an den Startpunkt.
from turtle import *
shape("turtle")
screensize(500, 300)
penup()
goto(-120, 0)
for i in range(10):
dot(20)
forward(25)
b) Die Treppe
Tipp 1: Was ist eine Stufe?
Eine Stufe besteht aus zwei Strecken: einmal nach oben, einmal nach rechts. Dazwischen und danach muss gedreht werden.
Tipp 2: Der Schleifenrumpf
for i in range(6):
left(90)
forward(40)
right(90)
forward(40)
from turtle import *
shape("turtle")
screensize(500, 400)
penup()
goto(-150, -120)
pendown()
for i in range(6):
left(90)
forward(40)
right(90)
forward(40)
c) Das Quadrat
Zeichne ein Quadrat mit der Seitenlänge 100 – diesmal mit einer Schleife statt mit acht einzelnen Befehlen.
Aufgabe 2: Erst zeichnen, dann programmieren
Gegeben ist das folgende Flussdiagramm.
a) Zeichne zunächst ohne Rechner auf Papier das Bild, das sich ergibt.
b) Implementiere danach das Programm und überprüfe dein Ergebnis.
flowchart TD
S([Start]) --> V[laenge = 5]
V --> P[/Wiederhole 40 mal/]
P --> B1[forward laenge]
B1 --> B2[right 90]
B2 --> B3[laenge = laenge + 5]
B3 --> P
P -- fertig --> E([Ende])
Tipp 1: Was ist hier neu?
Neu ist, dass sich die Variable laenge innerhalb der Schleife verändert. Bei jedem Durchlauf wird die Strecke also 5 Pixel länger als beim vorherigen.
Tipp 2: Wo gehört die Variable hin?
Achte genau auf die Einrückung:
laenge = 5steht vor der Schleife und wird nur einmal ausgeführt.laenge = laenge + 5steht in der Schleife und wird bei jedem Durchlauf ausgeführt.
from turtle import *
shape("turtle")
screensize(700, 700)
speed(0)
laenge = 5
for i in range(40):
forward(laenge)
right(90)
laenge = laenge + 5
Es entsteht eine quadratische Spirale: Weil jede Strecke etwas länger ist als die vorherige, schließt sich das Quadrat nie.
Aufgabe 3: Das Säulendiagramm – noch einmal
Erinnerst du dich an das Säulendiagramm aus dem letzten Kapitel? Dort hast du fünf fast identische Blöcke abgetippt.
Schreibe das Programm mit einer Schleife neu, sodass fünf gleich hohe Säulen entstehen.
Überlege danach: Warum lassen sich die unterschiedlich hohen Säulen mit den Mitteln dieser Lektion noch nicht elegant zeichnen?
Auflösung zur zweiten Frage
Eine Schleife wiederholt immer genau denselben Block. Die fünf Höhen 40, 60, 20, 100 und 80 folgen aber keiner Regel – man kann sie nicht ausrechnen.
Dafür braucht man Listen. Die lernst du in Kapitel 5 kennen.
Zusatzaufgaben
Entwickle Programme, in denen die Turtle jeweils eine dieser Zeichnungen erstellt.
a) Wachsende Punkte
Tipp
Das funktioniert wie bei der Spirale: Führe eine Variable groesse ein, verwende sie bei dot(groesse) und vergrößere sie am Ende jedes Schleifendurchlaufs.
b) Quadrate ineinander
Tipp 1: Zwei Schleifen
Für jedes einzelne Quadrat brauchst du eine Schleife mit vier Durchläufen. Und diese Quadrate wiederum sollen achtmal gezeichnet werden – mit jeweils größerer Seitenlänge.
Eine Schleife in einer Schleife nennt man verschachtelte Schleife. Mehr dazu in Lektion 6.
Tipp 2: Der gemeinsame Mittelpunkt
Alle Quadrate haben denselben Mittelpunkt. Ein Quadrat mit der Seitenlänge seite beginnt also bei goto(-seite/2, -seite/2).