Routineaufgaben mit Python automatisieren. Al Sweigart

Читать онлайн книгу.

Routineaufgaben mit Python automatisieren - Al Sweigart


Скачать книгу
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.

       Break-Anweisungen

      Es gibt eine Abkürzung, um vorzeitig aus einer while-Schleife auszubrechen. Wenn das Programm bei der Ausführung eine break-Anweisung erreicht, verlässt es die while-Klausel sofort. Im Code besteht eine break-Anweisung lediglich aus dem Schlüsselwort break.

      Ziemlich einfach, oder? Das folgende Programm macht das Gleiche wie das vorherige, enthält zusätzlich aber eine break-Anweisung, um aus der Schleife ausbrechen zu können. Geben Sie den folgenden Code ein und speichern Sie die Datei als yourName2.py:

      while True: image

      print('Please type your name.')

      name = input() image

      if name == 'your name': image

      break image

      print('Thank you!') image

      Die Ausführung dieses Programms können Sie sich auf https://autbor.com/yourname2/ ansehen. Die erste Zeile (image) ruft eine Endlosschleife hervor – eine while-Schleife, deren Bedingung stets True ist (denn schließlich wird der Ausdruck True immer zu dem Wert True ausgewertet). Tritt das Programm erst einmal in die Schleife ein, kann es sie erst dann verlassen, wenn eine break-Anweisung ausgeführt wird. (Eine Endlosschleife, die niemals verlassen wird, ist ein häufig auftretender Bug.)

      Wie zuvor fordert das Programm den Benutzer dazu auf, your name einzugeben (image). Diesmal aber wird innerhalb der while-Schleife eine if-Anweisung ausgeführt (image), um zu prüfen, ob name gleich 'your name' ist. Ist diese Bedingung erfüllt, so wird die break-Anweisung ausgeführt (image), sodass das Programm die Schleife verlässt und zu print('Thank you!') übergeht (image). Anderenfalls wird die if-Klausel mit der break-Anweisung übersprungen, sodass die Programmausführung das Ende der while-Schleife erreicht. Dadurch springt sie wieder zum Anfang der while-Anweisung, wo die Bedingung überprüft wird (image). Da es sich bei dieser Bedingung einfach um den booleschen Wert True handelt, beginnt die Schleife erneut, sodass der Benutzer wieder aufgefordert wird, your name einzugeben. Das Flussdiagramm für dieses Programm sehen Sie in Abb. 2–11.

      Führen Sie yourName2.py aus und geben Sie den gleichen Text ein wie bei yourName.py. Die neue Version des Programms reagiert auf die gleiche Weise wie die ursprüngliche.

      Abb. 2–11Das Flussdiagramm für das Programm yourName2.py mit einer Endlosschleife. Der mit X markierte Pfad wird nie erreicht, da die Schleifenbedingung stets True ist.

       Continue-Anweisungen

      Ebenso wie break- werden auch continue-Anweisungen innerhalb von Schleifen verwendet. Wird bei der Ausführung eine solche Anweisung erreicht, so erfolgt ein Rücksprung zum Anfang der Schleife, wo die Schleifenbedingung erneut ausgewertet wird. (Dies geschieht auch, wenn die Ausführung am Ende der Schleife ankommt.)

       Gefangen in einer Endlosschleife?

      Wenn Sie ein Programm ausführen und es aufgrund eines Bugs in einer Endlosschleife hängen bleibt, drücken Sie image + image 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 image + image 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': image

      continue image

      print('Hello, Joe. What is the password? (It is a fish.)')

      password = input() image

      if password == 'swordfish':

      break image

      print('Access granted.') imageСкачать книгу