HomeTurtlegrafikGPanelRobotikGameGrid WebTigerPython
 Python - Online
Deutsch   English   

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
 


Beispiel 5: Farbverlauf
Der Farbverlauf rot zu blau wird mit Hilfe von Linien der Dicke 2 Pixel gezeichnet. Die erste Linie ist rot, nach jeder gezeichneten Linie wird die rote Fabkomponente verkleinert und die blaue vergrössert. In einer zweiten for-Schleife werden immer kleinere gefüllte Kreise gezeichnet, wobei bei jedem nächsten Kreis der grüne Farbanteil vergrösser wird. Die Grafik entsteht in einem Fenster mit der Grösse 500x500, mit einem Koordinatensystem mit x und y von 0 bis 255.

Programm: 
#Gp8e.py
from gpanel import *

makeGPanel(Size(500, 500))
window(0, 255, 0, 255)
lineWidth(2)
for i in range(255):
    setColor(255-i, 0, i)
    line(i, 0, i, 255)

move(128, 128)
for i in range(60):
    setColor(15, 15 + 4*i, 15)
    fillCircle(60-i
► 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.

 
 

4)


Experimentiere mit Farbverlauf und erstelle folgende Grafiken:

 
a)
b)

c)