while&for

10. WHILE & FOR

 

 

DU LERNST HIER...

 

wie du Wiederholstrukturen mit den Schlüsselwörtern while und for verwendest. Die while-Schleife ist eine der wichtigsten Programmstrukturen überhaupt. Sie kann allgemein für jede Art von Wiederholungen verwendet werden und kommt in praktisch allen Programmiersprachen vor. Mit repeat konntest du bisher einfache Wiederholungen programmieren, ohne Variablen zu verwenden. Da du jetzt den Variablenbegriff kennst, kannst du jetzt auch die while- und for-Struktur verwenden.

 

 

MUSTERBEISPIELE ZUR WHILE-SCHLEIFE

 

Eine while-Schleife wird mit dem Schlüsselwort while eingeleitet, gefolgt von einer Bedingung und einem Doppelpunkt. So lange die Bedingung erfüllt ist, werden die Befehle im nachfolgenden Programmblock wiederholt. In der Bedingung werden in der Regel die Vergleichsoperatoren >, >=, <, <=, ==, != verwendet. Die Anweisungen im while-Block müssen eingerückt sein.

Die Wiederholstruktur  kann umgangssprachlich so formuliert werden: "Solange die folgende Bedingung erfüllt ist, führe den nachfolgenden Programmblock aus.."

While-Schleifen sind dann interessant, wenn die Anzahl Durchläufe nicht zum vornherein feststeht. In deinem Beispiel sollte die längste Strecke der Spirale kleiner als 200 sein.

Du beginnst du mit der Strecke a = 5. Solange a < 200 vergrösserst du nach jeder Drehung die Strecke um 2.

 

 

Programm:    

from gturtle import *

makeTurtle()
a = 5
while a < 200:
    forward(a) 
    right(90)
    a = a + 2
► In Zwischenablage kopieren


 

Endlose while-Schleife
Die Turtle bewegt sich "endlos" auf dem Kreis.
Mit den Schlüsselwörtern while True: wird eine sogenannte endlose while-Schleife eingeleitet.

Die Befehle im Schleifenblock werden so lange wiederholt, bis du das Programm mit Klick auf den roten Stop-Button beendest.

 

Programm:    

from gturtle import *

makeTurtle()

while True:
    forward(3)
    right(3)
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Die Bedingung a < 200 nennt man auch Laufbedingung.

Mit while True wird eine endlose Schleife eingeleitet, bei der die Befehle im Schleifenblock solange wiederholt werden, bis Stop gedrückt wird.

 

 

ZUM SELBST LÖSEN


  1.

Die Turtle zeichnet regelmässige Dreiecke, wobei das erste Dreieck die Seitenlänge s = 300 hat, das zweite 290, das dritte 280 usw. Nach jedem Dreieck folgt eine Drehung um 10° nach rechts. Sie beendet das Zeichnen, wenn die Seitenlänge kleiner als 10 ist.

 

  2.

Die Turtle bewegt sich in kleinen Schritten endlos im Bereich x = -250 bis 250 hin und her.

Verwende eine Bedingung mit der Funktion getX(), welche die aktuelle x-Koordinate zurückgibt.

 

 

   
 

 

MUSTERBEISPIELE ZUR FOR-SCHLEIFE

  Bei der for-Schleife wird der Schleifenzähler automatisch verändert.

Die Turtle bewegt sich um eine Strecke s vorwärts und dreht sich um 70° nach rechts. s wird nach jedem Durchgang um 1 erhöht. Der Schleifenzähler wird verwendet um jeweils die Streckenlänge festzulegen.

Mit for s in range(100): werden die Zahlen 0, 1, 2,.., 99 durchgelaufen, der Schleifenblock wird also 100 mal wiederholt.

 

Programm:    

from gturtle import *

makeTurtle()
hideTurtle()

for s in range(100):
    forward(s)
    right(70)
► In Zwischenablage kopieren

