TigerJython | xx für Gymnasien |
In Python und vielen anderen Programmiersprachen sind for-Schleifen eine Alternative zu den while-Schleifen. Sie werden häufig von "Profis" verwendet, da für die Schleifedefinition nur eine Zeile erforderlich ist.
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. Der erste i-Wert ist 0 und dieser 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, Schleifenbedingung i < n und Wertänderung i = i +1.
Im TigerJython kann anstelle einer solchen for-Schleife eine repeat-Schleife verwendet werden:
repeat n:
Anweisung1
Anweisung2
...
|
|
Erklärungen zum Programmcode:
for i in range(9): i läuft die Werte 0, 1, 2, 3, ...., 8 durch (9 Zahlen). Im TigerJython kann man anstelle dieser Zeile repeat 9: verwenden |
for i in range(start, stop, step): Anweisung1 Anweisung2 ... |
Der start-Wert muss zu Beginn nicht 0 sein, sondern eine beliebige ganze Zahl und auch die Wertänderung step kann beliebige ganzahlige Werte annehmen. Die Anweisungen im Schleifenblock werden wiederholt, so lange i kleiner als der stop-Wert ist.
Beispiel 2: Die Turtle zeichnet eine Spirale. Die erste Strecke hat die Länge 10 (start-Wert), jede weitere wird jeweils um 5 länger (step), so lange die Streckenlänge kleiner als 200 ist (stop-Wert).
|
for i in range(n): | for i in range(start, end): | for i in range(start, end, step): |
from gturtle import * makeTurtle() for i in range(150): forward(i) left(90) |
from gturtle import * makeTurtle() for i in range(50, 150): forward(i) left(90) |
from gturtle import * makeTurtle() for i in range(50, 150, 8): forward(i) left(90) |
Anstelle einer for-Schleife kann man immer auch die while-Schleife einsetzen. Diese benötigt zwar zwei Programmzeilen mehr, kann aber auch dann verwendet werden, wenn step eine Dezimalzahl ist. while-Schleife ist also die allgemeinste Schleife. Eine for-Schleife kann erwendet werden, wenn start, stop und step ganze Zahlen sind. Eine repeat-Schleife entspricht einer einfachsten for-Schleife (start = 0, step=1). |
Die fSchleifen lassen sich verschachteln. Eine korrekte Einrückung der Anweisungen in der inneren Schleife ist wichtig. Beispiel 3: In der inneren Schleife wird jeweils ein Quadrat gezeichnet. Die äussere Schleife bewirkt, dass 10 solche Quadrate gezeichnet werden, wobei nach jedem Quadrat eine Drehung um 36 Grad erfolgt.
|
Beispiel 4: Die Turtle wird im Turtlefenster positioniert und zeichnet an jeder Position einen Stern. Die Positionierung erfolgt mit einer for-Schleife mit dem Startwert -200, Endwert 200 und Wertänderung 70.
|
Erklärungen zum Programmcode:
Das Turtle-Fenster ist 800x600 Pixel gross. Unter Einstellungen/Bibliotheken kann man die Grösse des Turtlefensters ändern. Mit 600x600 wird das Turtlefenster quadratisch. Falls keine Positionierung vorgenommen wird, beginnt die Turtle in der Mitte des Fensters an der Position (0, 0) zu zeichnen. Mit dem Befehl setPos(x, y) kann die Turtle an eine beliebige Position im Fenster versetzt werden, wobei die x- und y-Koordinaten die Werten zwischen -300 und 300 annehmen können.
|
hideTurtle(): Mit diesem Befeht wird die Turtle nicht mehr sichtbar. Da die Turtle-Animation wegfällt, erfolg das Zeichnen wesentlich schneller |
Aufgaben: Serie 3 |
1) |
a) Zeichne einen 5-er Stern, in dem du in einer for-Schleife die Befehle forward(200), right(144) fünf mal wiederholst. b) Zeichne eine zweite Figur, indem du in einer for-Schleife die Befehle forward(200), right(143) mehrmals wiederholst. |
2) | Verwende verschachtelte repeat- oder for-Schleifen, um folgende Figuren zu zeichnen: |
3) |
4) |
Die Turtle bewegt sich jeweils vorwärts, zeichnet einen Punkt und dann bewegt sie sich zurück zum Ausgangspunkt. Bevor sie die nächste Strecke zeichnet, dreht sie sich um einen kleinen Winkel nach rechts. Zeichne eine solche Figur mit einer for-Schleife mit Startwert 20, Endwert 300 und Wertänderung 5. Wenn du vor dem Beginn der for-Schleife den Befehl hideTurtle() wählst, erfolgt das Zeichnen schneller. |
5) | Zeichne mit dem Befehl dot(40) gefüllte Kreise. Positioniere die Kreise mit Hilfe von Koordinaten, ähnlich wie im Beispiel 4. |
6) | Die nebenstehende Figur entsteht, indem du mit dem Befehl openDot(d) nicht gefüllte Kreise mit dem Durchmesser d zeichnest und nach jedem gezeichneten Kreis die Turtle 5 schritte vorwärts bewegst. Um die Turtle spurlos zu bewegen kannst du Befehle PenUp() und PenDown() verwenden. |
7) | a) Verwende verschachtelte for-Schleifen for x in range(-200, 200, 20): for y in range (-200, 200, 20): um die neben stehende Figur zu zeichnen. b) Löse die Aufgabe mit Hilfe von zwei verschachtelten repeat-Schleifen. |
Anmerkung |
Die Funktion range() wird in Python nicht nur in den for-Schleifen verwendet. range() liefert eine Folge von Zahlen. Im einfachsten Fall hat range() nur einen einzigen Parameter (Stop-Wert) und liefert eine Folge von natürlichen Zahlen, die mit 0 beginnt und bei einem Wert kleiner als der Stop-Wert endet.
range() mit zwei Parametern range(Startwert, Stopwert) liefert eine Folge von Zahlen, die mit Startwert beginnt und mit Stopwert-1 endet.
range(3, 7) liefert z. B. die Zahlen 3, 4, 5, 6.
Bei range() mit drei Parametern ist der erste Parameter der Start-Wert, der zweite der Stop-Wert, der dritte die Wertveränderung vom einem Element zum nächsten.
range(2, 20, 3) liefert die Zahlen 2, 5, 8, 11, 14, 17.