if-Anweisungen können else-Blöcke haben, die ausgeführt werden, wenn die Bedingung der if-Anweisung nicht erfüllt ist. Ähnlich dazu können auch while-Schleifen else-Blöcke haben, die ausgeführt werden, wenn die Bedingung der while-Schleife nicht mehr zutrifft.
name = input()
if name != 'Alice':
print('I don\'t know you')
else:
print('Hi, Alice!')
print('End!')
name = input()
while name != 'Alice':
print('I don\'t know you')
name = input()
else:
print('Hi, Alice!')
print('End!')
Das Programm mit der while-Schleife fordert den Benutzer so lange auf, seinen Namen einzugeben, bis er 'Alice' eingibt. Wenn der Name schließlich 'Alice' ist, trifft die Bedingung name != 'Alice' nicht mehr zu, und das Programm betritt den else-Block, wo es Hi, Alice! ausgibt.
Könnten wir das nicht einfach außerhalb der while-Schleife direkt vor print('End!') machen?
In diesem Beispiel: Ja! Aber while ... else ist besonders nützlich, wenn wir mit break-Anweisungen arbeiten. Wenn wir innerhalb der while-Schleife einen break ausführen, wird der else-Block nicht ausgeführt, da die Bedingung beim Eintritt in die Schleife noch erfüllt war. Es gab sogar Überlegungen, dies statt while ... else lieber while ... nobreak zu nennen.
Stell dir vor, wir möchten prüfen, ob eine Zahl die Ziffer 5 enthält:
n = 123409087542108
while n != 0:
if n % 10 == 5:
print('The number contains a digit 5!')
break
n //= 10
else:
print('The number does not have a digit 5')
Wann immer die while-Schleife mit break verlassen wird, wird der else-Block nicht ausgeführt. Das Programm gibt die zweite Meldung also nicht aus, wenn es bereits eine Ziffer 5 gefunden hat.
Wenn die while-Schleife jedoch bis zum Ende läuft und die Bedingung nicht mehr erfüllt ist, wird der else-Block ausgeführt und das Programm gibt The number does not have a digit 5 aus.
Du kannst das Konzept von while ... else so verstehen, dass es wie while ... nobreak funktioniert, aber mit else im Programm geschrieben wird.
Herausforderung
Gib eine ganze Zahl ein. Deine Aufgabe ist es herauszufinden, ob sie die Ziffer 3 oder 7 enthält. Wenn ja, sollst du The number contains a digit 3 or 7 ausgeben. Wenn nicht, soll das Programm The number neither has a digit 3 nor a digit 7 ausgeben.