TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
variablen

7. WHILE & FOR

 

 

DU LERNST HIER...

 

wie du die Wiederholstrukturen mit den Schlüsselwörter 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 auf repeat verzichten, was zu empfehlen ist, da repeat nicht zu den Python-Schlüsselwörtern gehört.  

 

 

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.

In der dir bekannten Funktion square(s) zum Zeichnen eines Quadrats ersetzt du das repeat durch eine while-Schleife, indem du einen Variable i einführst.

def square(s):
    repeat 4:
        forward(s)
        right(90)
 
def square(s):
    i = 0
    while i < 4:
        forward(s)
        right(90)
        i += 1

Du musst i zuerst auf 0 initialisieren und testest dann in der Schleifenbedingung, ob i kleiner als 4 ist. Falls dies zutrifft, durchläuft du den Schleifenkörper und erhöhst die Variable um 1. Da i in jedem Schleifendurchlauf um 1 erhöht wird, nennt man i auch Schleifenzähler. Die Schleifenbedingung heisst auch Laufbedingung, da die Schleife so lange durchlaufen wird, solange sie wahr ist.

In deinem Beispiel zeichnet die Schlange in einer while-Schleife immer grössere Quadrate. Die Quadratseite s ist zu Beginn 1 und wird nach jedem Schleifendurchgang um 2 vergrössert, so lange s kleiner als 8 ist.

 

 

Programm:

from oxosnake import *

def square(s):    
    repeat 4:
        forward(s)
        right(90)

makeSnake(speed = 90, pos = (0, 7))
s = 1
while s < 8: 
    square(s)
    s = s + 2
► In Zwischenablage kopieren


In der Robotik werden häufig sogenannte "endlose while-Schleifen" verwendet. Diese werden mit while True: eingeleitet. Da True immer wahr ist, wiederholen sich die Schleifendurchgänge endlos. Bisher hast du das gleiche mit repeat: erreicht.

Mit dem folgende Programm zeichnet die Schlange endlos ein 8-Eck.

 


Programm:

from oxosnake import *

makeSnake(speed = 90)
while True:
    forward(2)
    right(45)
► In Zwischenablage kopieren


Du kannst auch mehrere while-Schleifen ineinander verschachteln. In der inneren Schleife bewegt sich die Schlange wellenartig von ober nach unter, so lange die y-Koordinate kleiner als 11 ist, bis also auch der Schwanz verschwunden ist. Die äussere Schleife wird endlos wiederholt. Der Startpunkt auf der obersten Zeile wird zufällig gewählt.

Achte auf die korrekte Einrückung!

 


Programm:

from oxosnake import *
from random import randint

makeSnake(heading = 135, speed = 90)
while True:
    x = randint(1, 6)   
    setPos(x, 0)
    while getY() < 11:
        forward()
        right(90)
        forward()
        left(90)   
► In Zwischenablage kopieren


FOR-SCHLEIFE

Oft benötigst du in einer Wiederholschleife eine ganzzahlige Variable, die bei jedem Durchgang um eins grösser wird. Du kannst dies zwar mit einer while-Schleife lösen, einfacher geht es aber mit einer for-Schleife, bei der der Schleifenzähler automatisch verändert wird.

Die Funktion range(n) liefert dir alle Zahlen von 0 bis n-1 und mit der for-Schleife werden alle diese Werte durchlaufen.

for i in range(n): durchläuft Zahlen i von 0 bis n-1

Da range(a, b) alle Zahlen von a bis b-1 liefert, kannst du mit

for i in range(a, b): die Zahlen i von a bis b-1durchlaufen

Beachte, dass der letzte Wert b - 1 und nicht etwa b ist. Nach der Zeile mit for muss ein Doppelpunkt stehen und der Schleifenkörper ist wie bei einer while-Schleife eingerückt.

Im Beispiel zeichnet die Schlage reihenweise Zeilen, die immer um 1 länger werden. Dazu durchläuft die Zeilennummer i die Werte von 0 bis 7, also die Werte in range(8). Im Schleifenkörper verwendest du die Variable i, um die Anzahl Vorwärtsschritte festzulegen.

 



Programm:

from oxosnake import *

makeSnake(speed = 90, pos = (0, 0), heading = 90)
hide()
penDown()
for i in range(8): 
    setPos(0, i)
    forward(i)    
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Um bestimmte Programmblöcke mehrmals auszuführen, kannst du im TigerJython die repeat-, while- oder for-Schleife verwenden. Die while-Schleife ist sehr allgemein und immer einsetzbar

 

 

ZUM SELBST LÖSEN

 

 

1.

Die Schlange startet an der Position (3, 3) und bewegt sich mit heading = 0 drei Schritte vorwärts. Dann springt sie wieder an die Ausgangsposition, vergrössert heading um 45 und bewegt sich wieder drei Schritte vorwärts, so lange heading kleiner als 360 ist. Verwende eine while-Schleife mit einer geeigneten Laufbedingung.

 

 


2.

Verwende eine for-Schleife, um das nebenstehende Bild zu erzeugen.

 


3.

Erzeuge mit makeSnake(pos = (0, 7), size = 2) eine kleine Schlange an der Position (0, 0). Die Schlange bewegt sich auf dem äussersten Quadrat. Jedes Mal, wenn sie eine Quadratseite zurückgelegt hat, wird ihr Schwanz um 1 Teil länger.

Verwende den Befehl growTail() und lasse die Schlange so lange laufen, bis ihr Schwanz die Länge 20 hat.

 


 

Fachliche Hinweise:

Das Schlüsselwort repeat gehört nicht standardmässig zur Syntax von Python, sondern wurde speziell in TigerJython eingebaut, da es keine Variablen braucht und daher für Programmiereinsteiger einfacher ist.
In Python verwendet man anstelle repeat n: for i in range(n):