Читать книгу Routineaufgaben mit Python automatisieren - Al Sweigart - Страница 70
Gefangen in einer Endlosschleife?
ОглавлениеWenn Sie ein Programm ausführen und es aufgrund eines Bugs in einer Endlosschleife hängen bleibt, drücken Sie + oder wählen Sie im IDLE-Menü Shell > Restart Shell. Dadurch wird ein KeyboardInterrupt-Fehler an das Programm gesendet und es bricht sofort ab. Um das auszuprobieren, schreiben Sie im Dateieditor eine einfache Endlosschleife und speichern das Programm als infiniteloop.py:
while True:
print('Hello, world!')
Wenn Sie dieses Programm ausführen, gibt es Hello, world! auf dem Bildschirm aus und will nicht mehr damit aufhören, da die Bedingung der while-Anweisung stets True ist. Die Tastenkombination + ist auch dann praktisch, wenn ein Programm nicht in einer Endlosschleife gefangen ist, Sie es aber aus einem anderen Grund sofort abbrechen wollen.
Im Folgenden verwenden wir continue für ein Programm, das Sie nach Ihrem Namen und Ihrem Passwort fragt. Geben Sie den folgenden Code in ein neues Dateieditorfenster ein und speichern Sie das Programm als swordfish.py:
while True:
print('Who are you?')
name = input()
if name != 'Joe':
continue
print('Hello, Joe. What is the password? (It is a fish.)')
password = input()
if password == 'swordfish':
break
print('Access granted.')
Wenn der Benutzer einen anderen Namen als Joe eingibt (), sorgt die continue-Anweisung () dafür, dass die Programmausführung zum Beginn der Schleife zurückspringt. Nach der Auswertung der Bedingung wird stets die Schleife ausgeführt, da es sich bei dieser Bedingung einfach um den Wert True handelt. Hat die Ausführung erst einmal die erste if-Anweisung überwunden, wird der Benutzer nach dem Passwort gefragt (). Gibt der Benutzer swordfish ein, wird die break-Anweisung ausgeführt (), sodass das Programm die while-Schleife verlässt und die Meldung Access granted. ausgibt (). Anderenfalls wird die Ausführung bis zum Ende der while-Schleife fortgesetzt, von wo aus sie zum Beginn der Schleife zurückspringt. Das können Sie in dem Flussdiagramm in Abb. 2–12 ablesen.
Abb. 2–12Das Flussdiagramm für das Programm swordfish.py. Der mit X markierte Pfad wird nie erreicht, da die Schleifenbedingung stets True ist.