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. 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 < (kleiner), <= (kleiner-gleich), > (grösser) >= (grösser-gleich), == (gleich), != (verschieden) verwendet. Eine while-Schleife benötigt in der Regel eine Variable, der zu Beginn ein Startwert und nach jedem Schleifendurchgang eine Wertänderung zugewiesen wird.
Beispiel 1: Zeichnen einer Punktreihe
In der Diagonale des Grafikfensters sollen kleine rote Kreise erscheinen. Der erste Kreis wird an der Position (1, 1), der zweite bei (2, 2) usw. gezeichnet. In diesem Beispiel verwendet man eine while-Schleife mit einen Schleifenzähler i, der auch die Position der Kreise festlegt Solange i kleiner als 20 ist, werden die Befehle im eingerückten Block wiederholt, wobei i jeweils um 1 erhöht wird.
# Gp6a.py from gpanel import * makeGPanel(0, 20, 0, 20) setColor("red") i = 1 while i < 20: pos(i, i) fillCircle(0.5) i = i + 1 |
Erklärungen zum Programmcode:
i = 1 Startwert | |
while i < 20: Schleifenbedingung (Doppelpunkt ist wichtig) | |
i = i + 1: Erhöhung des Schleifenzählers um 1 (Inkrementierung). Kann kürzer geschrieben werden: i += 1 |
Beispiel 2: Zeichnen einer Linienschar
Die Anfangs- und Endpunkte der Linien werden mit Hilfe der Schleifenvariablen festgelegt. Diese durchläuft die Werte von 0 bis 40. Damit man das Zeichnen besser beobachten kann, wird nach jeder Linie eine kurze Pause eingebaut.
# Gp6b.py from gpanel import * makeGPanel(0, 40, 0, 40) i = 0 while i <= 40: line(i, 0, 40, i) delay(100) i = i + 1 |
Erklärungen zum Programmcode:
while i <= 40: Damit die letzte Linie gezeichnet wird, muss die Bedingung i <= 40 oder i < 41 sein | |
delay(100) Das Programm wird für 100 Millisekunden angehalten |
Beispiel 3: Eine Kreisschar zeichnen (gefüllte Kreise mit schwarzem Rand)
Der erste Kreis hat den Radius 20 und bei jedem nächsten Kreis ist der Radius um 1 kleiner.
# Gp6c.py from gpanel import * def blueCircle(r): setColor("cyan") fillCircle(i) setColor("black") circle(r) makeGPanel(-20, 20, 0, 40) i = 20 while i > 0: pos(0, i) blueCircle(i) i = i - 1 |
Erklärungen zum Programmcode:
def blueCircle(r): Definiert eine Funktion, die einen gefüllten Kreis mit einem schwarzen Rand zeichnet |
Beispiel 4: Verwendung von verschachtelten while-Schleifen
Die Variable x in der äusseren Schleife nimmt die Werte von 1 bis 19 an. Bei jedem neuen x läuft die innere Schleife über alle y (die Säule auf der Position x wird aufgefüllt). Dabei muss man auf die korrekte Einrückung der beiden Programmblocks achten.
# Gp6d.py from gpanel import * makeGPanel(0, 20, 0, 20) setColor("red") x = 1 while x < 20: y = 1 while y < x: pos(x, y) fillCircle(0.5) y = y + 1 x = x + 1 |
Aufgaben: Serie 6 |
1) |
|
2) |
|
3) |
|