TigerJython | xx für Gymnasien |
In vielen Programmiersprachen sind for-Schleifen eine oft eingesetzte Alternative zu den while-Schleifen und werden insbesondere dann verwendet, wenn bei jedem Schleifendurchgang eine Schleifenvariable um den gleichen Wert (in Python ein ganzzahliger Wert) verändert wird.
Die einfachsten for-Schleifen, sind sogenannte Zählschleifen in der Form:
for i in range(n): Anweisung1 Anweisung2 ... |
range(n) liefert die Zahlen 0, 1, 2, ...bis n-1, also insgesamt n Zahlen (Es handelt sich eigentlich im eine Liste mit den Zahlen [0, 1, .., n-1] ) . Der Startwert von i ist 0 und i wird nach jedem Schleifendurchlauf um 1 erhöht. Die Anweisungen im Schleifenblock werden also n mal wiederholt. Diese Schleife entspricht einer while-Schleife mit Startwert 0, der Schleifenbedingung i < n und der Wertänderung i = i +1.
Bemerkung: Falls im Schleifenkörper i nicht verwendet wird, kann in TigerJython an Stelle der for-Schleife eine repeat-Schleife verwendet werden, die keine Variablen benötigt und daher für Programmiereinsteiger einfacher verständlich ist.
Beispiel 1: Mit einer for-Schleife einen Linienschar zeichnen
Es werden 21 Linien von links nach rechts und 21 Linien von rechts nach lins gezeichnet. Die Variable i durchläuft dabei die Werte 0, 1, 2, .. 20 also ingesamt 21 Werte.
# Gp8a.py from gpanel import * makeGPanel(0, 20, 0, 20) for i in range(21): line(0, 10, 20, i) line(20, 10, 0, i) delay(100) |
Erklärungen zum Programmcode:
line(0, 10, 20, i) Zeichnet eine Linie mit dem Anfangspunkt (0, 10) und Endpunkt (20, i). |
Beipiel 2: for-Schleifen mit 1, 2, bzw. 3 Parameter verwenden
Die allgemeine Form einer for-Schleife verwendet range() mit drei Parametern:
for i in range(start, stop, step): Anweisung1 Anweisung2 ... |
Der Startwert start muss zu Beginn nicht 0 sein und die Wertänderung step kann eine beliebige ganze Zahl (auch negativ) sein. Ist step positiv, so werden die Anweisungen im Schleifenblock werden wiederholt, so lange i kleiner als der stop-Wert ist. Anschaulich erkennt man den Unterschied zwischen den for-Schleifen mit 1, 2, bzw. 3 Parametern an folgenden Beispielen:
for i in range(n): |
for i in range(start, end): |
for i in range(start, end, step): |
from gpanel import * makeGPanel(-30, 30, -30, 30) for i in range(60): rectangle(i, i) |
from gpanel import * makeGPanel(-30, 30, -30, 30) for i in range(20, 40): rectangle(i, i) |
from gpanel import * makeGPanel(-30, 30, -30, 30) for i in range(10, 40, 3): rectangle(i, i) |
Erklärungen zum Programmcode:
Anstelle einer for-Schleife kann man immer auch eine while-Schleife verwenden. Das Umgekehrte ist nicht der Fall, da für die Wertänderung in der for-Schleife nur ganze Zahlen erlaubt sind. |
Beispiel 3: Verwendung von verschachtelten for-Schleifen
Um ein Schachbrett zu zeichnen, geht man alle Felder einer 8x8 Matrix mit einem Zeilenindex x und einem Spaltenindex y mit zwei ineinander verschachtelten for-Schleifen durch. Man beginnt bei y = 0 und geht mit festem Wert von y in der inneren Schleife alle x durch, dann setzt man y = 1, usw.
# Gp8c.py from gpanel import * makeGPanel(0, 8, 0, 8) setColor("blue") for y in range(8): for x in range(8): if (x + y) % 2 == 0: fillRectangle(x, y, x + 1, y + 1) |
Erklärungen zum Programmcode:
if (x + y) % 2 == 0 Überprüft, ob die Summe des Zeilen- und Spaltenindex eine gerade Zahl ist. Wie man leicht sieht, muss in diesem Fall ein gefülltes Quadrat gezeichnet werden. Die Modulo-Division a % b gibt bei der ganzzahligen Division von a durch b den Divisionsrest zurück. a % 2 gibt also 0 zurück, falls a gerade ist, und gibt 1 zurück, falls a ungerade ist. |
Beispiel 4: Zeichnen eines Moiré-Musters
Ein Moiré entsteht, wenn sich Geradenscharen überlagern. Die nebenstehende Figur kann mit zwei verschachtelten for-Schleifen erzeugt werden.
# Cp8d.py from gpanel import * makeGPanel(0, 10, 0, 10) for i in range(0, 11): for k in range (0, 11): line(i, 0, k, 10) delay(100) for i in range(0, 11): for k in range (0, 11): line(0, i, 10, k) delay(100) |
Aufgaben: Serie 8 |
1) |
|
2) |
|
3) |
|