237
»while«-Schleifen
Um das festzustellen, müssen wir unsere Funktion
zufallsweg()
so um-
programmieren, dass die Turtle stehen bleibt, sobald sie 200 Einheiten vom
Ausgangspunkt (0,0) entfernt ist. Dazu benötigt sie aber für jeden Weg eine
andere Anzahl von Schritten. Die Schleife muss abgebrochen werden, wenn
die Turtle weit genug weg ist, also wenn eine bestimmte Bedingung einge-
treten ist. Das geht mit einer einfachen
for
-Schleife nicht gut. Für solche
Zwecke gibt es in Python eine zweite Art von Schleifen. Um diese geht es
jetzt, bevor wir mit dem
randomwalk
-Skript weiter machen:
»while«-Schleifen
Immer wenn wir nicht wissen, wie oft die Schleife durchlaufen werden soll,
brauchen wir die Möglichkeit, mit einer Bedingung zu überprüfen, ob ein
weiterer Schleifendurchgang erfolgen soll.
In Python gibt es dafür die
while
-Schleife. Um sie kennen zu lernen, wer-
fen wir wieder den IPI an:
>
Mach mit!
>>> zaehler = 0
>>> while zaehler < 5:
print(zaehler, end=
" "
)
zaehler = zaehler + 1
0 1 2 3 4
Die
while
-Schleife hat eine Form, die du schon kennst: Die erste Zeile ist
ein Anweisungskopf, der mit einem Doppelpunkt
:
endet, dann folgt ein
eingerückter Anweisungskörper. Die Ausführung der
while
-Schleife erfolgt
so: Zunächst wird geprüft, ob die Bedingung, die nach dem reservierten
Wort
while
steht, erfüllt ist. Ist das der Fall, dann wird der Schleifenkörper
ausgeführt. Danach wird die Bedingung neuerlich geprüft, der Schleifen-
körper neuerlich ausgeführt usw.
Erst wenn die Bedingung nicht erfüllt ist, wird die Schleife abgebrochen.
Beachte, dass der Schleifenkörper gar nicht ausgeführt wird, wenn schon
bei der ersten Prüfung die Bedingung nicht erfüllt ist!
238
Der Zufall und bedingte Schleifen
Kapitel
9
Gib nun im IPI eine
wh
ile
-Schleife ein, die nur Folgendes ausgibt:
0 1 2
Sollte dir das auf Anhieb gelungen sein, dann bist du ein ungewöhnlich
aufmerksamer Leser. Auf welchen Wert verweist bei dir jetzt
zaehler
?
>>> zaehler
3
Beachte: Wenn eine Bedingung wie
zaehler < 5
geprüft wird, muss
zaehler
bereits einen Wert haben, sonst erfolgt ein
NameError
.
Daher hatten wir bei obiger Übung zunächst die Anweisung
zaehler=0
eingegeben. In der folgenden Schleife wurde bei jedem Durchlauf
zaehler
um 1 erhöht, bis der Wert von
zaehler
schließlich 5 war. Da
5 < 5
eine
falsche Aussage ist, wurde an dieser Stelle die Schleife abgebrochen.
Schreibst du danach im IPI:
>>> while zaehler < 3:
print(zaehler, end=
" ")
zaehler = zaehler + 1
>>>
so bleibt die Ausgabe aus. Denn
zaehler
hat noch immer den Wert
5
und
ich erwähnte schon, dass der Schleifenkörper nicht ausgeführt wird, wenn
die Bedingung schon bei der ersten Prüfung nicht erfüllt ist.
Wenn du eine
while
-Schleife nochmals ausführen willst, dann musst du
vorher
wieder passende Anfangsbedingungen herstellen. Hier geht das so:
>>> zaehler = 0
>>> while zaehler < 3:
print(zaehler, end=
" ")
zaehler = zaehler + 1
0 1 2
>>>
>
Überlege
, bevor du die folgende Eingabe machst, was hier das Ergeb-
nis sein wird:
239
»while«-Schleifen
>>> zaehler = 0
>>> while zaehler < 3:
zaehler = zaehler + 1
print(zaehler, end=
" ")
? ? ?
Auch hier hat der Name
zaehler
bei Beginn des letzten Schleifendurch-
laufs den Wert 2. Doch wird der Wert geändert, nämlich um 1 erhöht,
be-
vor
die
print()
-Funktion aufgerufen wird. Und so kommt es zur Ausgabe
1 2 3
.
Der Name
zaehler
spielt in dieser
while
-Schleife eine besondere Rolle,
weil er in der Schleifenbedingung vorkommt. Man nennt ihn deshalb auch
oft die Schleifenvariable. Es ist
entscheidend
, dass der Wert dieser Schlei-
fenvariablen bei der Ausführung des Schleifenkörpers geändert wird, ob-
wohl das nicht unbedingt bei jedem Schleifendurchgang der Fall sein muss.
Andernfalls kann die Bedingung im Schleifenkopf niemals falsch werden
und du hast es mit etwas sehr Unangenehmem zu tun: mit einer
Endlos-
schleife
.
Endlosschleifen bricht man in der IDLE mit
(Strg)
+
(C)
ab!
>>> zaehler = 0
>>> while zaehler < 3:
print(zaehler, end=
" ")
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...
...
... 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Traceback (most recent call last):
File "<pyshell#3>", line 2, in <module>
...
raise KeyboardInterrupt
KeyboardInterrupt
>>>
Noch häufiger ergeben sich Endlosschleifen aus dem Fehler, dass die
Schleifenvariable »in die falsche Richtung« abgeändert wird:

Get Python für Kids now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.