Teil 7: Schleifen
Lernziele
- Mit
forundrangeeine feste Anzahl Durchläufe programmieren- Start, Ende und Schrittweite von
rangerichtig setzen- Schleifen verschachteln und den Unterschied zwischen innen und aussen erklären
- Mit
whilewiederholen, solange eine Bedingung gilt- Eine Schleife mit
breakverlassen und mitcontinueeinen Durchlauf überspringenNeue Befehle und Zeichen:
forwiederholt für jeden Wert einer Folgerange()erzeugt eine Folge von Zahlenwhilewiederholt, solange eine Bedingung wahr istbreakbricht die Schleife abcontinuespringt zum nächsten Durchlauf+=erhöht eine Variable um einen Wert
Die Turtle
Schleifen üben wir in diesem Teil mit einer Schildkröte, die zeichnen kann. Die Turtle startet in der Mitte der Zeichenfläche, schaut nach rechts und zieht eine Linie hinter sich her, wo immer sie hinläuft. Klicken Sie auf Run:
Die ersten beiden Zeilen braucht jedes Turtle-Programm: import turtle lädt die Turtle, und eva = turtle.Turtle() erzeugt eine Schildkröte mit dem Namen eva. Alle Befehle an sie beginnen mit eva.. Mehr als diese Befehle brauchen Sie nicht. Die Karte bleibt beim Scrollen am rechten Rand angepinnt:
Turtle-Befehle
| Befehl | Wirkung |
|---|---|
eva.forward(100) | 100 Schritte vorwärts |
eva.back(100) | 100 Schritte rückwärts |
eva.left(90) | um 90° nach links drehen |
eva.right(90) | um 90° nach rechts drehen |
eva.penup() | Stift anheben: eva läuft, ohne zu zeichnen |
eva.pendown() | Stift wieder absetzen |
eva.color("red") | Farbe wechseln: "blue", "green", "orange", "purple" … |
eva.pensize(3) | Strichdicke |
eva.speed(0) | ohne Animation zeichnen, praktisch bei grossen Mustern |
Schleifen
Eine Schleife lässt den Computer dieselbe Sache immer wieder tun. Ein Quadrat zum Beispiel besteht viermal aus demselben Paar: vorwärts, drehen.
eva.forward(100)
eva.right(90)
eva.forward(100)
eva.right(90)
eva.forward(100)
eva.right(90)
eva.forward(100)
eva.right(90)
Statt alles viermal zu tippen, schreiben wir es einmal und sagen, wie oft es ausgeführt werden soll.
Die for-Schleife
Alles, was unter der for-Zeile eingerückt ist, wird wiederholt. Ändern Sie die 4 auf 2 oder auf 8. Was passiert, und warum?
Detektivaufgabe: Was machtrange?In der Schleife steht
for i in range(4). Doch was liefertrangeeigentlich, und welche Werte nimmtian? Finden Sie es mit Experimenten selbst heraus:
- Führen Sie den Code unten aus. Welche Werte nimmt
ian? Wo beginnt die Zählung, wo hört sie auf?- Ändern Sie die Zahl in der Klammer. Sagen Sie jeweils die Ausgabe voraus, bevor Sie auf Run klicken.
- Untersuchen Sie, was
rangemacht, wenn mehr in der Klammer steht. Probieren Sie auch negative Zahlen aus.Halten Sie Ihre Ergebnisse in der Notiz fest: eine Regel pro Fall, jeweils mit einem Beispiel.
Tipp
rangekann mit einem, zwei oder drei Argumenten gebraucht werden, zum Beispielrange(5),range(2, 8)oderrange(0, 20, 5). Die Argumente werden mit Kommas getrennt.
Ergebnisse: So funktioniertrange
Weil i bei jedem Durchlauf grösser wird, kann die Turtle damit Linien zeichnen, die immer länger werden:
Ersetzen Sie die 91 durch 90, 120 oder 144. Ein einziger Winkel macht ein ganz anderes Bild.
Aufgaben zu for
Aufgabe 7.1: DreieckZeichnen Sie mit einer
for-Schleife ein gleichseitiges Dreieck mit Seitenlänge 150. Um wie viel Grad muss sich die Turtle an jeder Ecke drehen? Tipp: Nach dem ganzen Dreieck schaut sie wieder in die Startrichtung, hat sich also insgesamt um 360° gedreht.
Aufgabe 7.2: VieleckeZeichnen Sie ein regelmässiges Vieleck mit Seitenlänge 80. Die Anzahl Ecken steht in der Variablen
ecken. Ihr Programm soll für jeden Wert funktionieren: Testen Sie mit 5, 8 und 12. Lassen Sie zum Prüfenecken = 6stehen.
Aufgabe 7.3: Ungerade ZahlenSchreiben Sie eine
for-Schleife, die alle ungeraden Zahlen von 101 bis 199 ausgibt, jede auf einer eigenen Zeile.
Aufgabe 7.4: Eckige SpiraleZeichnen Sie eine eckige Spirale. Die Linien sind 10, 20, 30, …, 200 Schritte lang, nach jeder Linie dreht die Turtle um 90° nach links. Verwenden Sie
rangemit drei Argumenten.
Aufgabe 7.5: Gestrichelte LinieZeichnen Sie eine gestrichelte Linie aus 10 Strichen. Jeder Strich ist 15 Schritte lang, jede Lücke 10 Schritte.
Verschachtelte Schleifen
Eine Schleife darf in einer anderen stehen. Die innere Schleife läuft dann bei jedem Durchlauf der äusseren komplett durch.
Die innere Schleife zeichnet ein Quadrat. Die äussere wiederholt das zwölfmal und dreht die Turtle nach jedem Quadrat um 30°. Achten Sie auf die Einrückung: eva.right(30) gehört zur äusseren Schleife, nicht zur inneren.
Mit print lässt sich die Reihenfolge genau verfolgen:
Aufgabe 7.6: Quadrate in einer ReiheZeichnen Sie fünf Quadrate mit Seitenlänge 40 nebeneinander. Zwischen zwei Quadraten liegt eine Lücke von 20 Schritten.
Aufgabe 7.7: RosetteZeichnen Sie 36 Sechsecke mit Seitenlänge 60. Nach jedem Sechseck dreht sich die Turtle um 10°. Mit
eva.speed(0)geht es schneller.
Die while-Schleife
Die for-Schleife braucht eine feste Anzahl Durchläufe. Manchmal weiss man diese Anzahl vorher nicht. Dann nimmt man while: Wiederhole, solange die Bedingung wahr ist.
Dasselbe mit der Turtle: Die Linien werden länger, solange sie kürzer als 200 sind.
Die Schreibweise laenge += 5 bedeutet dasselbe wie laenge = laenge + 5. Genauso gibt es -=, *= und /=.
EndlosschleifeIn der Schleife muss sich etwas ändern, sonst bleibt die Bedingung für immer wahr und das Programm hört nie auf. Löschen Sie in der Spirale die Zeile
laenge += 5und starten Sie das Programm: Die Turtle läuft im Kreis, für immer. Mit dem Stop-Knopf halten Sie sie an.
break und continue
break verlässt die Schleife sofort. Das ist praktisch zusammen mit while True: Die Schleife läuft eigentlich endlos, bis ein break sie beendet.
Hier macht eva einen Zufallsspaziergang: Bei jedem Schritt dreht sie sich zufällig um 0°, 90°, 180° oder 270°. Sobald sie mehr als 150 Schritte von der Mitte entfernt ist, hört sie auf. Wie lange das dauert, weiss vorher niemand. Starten Sie das Programm mehrmals.
eva.xcor() und eva.ycor() liefern die Position der Turtle, abs() lässt das Vorzeichen weg.
continue bricht nicht die ganze Schleife ab, sondern nur den aktuellen Durchlauf. Die Schleife macht mit dem nächsten Durchlauf weiter.
0
1
2
3
4
6
7
Aufgaben zu while, break und continue
Aufgabe 7.8: VonforzuwhileSchreiben Sie die folgende
for-Schleife alswhile-Schleife um, sodass sie genau dieselben Werte ausgibt.
Aufgabe 7.9: TreppeDie Turtle zeichnet eine Treppe: 20 Schritte nach rechts, 20 nach oben, und so weiter. Dabei steigt sie, solange sie weniger als 150 Schritte über dem Start steht. Verwenden Sie
whileundeva.ycor().
Aufgabe 7.10: SternmaschineDie Turtle zeichnet immer wieder eine Linie der Länge 200 und dreht sich um
winkelGrad nach rechts, bis sie wieder genau am Start steht. Dann bricht sie mitbreakab und gibt aus, wie viele Linien sie gezeichnet hat.
- Verwenden Sie
while Trueund einen Zähler.- «Am Start» heisst:
abs(eva.xcor()) < 1 and abs(eva.ycor()) < 1. Genau 0 klappt nicht immer, weil der Computer mit Kommazahlen leicht ungenau rechnet.- Probieren Sie danach die Winkel 135, 170 und 100 aus. Lassen Sie zum Prüfen
winkel = 144stehen.
Aufgabe 7.11: Zaun mit TorDer Zaun hat 10 Pfosten im Abstand von 20 Schritten. Jeder Pfosten ist eine 50 Schritte hohe Linie nach oben. Der fünfte Pfosten fehlt, dort ist das Tor. Überspringen Sie ihn mit
continue.Ein Pfosten entsteht so:
left(90),forward(50),back(50),right(90).
Weitere Aufgaben
Zusatzaufgabe 7.12: GitterZeichnen Sie ein Gitter aus 4 × 4 Quadraten mit Seitenlänge 30, die sich berühren. Dafür braucht es drei Schleifen ineinander: Zeilen, Quadrate in einer Zeile, Seiten eines Quadrats. Am Ende einer Zeile muss die Turtle zurück an den Anfang und eine Zeile nach oben.
Zusatzaufgabe 7.13: Wie weit ist eva gelaufen?Erweitern Sie die wachsende Spirale aus dem
while-Beispiel: Zählen Sie in einer Variablenstreckezusammen, wie viele Schritte eva insgesamt gelaufen ist, und geben Sie die Zahl am Schluss aus.
Zusatzaufgabe 7.14Analysieren Sie das folgende Programm ohne Computer. Was gibt es aus, und was tut es allgemein?
wort = "ABRACADABRA" counter = 0 for buchstabe in wort: if buchstabe == "A": counter += 1 print(counter)
Zusatzaufgabe 7.15: Eigenes MusterEntwerfen Sie ein eigenes Muster mit mindestens zwei verschachtelten Schleifen. Spielen Sie mit Winkeln, Längen,
colorundpensize. Ideen: eine Blume aus Dreiecken, ein Stern aus Sternen, eine Spirale aus Quadraten, die mitiwachsen.