Routineaufgaben mit Python automatisieren. Al Sweigart
Чтение книги онлайн.

Читать онлайн книгу Routineaufgaben mit Python automatisieren - Al Sweigart страница 45

Название: Routineaufgaben mit Python automatisieren

Автор: Al Sweigart

Издательство: Bookwire

Жанр: Математика

Серия:

isbn: 9783960889571

isbn:

СКАЧАТЬ den bisher erlernten Programmiertechniken wollen wir nun ein kleines Animationsprogramm schreiben. Es erstellt ein Zickzackmuster, bis der Benutzer es anhält, indem er auf die Stop-Schaltfläche von Mu klickt oder image + image drückt. Bei der Ausführung dieses Programms sehen Sie die folgende Ausgabe:

      ********

      ********

      ********

      ********

      ********

      ********

      ********

      ********

      ********

      Geben Sie den folgenden Quellcode in den Dateieditor ein und speichern Sie die Datei als zigzag.py:

      import time, sys

      indent = 0 # Anzahl der Zeichen in der Einrückung

      indentIncreasing = True # Gibt an, ob die Einrückung größer wird oder nicht

      try:

      while True: # Hauptprogrammschleife

      print(' ' * indent, end='')

      print('********')

      time.sleep(0.1) # Hält 1/10 Sekunde lang an

      if indentIncreasing:

      # Erhöht die Anzahl der Leerzeichen

      indent = indent + 1

      if indent == 20:

      # Ändert die Richtung

      indentIncreasing = False

      else:

      # Verringert die Anzahl der Leerzeichen

      indent = indent - 1

      if indent == 0:

      # Ändert die Richtung

      indentIncreasing = True

      except KeyboardInterrupt:

      sys.exit()

      Sehen wir uns diesen Code nun Zeile für Zeile an.

      import time, sys

      indent = 0 # Anzahl der Zeichen in der Einrückung

      indentIncreasing = True # Gibt an, ob die Einrückung größer wird oder nicht

      Als Erstes importieren wir die Module time und sys. Des Weiteren verwendet das Programm zwei Variablen: Mit indent merkt es sich, wie viele Leerzeichen vor der Reihe von acht Sternchen stehen, während der boolesche Wert in indentIncreasing bestimmt, ob die Anzahl der Leerzeichen größer oder kleiner werden soll.

      try:

      while True: # Hauptprogrammschleife

      print(' ' * indent, end='')

      print('********')

      time.sleep(0.1) # Hält 1/10 Sekunde lang an

      Der Rest des Programms steht in einer try-Anweisung. Wenn der Benutzer während der Ausführung eines Python-Programms image + image drückt, wird die Ausnahme KeyboardInterrupt ausgelöst. Ohne eine try-except-Anweisung, die diese Ausnahme abfängt, würde das Programm mit einer unschönen Fehlermeldung abstürzen. In unserem Programm soll die Ausnahme KeyboardInterrupt aber sauber durch den Aufruf von sys.exit() abgefangen werden. (Der Code dafür befindet sich in der except-Anweisung am Ende des Programms.)

      Die Endlosschleife while True: wiederholt unaufhörlich die Anweisungen in unserem Programm. Darin wird mit ' ' * indent jeweils die richtige Menge an Leerzeichen zur Einrückung ausgegeben. Da hinter diesen Leerzeichen nicht automatisch ein Zeilenumbruch erfolgen soll, übergeben wir außerdem end='' an den ersten Aufruf von print(). Ein zweiter print()-Aufruf gibt die Sternchenreihe aus. Die Funktion time.sleep() haben wir noch nicht behandelt; es reicht hier zu wissen, dass sie an dieser Stelle des Programms eine Pause von einer Zehntelsekunde Dauer einschiebt.

      if indentIncreasing:

      # Erhöht die Anzahl der Leerzeichen

      indent = indent + 1

      if indent == 20:

      # Ändert die Richtung

      indentIncreasing = False

      Als Nächstes ändern wir die Länge der Einrückung für die nächste Sternchenreihe. Wenn indentIncreasing den Wert True hat, erhöhen wir indent um 1. Erreicht die Einrückung aber eine Länge von 20, soll sie wieder abnehmen.

      else:

      # Verringert die Anzahl der Leerzeichen

      indent = indent - 1

      if indent == 0:

      # Ändert die Richtung

      indentIncreasing = True

      Hat indentIncreasing den Wert False, müssen wir indent jeweils um 1 verringern. Sobald indent dadurch auf 0 sinkt, soll die Einrückung wieder wachsen. In jedem Fall springt die Programmausführung zurück zum Anfang der Hauptschleife, um wieder mit der Ausgabe der Sternchenreihen zu beginnen.

      except KeyboardInterrupt:

      sys.exit()

      Wenn der Benutzer zu irgendeinem Zeitpunkt, an dem sich die Programmausführung in dem try-Block befindet, image + image drückt, wird die Ausnahme KeyboardInterrupt ausgelöst und von der except-Anweisung behandelt. Die Programmausführung geht dann in dem except-Block weiter, der sys.exit() ausführt und damit das Programm beendet. Dadurch hat der Benutzer die Möglichkeit, das Programm zu beenden, auch wenn es sich bei der Hauptschleife um eine Endlosschleife handelt.

       Zusammenfassung

      Funktionen sind die wichtigste Möglichkeit, um Ihren Code logisch zu gruppieren. Da Variablen in Funktion eigene lokale Gültigkeitsbereiche haben, kann der Code in einer Funktion die Werte von Variablen in anderen Funktionen nicht unmittelbar beeinflussen. Das schränkt den Umfang des Codes ein, der die Werte von Variablen ändern kann, was sich wiederum beim Debugging als sehr СКАЧАТЬ