8. for-Struktur

 

 

DU LERNST HIER...

 

wie du die for-Schleifen als Alternative zu den while-Schleifen oder repeat-Schleifen einsetzten kannst.

 

 

MUSTERBEISPIELE

 

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.

Programm:

# 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)
► In Zwischenablage kopieren
 




Beispiel 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(60): rectangle(i, i)
  
for
i in range(20,40): rectangle(i, i)
  
for
i in range(10,40,3): rectangle(i, i)

 

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.

Programm:

# 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)
► In Zwischenablage kopieren
 

if (x + y) % 2 == 0 überprüft,  ob die Summe des Zeilen- und Spaltenindex eine gerade Zahl ist. Wie du leicht siehst, 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 kannst du mit zwei verschachtelten for-Schleifen erzeugen.

Programm:

# Gp8d.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)
► In Zwischenablage kopieren
 

 

 

MERKE DIR...

 

Die Funktion range() in der for-Schleife kann 1, 2 oder 3 Parameter (start, stop, step) haben. Falls nur ein Parameter vorhanden ist, liefert range(n) die Zahlen 0, 1, 2, ...bis n-1, die Befehle in der Schleife werden also n mal wiederholt (gleich wie bei repeat n:)

Anstelle einer for-Schleife kannst du 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.

 

 

ZUM SELBST LÖSEN

 

1)


Zeichne mit einer for-Schleife 10 Quadrate.





 


a) In einer Reihe

b) In einer Diagonale

 

2)


Experimentiere mit Linienscharen und erstelle einige schöne Grafiken.





 






 

3)


Gehe mit verschachtelten for-Schleifen alle Felder einer 8x8 Matrix durch und färbe sie gemäss nebenstehender Vorlage.