Читать книгу Routineaufgaben mit Python automatisieren - Al Sweigart - Страница 67
While-Schleifen
ОглавлениеMit einer while-Anweisung können Sie dafür sorgen, dass der Code in der while-Klausel immer wieder ausgeführt wird, solange die Bedingung der Anweisung True ist. Eine while-Anweisung enthält Folgendes:
Das Schlüsselwort while
Eine Bedingung (einen Ausdruck, der zu True oder False ausgewertet wird)
Einen Doppelpunkt
Einen eingerückten Codeblock (die while-Klausel), der in der nächsten Zeile beginnt
Eine while-Anweisung sieht ähnlich aus wie eine if-Anweisung, verhält sich aber ganz anders. Am Ende einer if-Klausel fährt das Programm mit der Ausführung hinter der if-Anweisung fort, wohingegen es am Ende einer while-Klausel zurück zum Beginn der while-Anweisung springt. Die while-Klausel wird oft auch als while-Schleife oder einfach als Schleife bezeichnet.
Zum Vergleich wollen wir uns eine if- und eine while-Anweisung ansehen, die die gleiche Bedingung verwenden und auf der Grundlage dieser Bedingung auch die gleichen Aktionen ausführen. Der Code der if-Anweisung sieht wie folgt aus:
spam = 0
if spam < 5:
print('Hello, world.')
spam = spam + 1
Die while-Anweisung stellt sich folgendermaßen dar:
spam = 0
while spam < 5:
print('Hello, world.')
spam = spam + 1
Die Anweisungen sehen ähnlich aus: Sowohl if als auch while prüfen den Wert von spam und geben eine Meldung aus, wenn dieser Wert kleiner als 5 ist. Aber wenn Sie diese beiden Codefragmente ausführen, geschieht jeweils etwas völlig anderes. Bei der if-Anweisung lautet die Ausgabe schlicht Hello, world., doch bei der while-Anweisung wird dieser Satz fünfmal ausgegeben. Um zu sehen, warum das so ist, schauen Sie sich die Flussdiagramme für diese beiden Codefragmente in Abb. 2–8 und 2–9 an.
Abb. 2–8Das Flussdiagramm für den Code mit der if-Anweisung
Abb. 2–9Das Flussdiagramm für den Code mit der while-Anweisung
Der Code in der if-Anweisung prüft die Bedingung und gibt die Meldung Hello, world. ein einziges Mal aus, wenn die Bedingung wahr ist. Der Code in der while-Schleife dagegen gibt die Meldung fünfmal aus. Danach hält er an, da der Integerwert in spam nach jedem Schleifendurchlauf um 1 erhöht wird. Die Schleife wird also fünfmal ausgeführt, bevor spam < 5 falsch ist.
In einer while-Schleife wird die Bedingung zu Beginn jeder Iteration (also vor jedem Durchlauf durch die Schleife) geprüft. Ist sie True, so wird die Klausel ausgeführt. Danach wird die Bedingung erneut geprüft. Wenn die Bedingung zum ersten Mal False ist, wird die while-Klausel übersprungen.
Das folgende kleine Beispielprogramm fordert Sie immer wieder auf, »your name« einzugeben, bis Sie tatsächlich wortwörtlich »your name« eingeben (und nicht etwa Ihren Namen). Öffnen Sie mit File > New ein neues Dateieditorfenster, geben Sie den folgenden Code ein und speichern Sie die Datei als yourName.py:
name = ''
while name != 'your name':
print('Please type your name.')
name = input()
print('Thank you!')
Die Ausführung dieses Programms können Sie sich auf https://autbor.com/yourname/ ansehen. Zu Anfang setzt es die Variable name auf einen leeren String (), damit die Bedingung name != 'your name' zu True ausgewertet wird und das Programm mit der Ausführung der while-Klausel beginnt ().
Der Code in dieser Klausel fordert den Benutzer auf, seinen Namen einzugeben, und diese Eingabe wird der Variablen name zugewiesen (). Da dies die letzte Zeile des Blocks ist, kehrt die Ausführung wieder zum Anfang der while-Schleife zurück, wo die Bedingung erneut ausgewertet wird. Wenn der Wert in name ungleich dem String 'your name' ist, so ist die Bedingung True, weshalb die while-Klausel erneut ausgeführt wird.
Wenn der Benutzer aber your name eingibt, lautet die Bedingung 'your name' != 'your name', was False ist. Daher wird die while-Schleife nicht erneut ausgeführt, sondern übersprungen, sodass die Ausführung mit dem Rest des Programms fortgesetzt wird (). Abbildung 2–10 zeigt das Flussdiagramm des Programms yourName.py.
Abb. 2–10 Das Flussdiagramm für das Programm yourName.py
Schauen wir uns yourName.py nun in Aktion an. Drücken Sie , um das Programm auszuführen, und geben Sie mehrere Male irgendetwas anderes als your name ein, bevor Sie dem Programm schließlich das geben, was es haben will.
Please type your name.
Al
Please type your name.
Albert
Please type your name.
%#@#%*(^&!!!
Please type your name.
your name
Thank you!
Wenn Sie niemals your name eingeben, ist die Bedingung der while-Schleife niemals False. Das Programm wird Sie dann bis in alle Ewigkeit zur Eingabe auffordern. Der Aufruf von input() stellt für den Benutzer die Möglichkeit bereit, den richtigen String einzugeben, damit das Programm aus der Schleife herauskommt. In einem Programm kann es jedoch durchaus vorkommen, dass sich die Bedingung niemals ändert, was ein ziemliches Problem darstellen kann. Sehen wir uns daher an, wie Sie aus einer while-Schleife ausbrechen können.