Kapitel 5
Kapitel 5: For-Schleifen
Computer sind besonders gut darin, Dinge zuverlässig zu wiederholen. Wenn Karel denselben Codeblock mehrere Male ausführen soll, brauchst du nicht jede Zeile immer wieder neu zu schreiben.
Für eine feste Anzahl von Wiederholungen verwenden wir eine for-Schleife. Sie sagt: Führe den eingerückten Block genau so oft aus, wie in range(...) angegeben ist.
Die Grundform
Die Karel-Variante einer for-Schleife sieht so aus:
for i in range(anzahl):
befehl()
noch_ein_befehl()Für den Anfang kannst du die Zeile als „wiederhole diesen Codeblock anzahl Mal“ lesen. Die Variable i ist hier nur Teil der Python-Schreibweise; Karel benutzt sie in unseren ersten Aufgaben noch nicht.
Viele Beeper ablegen
Wenn Karel zum Beispiel 15 Beeper auf demselben Feld ablegen soll, wäre es mühsam, fünfzehnmal put_beeper() zu schreiben. Mit einer Schleife bleibt die Absicht sichtbar:
def main():
for i in range(15):
put_beeper()Wichtig ist die Einrückung: Nur die Zeilen unter der for-Zeile gehören zum Schleifenkörper und werden wiederholt.
Mehrere Zeilen im Schleifenkörper
Ein Schleifenkörper kann aus mehreren Befehlen bestehen. In der Übung unten legt Karel einen Beeper ab, geht zum nächsten Feld und dreht sich nach links. Diese drei Befehle werden viermal ausgeführt:
def main():
for i in range(4):
put_beeper()
move()
turn_left()Vorbedingung und Nachbedingung
Der schwierigste Teil an Schleifen ist oft nicht die Schreibweise, sondern der Zustand zwischen den Wiederholungen. Am Anfang jeder Runde muss Karel so stehen, dass der Schleifenkörper wieder sinnvoll ausgeführt werden kann.
In der 2x2-Welt unten klappt das, weil Karel nach jeder Runde auf das nächste leere Feld schaut. Würdest du turn_left() aus dem Schleifenkörper entfernen, wäre diese Annahme nach der ersten Runde nicht mehr wahr.
Verschachtelte Schleifen
Später können Schleifen auch andere Schleifen enthalten. Das nennt man verschachtelte Schleifen. Unser Runner unterstützt diese einfache Form bereits, aber für den Anfang reicht es, eine einzelne Schleife sicher zu lesen und zu schreiben.
def main():
for row in range(2):
for col in range(2):
put_beeper()Ausprobieren
Aufgabe
Vier Felder markieren
Karel soll in einer 2x2-Welt auf jedes Feld einen Beeper legen und am Ende wieder am Start stehen. Verwende dafür eine for-Schleife.
Ziel
- Karel soll am Ende in Spalte 1, Zeile 1 stehen.
- Karel soll nach Osten schauen.
- In der Welt sollen 4 Beeper liegen.
- Karel soll keine Beeper in der Tasche haben.
Karel-Welt
Aktuelle Welt
2 x 2
Blick nach Osten
1,1Karel-Welt
Zielwelt
2 x 2
Blick nach Osten
1,2
2,2
1,1
2,1Aktuell unterstützt der Runner Karel-Befehle, eigene Funktionen und einfache for- und while-Schleifen.
Feedback
Schritte: 0
Status: Noch nicht gelöst
Aufgabe
Vier Schlaglöcher reparieren
Karel läuft eine Straße entlang, in der vier Schlaglöcher offen sind. Fülle jedes Schlagloch mit einem Beeper und nutze dafür eine for-Schleife.
Ziel
- Karel soll am Ende in Spalte 9, Zeile 2 stehen.
- Karel soll nach Osten schauen.
- In der Welt sollen 4 Beeper liegen.
- Karel soll keine Beeper in der Tasche haben.
Karel-Welt
Aktuelle Welt
10 x 3
Blick nach Osten
1,2Karel-Welt
Zielwelt
10 x 3
Blick nach Osten
9,2
2,1
4,1
6,1
8,1Aktuell unterstützt der Runner Karel-Befehle, eigene Funktionen und einfache for- und while-Schleifen.
Feedback
Schritte: 0
Status: Noch nicht gelöst