Die while
-Anweisung ermöglicht es Ihnen, einen
Anweisungsblock wiederholt auszuführen, solange eine zugehörige Bedingung
erfüllt ist. Eine while
-Anweisung ist ein Beispiel für eine
so genannte Schleifen-Anweisung.
Die while
-Anweisung kann eine optionale
else
-Klausel haben.
Beispiel 6.2. Gebrauch der while-Anweisung (while.py)
#!/usr/bin/python zahl = 23 weiter = True while weiter: geraten = int(raw_input('Geben Sie eine ganze Zahl ein: ')) if zahl == geraten: print 'Glueckwunsch, Sie haben es erraten.' weiter = False # das fuehrt zum Ende der while-Schleife elif geraten < zahl: print 'Nein, die Zahl ist etwas hoeher.' else: print 'Nein, die Zahl ist etwas niedriger.' else: print 'Die while-Schleife wurde beendet.' # Hier koennte man noch weitere Dinge tun. print 'Fertig.'
$ python while.py Geben Sie eine ganze Zahl ein: 50 Nein, die Zahl ist etwas niedriger. Geben Sie eine ganze Zahl ein: 22 Nein, die Zahl ist etwas hoeher. Geben Sie eine ganze Zahl ein: 23 Glueckwunsch, Sie haben es erraten. Die while-Schleife wurde beendet. Fertig.
In diesem Programm spielen wir immer noch das Ratespiel, aber
mit der Verbesserung, dass der Benutzer nun so lange weiter raten kann,
bis er richtig geraten hat - man muss das Programm nicht mehr für jeden
Rateversuch neu starten, wie wir es zuvor getan haben. Hier zeigt sich
sehr gut der Nutzen einer while
-Anweisung.
Wir verschieben die raw_input
- und
if
-Anweisung in die while
-Schleife
und setzen die Variable weiter
vor dem
Betreten der while-Schleife auf True
(logisch wahr).
In der Schleife wird zuerst geprüft, ob die Variable weiter
immer noch als logischer Wert wahr ist, und wenn dies der Fall ist, dann
wird der zugehörige while-Block ausgeführt.
Nachdem dieser Block ausgeführt wurde, wird die Bedingung erneut geprüft,
die in diesem Fall aus der Variablen weiter
besteht.
Wenn Sie weiterhin logisch wahr ist, dann wird der while-Block wieder ausgeführt,
ansonsten wird der optionale else-Block ausgeführt und danach die nächste Anweisung.
Der else
-Block wird ausgeführt, wenn die
while
-Bedingung als logischer Wert falsch
(False
) wird - dies kann sogar bereits beim ersten
Mal passieren, wenn die Bedingung überprüft wird. Wenn eine
while
-Schleife eine else
-Klausel hat,
dann wird diese stets ausgeführt, es sei denn, dass die Schleife eine
break
-Anweisung besitzt (darauf kommen wir in diesem
Kapitel noch zu sprechen) oder dass die while
-Schleife
endlos läuft, ohne jemals abzubrechen.
Die Werte True
und False
werden
Wahrheitswerte genannt. Es handelt sich um den
so genannten logischen oder booleschen Datentyp, und Sie können sich diese Werte
als gleichbedeutend mit den Werten 1
bzw. 0
denken, und in dem Programm auch 1
statt True
bzw. 0
statt False
schreiben, aber dann würde
nicht ganz deutlich, dass die Variable weiter
eigentlich einen
Wahrheitswert repräsentiert, und nicht eine Zahl.
Solange keine break
-Anweisung im Spiel ist, ist der
else
-Block eigentlich überflüssig, denn man
kann in dem Fall die darin befindlichen Anweisungen einfach im gleichen Block,
in dem sich die while
-Anweisung befindet, hinter die
while
-Schleife schreiben um das gleiche Ergebnis zu erzielen.
Denken Sie daran, dass man unter Python bei einer while
-Schleife
auch eine else
-Klausel zur Verfügung hat.