Читать книгу Routineaufgaben mit Python automatisieren - Al Sweigart - Страница 100

Ein kurzes Programm: Zickzackmuster

Оглавление

Mit 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 + 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 + 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, + 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.

Routineaufgaben mit Python automatisieren

Подняться наверх