Routineaufgaben mit Python automatisieren. Al Sweigart
Читать онлайн книгу.rufen Sie die Funktion bacon() aus dem Modul spam auf, nachdem Sie spam importiert haben?
13 Wie verhindern Sie, dass ein Programm beim Auftreten eines Fehlers abstürzt?
14 Was steht in einer try-Klausel und was in der except-Klausel?
Übungsprojekte
Schreiben Sie zur Übung Programme, die die folgenden Aufgaben lösen.
Die Collatz-Folge
Schreiben Sie die Funktion collatz() mit dem Parameter number. Wenn number eine gerade Zahl ist, soll diese Funktion number // 2 ausgeben und zurückgeben. Ist number dagegen ungerade, soll collatz das Ergebnis von 3 * number + 1 ausgeben und zurückgeben.
Schreiben Sie anschließend ein Programm, das eine ganze Zahl als Benutzereingabe entgegennimmt und anschließend für diese Zahl und danach für die Rückgabewerte immer wieder collatz() aufruft, bis die Funktion den Wert 1 zurückgibt. (Erstaunlicherweise funktioniert das mit jeder beliebigen ganzen Zahl als Ausgangspunkt. Früher oder später erreichen Sie mit dieser Folge den Wert 1. Selbst Mathematiker wissen nicht, warum das so ist. Dieses Programm veranschaulicht die sogenannte Collatz-Folge, die manchmal auch als »das einfachste unlösbare Problem der Mathematik« bezeichnet wird.)
Vergessen Sie nicht, den Rückgabewert von input() mithilfe von int() in einen Integer umzuwandeln, denn zunächst einmal ist er ein String.
Tipp: Der Integer number ist gerade, wenn number % 2 == 0, und ungerade, wenn number % 2 == 1.
Die Ausgabe dieses Programms sieht wie folgt aus:
Enter number:
3
10
5
16
8
4
2
1
Eingabevalidierung
Ergänzen Sie das vorherige Projekt um try- und except-Anweisungen, um festzustellen, ob der Benutzer etwas anderes als einen Integer eingegeben hat. Normalerweise gibt die Funktion int() den Fehler ValueError zurück, wenn ihr etwas anderes als ein String übergeben wird, der die Ziffernfolge einer ganzen Zahl darstellt, z. B. int('puppy'). Geben Sie in der except-Klausel eine Meldung aus, die den Benutzer darauf hinweist, dass er eine ganze Zahl eingeben muss.
4
Listen
In diesem Kapitel beschäftigen wir uns mit den Grundlagen von Listen. Außerdem stelle ich Methoden vor, also Funktionen, die an die Werte eines bestimmten Datentyps gebunden sind. Des Weiteren werde ich kurz auch auf sequenzielle Datentypen im Allgemeinen (Listen, Tupel und Strings) und ihre Unterschiede und Gemeinsamkeiten eingehen. Im nächsten Kapitel geht es dann um den Datentyp für Dictionaries (Wörterbücher).
Der Datentyp für Listen
Eine Liste ist ein Wert, der mehrere Werte in einer geordneten Reihenfolge enthält, etwa wie folgt: ['cat', bat', 'rat', 'elephant']. So wie Anfang und Ende von Stringwerten durch Anführungszeichen gekennzeichnet sind, so beginnen und enden Listen mit eckigen Klammern. Der Begriff Listenwert bezeichnet dabei die Liste selbst (da sie wie jeder andere Wert in einer Variablen gespeichert oder einer Funktion übergeben werden kann), nicht die darin enthaltenen Werte. Diese werden Elemente genannt und sind durch Kommata getrennt. Zur Veranschaulichung geben Sie Folgendes in die interaktive Shell ein:
>>> [1, 2, 3]
[1, 2, 3]
>>> ['cat', 'bat', 'rat', 'elephant']
['cat', 'bat', 'rat', 'elephant']
>>> ['hello', 3.1415, True, None, 42]
['hello', 3.1415, True, None, 42]
>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam
['cat', 'bat', 'rat', 'elephant']
Der Variablen spam wird nur ein einziger Wert zugewiesen, nämlich der Listenwert (
Übrigens gibt es vergleichbar mit dem leeren String '' auch eine leere Liste [], die keinerlei Elemente enthält.
Einzelne Elemente einer Liste mithilfe des Index abrufen
Wenn Sie die Liste ['cat', bat', 'rat', 'elephant'] in der Variablen spam gespeichert haben, wird spam[0] zu 'cat' ausgewertet, spam[1] zu 'bat' usw. Der Integer in den eckigen Klammern, der die Position in der Liste angibt, wird als Index bezeichnet. Das erste Element in einer Liste hat den Index 0, das zweite den Index 1, das dritte den Index 2 usw. Abb. 4–1 zeigt den Listenwert, der spam zugeordnet ist, und gibt an, wozu die einzelnen Indexausdrücke ausgewertet werden. Da der erste Index 0 ist, ist der letzte eins weniger als die Länge der Liste. Bei einer Liste mit vier Einträgen lautet der letzte Index also 3.
Abb. 4–1Ein Listenwert gespeichert in der Variablen spam. Die Pfeile zeigen, auf welche Elemente sich die Indizes jeweils beziehen.
Geben Sie zur Veranschaulichung die folgenden Ausdrücke in die interaktive Shell ein. Zu Anfang weisen Sie der Variablen spam dabei eine Liste zu.
>>> spam = ['cat', 'bat', 'rat', 'elephant']
>>> spam[0]
'cat'
>>> spam[1]
'bat'
>>> spam[2]
'rat'
>>> spam[3]
'elephant'
>>> ['cat', 'bat', 'rat', 'elephant'][3]
'elephant'
>>> 'Hello ' + spam[0]
'Hello cat'