Die nächste Figur kannst du auch mit zwei repeat-Schleifen zeichnen. Da du in der inneren Schleife i auch für die Berechnung der Strichlänge brauchst, ist die for-Schleife vorteilhafter. Achte auf die korrekte Einrückung!

Programm:    

from gturtle import *

makeTurtle()
setPenColor("blue")

repeat 5:
    for i in range(12):
        forward(12 * i)
        left(144)
hideTurtle()
► In Zwischenablage kopieren
 

Die allgemeine Form einer for-Schleife hat 3 Parameter :
for i in range(start, stop, step):
Der erste Parameter gibt den Startwert der Variablen i an. So lange i kleiner ist als stop, wird die Schleife wiederholt, wobei i bei jedem Durchgang um step vergrössert wird. Hier verwendest du eine for-Schleife, um die Koordinaten der Punkte festzulegen.

Programm:    

from gturtle import *

makeTurtle()

for x in range(-240, 250 , 20):    
    setPos(x, 0)
    dot(15)
► In Zwischenablage kopieren
 

 

 

MERKE DIR...

 

Mit for i in range(n): werden die Zahlen 0, 1, 2,..(n-1) durchgelaufen. Der Parameter n in range(n) gibt die Anzahl der Wiederholungen an.

Eine for-Schleife kann auch 2 oder 3 Parameter haben.
for i in range(5, 20):
durchläuft die Zahlen 5, 6, 7, 8.....19. (step = 1).
for i in range(5, 20, 3): durchläuft die Zahlen 5, 8, 11, 14, 17.

 

 

ZUM SELBST LÖSEN


  3.

Die nebenstehende Figur erzeugst du, indem du mit einer for-Schleife 20 Sechsecke mit immer grösseren Seitenlängen zeichnest.

def hexagon(i):
    repeat 6:
        forward(i)
        right(60)
 
  4.

Die Turtle bewegt sich jeweils vorwärts zeichnet einen gefüllten Kreis (dot), dann rückwärts zum Ausgangspunkt und dreht um 10° nach rechts. Bei jeder Wiederholing zeichnet sie eine längere Strecke.

Löse die Aufgabe mit einer for-Schleife und verwende für die Streckenlänge ein Vielfaches des Schleifenzählers i.

 

  5.

Erzeuge die nebenstehende Figur mit einer for-Schleife. Die Turtle beginnt mit der Streckenlänge s vorwärts und dreht dann um 89° nach rechts. Es soll von 0 bis 150 laufen.

 

 

 

ZUSATZSTOFF: INEINANDER GESCHACHTELTE FOR-SCHLEIFEN

 


Die for-Schleifen lassen sich einfach "verschachteln". In diesem Beispiel wird für jede Koordinate x die for-Schleife mit y Koordinaten durchgelaufen. Da der step in beiden Schleifen 20 ist, wird x und y bei jedem Schleifenduchlauf um 20 vergrössert. Beim stop wählst du 201 damit auch die Koordinate x = 200 bzw. y = 200 berücksichtigt werden..

 


Programm:    

from gturtle import *

makeTurtle()

for x in range(-200, 201, 20):
    for y in range(-200, 201, 20):   
        if x + y < 0:
            setPenColor("red")
        else:
            setPenColor("green")
        setPos(x, y)
        dot(10) 
► In Zwischenablage kopieren

 


Mit diesem Verfahren zeichnest du ein Schachbrett. Du siehst leicht ein, dass du immer dann ein gefülltes Quadrat zeichnen musst, wenn die Summe des Zeilen- und Spaltenindex eine gerade Zahl ist.

Da jedes Feld die Grösse 30x30 hat, wird das Feld (i, k) an der Position x = 30 * i, y = 30 * k gezeichnet.

 

Programm:    

from gturtle import *

def cell(x, y):
    setPos(x, y)
    startPath()
    repeat 4:
        forward(30)
        left(90)
    fillPath()    

makeTurtle()
setFillColor("blue")
hideTurtle()
for i in range(8):
    for k in range(8):
        if (i + k) % 2 == 0:
            cell(30 * i, 30 * k)
► In Zwischenablage kopieren