Routineaufgaben mit Python automatisieren. Al Sweigart

Routineaufgaben mit Python automatisieren - Al Sweigart


Скачать книгу

      ********

      ********

      ********

      ********

      ********

      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 hilfreich erweist.

      Funktionen bilden eine hervorragende Möglichkeit, um Ihren Code zu gliedern. Betrachten Sie sie als Blackbox: Sie haben Eingaben in der Form von Parametern und Ausgaben in Form von Rückgabewerten, aber ihr interner Code wirkt sich nicht auf die Variablen in anderen Funktionen aus.

      In vorherigen Kapiteln führte ein einziger Fehler zum Absturz des gesamten Programms. In diesem Kapitel haben Sie die Anweisungen try und except kennengelernt, mit denen besonderer Code ausgeführt werden kann, wenn ein Fehler erkannt wurde. Das macht Ihren Code widerstandsfähiger gegen gängige Fehler.

       Wiederholungsfragen

      1 Warum ist es von Vorteil, in Ihren Programmen Funktionen zu verwenden?

      2 Wann wird der Code in einer Funktion ausgeführt – bei der Definition oder beim Aufruf der Funktion?

      3 Mit welcher Anweisung erstellen Sie eine Funktion?

      4 Was ist der Unterschied zwischen einer Funktion und einem Funktionsaufruf?

      5 Wie viele globale Gültigkeitsbereiche hat ein Python-Programm? Wie viele lokale Gültigkeitsbereiche?

      6 Was geschieht mit den Variablen in einem lokalen Gültigkeitsbereich, wenn der Funktionsaufruf die Steuerung zurückgibt?

      7 Was ist ein Rückgabewert? Kann ein Rückgabewert Teil eines Ausdrucks sein?

      8 Welchen Rückgabewert hat der Aufruf einer Funktion, die keine return-Anweisung hat?

      9 Wie können Sie dafür sorgen, dass in einer Funktion eine globale Variable verwendet wird?

      10 Welchen Datentyp hat None?

      11 Was macht die


Скачать книгу