Die while-else-Klausel in Python
Die Syntax der while-else-Klausel entspricht der Syntax der if-else-Klausel einer if-Anweisung.
- Aufbau einer while-Anweisung
Anweisung .------------------------------------------.
.-----. .-----------. .-. .------------. | .----. .-. .------------. v
--->( while )--->| Ausdruck |--->( : )--->| Suite |---'--->( else )--->( : )--->| Suite |---'--->
'-----' '-----------' '-' '------------' '----' '-' '------------'
Und auch die Semantik entspricht der Semantik einer if-Anweisung: Genau dann, wenn der bool-Wert des Ausdrucks hinter »while« bei einer Auswertung das Objekt ›False‹ ergibt, wird die Suite der else-Klausel ausgeführt und die while-Anweisung danach verlassen.
Programmbeispiele
Programmbeispiel
main.py
x = 0
while x < 0:
print( "0 ist negativ." )else:
print( "0 ist nicht negativ" )print( "Ende." )
- Protokoll
0 ist nicht negativ
Ende.
In diesem Programmbeispiel ergibt die erste Auswertung von »x < 0« das Objekt ›False‹. Daher wird anschließend die Suite der else-Klausel ausgeführt, und die Ausgabe von »0 ist nicht negativ« erfolgt.
Programmbeispiel
main.py
x = -1
while x < 0:
print( "-1 ist negativ." )
breakelse:
print( "-1 ist nicht negativ" )print( "Ende." )
- Protokoll
-1 ist negativ.
Ende.
In diesem Programmbeispiel ergibt die erste Auswertung von »x < 0« das Objekt ›True‹. Daher wird anschließend die Suite der while-Schleife ausgeführt, und die Ausgabe von »-1 ist negativ« erfolgt.
Programmbeispiel
main.py
x = 2
while x >= 0:
print( x )
x -= 1else:
print( "Die while-Bedingung ist falsch." )print( "Ende." )
- Protokoll
2
1
0
Die while-Bedingung ist falsch.
Ende.
Hier wird die Schleife zunächst mehrfach durchlaufen, was zur Ausgabe einiger Ziffern führt. Dann wird die Schleifenbedingung »x >= 0« gleich ›False‹, so daß die Suite der else-Klause ausgeführt wird.
Programmbeispiel
main.py
x = 2
while x >= 0:
print( x )
x -= 1
if x == -1: breakelse:
print( "Die while-Bedingung ist falsch." )print( "Ende." )
- Protokoll
2
1
0
Ende.
Hier wird die Schleife zunächst mehrfach durchlaufen und dann durch »break« verlassen. Die Schleifenbedingung wurde also nie ›False‹, weswegen die else-Klausel auch nicht ausgeführt wurde.
Suchschleifen
In manchen Schleifen wird nach etwas gesucht. Wenn es gefunden wurde, muß die Suche nicht fortgesetzt werden, und die Schleife wird mit »break« verlassen. Wenn die Schleife nicht verlassen wurde, sondern normal ausläuft, dann kann man davon ausgehen, daß nichts gefunden wurde. Daher bietet es sich an, Code, der nach dem Finden ausgeführt werden soll, direkt vor »break;« zu schreiben, während Code der ausgeführt werden soll, wenn nichts gefunden wurde, hinter das »else« der while-Anweisung geschrieben werden kann.
Programmbeispiele
Das folgende Programmbeispiel sucht nach einer Zahl, deren Quadrat gleich «25» ist. Im durchsuchten Bereich von «0» bis «4» wird aber kein solcher Wert gefunden. Entsprechend ergibt sich unter Verwendung der else-Klausel die Ausgabe »nichts gefunden«.
main.py
x = 0
while x < 5:
if x * x == 25:
print( "Wert gefunden." )
breakx += 1
else:
print( "Nichts gefunden." )print( "Ende." )
- Protokoll
Nichts gefunden.
Ende.
Das folgende Programmbeispiel sucht nach einer Zahl, deren Quadrat gleich »«25» ist. Im durchsuchten Bereich von «0» bis «9» wird auch ein solcher Wert gefunden. Entsprechend ergibt sich die Ausgabe »Wert gefunden«.
main.py
x = 0
while x < 10:
if x * x == 25:
print( "Wert gefunden." )
breakx += 1
else:
print( "nichts gefunden." )print( "Ende." )
- Protokoll
Wert gefunden.
Ende.
Übungsfragen
? Übungsfrage
Was gibt das folgende Programm aus?
main.py
while print( 'a' ):
print( 'b' )
else:
print( 'c' )
print( 'd' )
? Übungsfrage
Was gibt das folgende Programm aus?
main.py
while True:
print( 'b' )
break
else: # nobreak
print( 'c' )
print( 'd' )