Python Crashkurs

Werbung
v
Inhalt
Teil 1
Grundlagen  1
1 Erste Schritte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  3
Die Programmierumgebung einrichten  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Python 2 und 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Python-Codeausschnitte ausführen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Hello World! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 3
 4
 4
 5
Python auf verschiedenen Betriebssystemen . . . . . . . . . . . . . . . . . . . . . . . . . . .  5
Python unter Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  5
Python unter OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  9
Python unter Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  12
Fehlersuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  17
Python-Programme im Terminal ausführen . . . . . . . . . . . . . . . . . . . . . . . . . .  18
Unter Linux und OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  18
Unter Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  19
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  20
2 Variablen und einfache Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  21
Was bei der Ausführung von hello_world.py wirklich geschieht  . . . . . . . . . .  21
Variablen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  22
Variablen benennen und verwenden  . . . . . . . . . . . . . . . . . . . . . . . . . . .  23
Fehler bei Variablennamen vermeiden . . . . . . . . . . . . . . . . . . . . . . . . . .  24
Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Groß- und Kleinschreibung mithilfe von Methoden ändern  . . . . . . . . .
Strings verketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Weißraum hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Weißraum entfernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Syntaxfehler bei der Stringverarbeitung vermeiden . . . . . . . . . . . . . . . .
Die Print-Anweisung in Python 2  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 25
 26
 27
 28
 29
 30
 32
vi
 Inhalt
Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Integer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fließkommazahlen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Typisierungsfehler mithilfe der Funktion str() vermeiden . . . . . . . . . . . .
Integer in Python 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 33
 33
 34
 34
 35
Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  36
Wie werden Kommentare geschrieben? . . . . . . . . . . . . . . . . . . . . . . . . .  37
Was für Kommentare sind sinnvoll?  . . . . . . . . . . . . . . . . . . . . . . . . . . .  37
The Zen of Python  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  38
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  40
3 Eine Einführung in Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  41
Was sind Listen? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Elemente in einer Liste ansprechen . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Indizes beginnen bei 0, nicht bei 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Einzelne Werte aus einer Liste verwenden . . . . . . . . . . . . . . . . . . . . . . .
 41
 42
 43
 43
Elemente ändern, hinzufügen und entfernen . . . . . . . . . . . . . . . . . . . . . . . . .
Elemente in einer Liste ändern  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Elemente zu einer Liste hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Elemente aus einer Liste entfernen  . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 44
 45
 45
 47
Listen ordnen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Listen mit sort() dauerhaft sortieren . . . . . . . . . . . . . . . . . . . . . . . . . . .
Listen mit der Funktion sorted() vorübergehend sortieren . . . . . . . . . . .
Listen in umgekehrter Reihenfolge ausgeben . . . . . . . . . . . . . . . . . . . . .
Die Länge einer Liste ermitteln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 52
 52
 52
 53
 54
Indexfehler vermeiden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  55
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  57
4 Mit Listen arbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  59
Eine komplette Liste durchlaufen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Schleife im Detail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Weitere Aufgaben in einer for-Schleife erledigen  . . . . . . . . . . . . . . . . . .
Aktionen nach der for-Schleife  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 59
 60
 61
 63
Einrückungsfehler vermeiden  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Vergessene Einrückung der ersten Zeile in einer Schleife . . . . . . . . . . . .
Vergessene Einrückung nachfolgender Zeilen  . . . . . . . . . . . . . . . . . . . .
Unnötige Einrückung  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Unnötige Einrückung nach einer Schleife  . . . . . . . . . . . . . . . . . . . . . . .
Vergessener Doppelpunkt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 64
 64
 65
 65
 66
 67
Inhalt
vii
Numerische Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Funktion range() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Numerische Listen mithilfe von range() aufstellen . . . . . . . . . . . . . . . . .
Einfache Statistiken für numerische Listen  . . . . . . . . . . . . . . . . . . . . . .
Listennotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 68
 68
 69
 70
 71
Teillisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Einen Slice erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Einen Slice in einer Schleife durchlaufen . . . . . . . . . . . . . . . . . . . . . . . .
Listen kopieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 72
 72
 74
 75
Tupel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein Tupel definieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Werte in einem Tupel durchlaufen  . . . . . . . . . . . . . . . . . . . . . . . . .
Tupel überschreiben  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 78
 78
 79
 79
Code formatieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Gestaltungsrichtlinien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Einrückung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zeilenlänge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Leerzeilen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 80
 80
 81
 81
 82
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  83
5 if-Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  85
Ein einfaches Beispiel  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  85
Bedingungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Prüfung auf Gleichheit  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Groß- und Kleinschreibung bei der Prüfung auf Gleichheit . . . . . . . . . .
Prüfung auf Ungleichheit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Numerische Vergleiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Prüfung auf mehrere Bedingungen  . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Prüfung auf Vorhandensein eines Werts in einer Liste . . . . . . . . . . . . . .
Prüfung auf Abwesenheit eines Werts in einer Liste . . . . . . . . . . . . . . . .
Boolesche Ausdrücke  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 86
 86
 87
 88
 89
 90
 91
 91
 92
if-Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Einfache if-Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
if-else-Anweisungen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die if-elif-else-Kette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mehrere elif-Blöcke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Den else-Block weglassen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mehrere Bedingungen prüfen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 93
 93
 94
 95
 97
 97
 98
viii
if-Anweisungen für Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Prüfung auf besondere Elemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Prüfung auf nicht leere Liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mehrere Listen verwenden  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 Inhalt
 101
 101
 102
 103
if-Anweisungen gestalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  105
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  106
6 Dictionaries  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  107
Ein einfaches Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  108
Umgang mit Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zugriff auf die Werte in einem Dictionary . . . . . . . . . . . . . . . . . . . . . .
Schlüssel-Wert-Paare hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein leeres Dictionary als Ausgangspunkt . . . . . . . . . . . . . . . . . . . . . . .
Werte in einem Dictionary ändern . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Schlüssel-Wert-Paare entfernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein Dictionary aus ähnlichen Objekten . . . . . . . . . . . . . . . . . . . . . . . .
 108
 109
 110
 110
 111
 113
 113
Dictionaries in einer Schleife durchlaufen . . . . . . . . . . . . . . . . . . . . . . . . . .
Alle Schlüssel-Wert-Paare durchlaufen  . . . . . . . . . . . . . . . . . . . . . . . .
Alle Schlüssel in einem Dictionary durchlaufen . . . . . . . . . . . . . . . . . .
Die Schlüssel in einem Dictionary geordnet durchlaufen . . . . . . . . . . .
Alle Werte in einem Dictionary durchlaufen  . . . . . . . . . . . . . . . . . . . .
 116
 116
 118
 120
 121
Verschachtelung  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dictionaries in einer Liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Listen in einem Dictionary  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dictionaries in einem Dictionary . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 123
 123
 126
 128
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  130
7 Benutzereingaben und while-Schleifen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  131
Die Funktion input() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Klar verständliche Eingabeaufforderungen schreiben  . . . . . . . . . . . . .
Verwendung von int() für numerische Eingaben  . . . . . . . . . . . . . . . . .
Der Modulo-Operator  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Benutzereingaben in Python 2.7  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 132
 132
 133
 135
 136
while-Schleifen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
while-Schleifen in Aktion  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Programmbeendigung durch den Benutzer  . . . . . . . . . . . . . . . . . . . . .
Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eine Schleife mit break verlassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 136
 136
 137
 139
 140
Inhalt
ix
Die Anweisung continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  141
Endlosschleifen vermeiden  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  142
while-Schleifen für Listen und Dictionaries . . . . . . . . . . . . . . . . . . . . . . . . .
Elemente von einer Liste in eine andere verschieben  . . . . . . . . . . . . . .
Alle Vorkommen eines Wertes aus einer Liste entfernen  . . . . . . . . . . .
Ein Dictionary mit Benutzereingaben füllen  . . . . . . . . . . . . . . . . . . . .
 143
 144
 145
 145
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  147
8 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  149
Funktionen definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  150
Informationen an eine Funktion übergeben . . . . . . . . . . . . . . . . . . . . .  150
Argumente und Parameter  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  151
Argumente übergeben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Positionsabhängige Argumente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Schlüsselwortargumente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Standardwerte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Gleichwertige Funktionsaufrufe  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Argumentfehler vermeiden  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 152
 152
 154
 155
 156
 157
Rückgabewerte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Einen einfachen Wert zurückgeben . . . . . . . . . . . . . . . . . . . . . . . . . . .
Optionale Argumente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein Dictionary zurückgeben  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Funktionen in einer while-Schleife . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 158
 159
 159
 161
 162
Eine Liste übergeben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  164
Eine Liste mithilfe einer Funktion ändern . . . . . . . . . . . . . . . . . . . . . .  165
Die Änderung einer Liste in einer Funktion verhindern . . . . . . . . . . . .  168
Beliebig viele Argumente übergeben  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  169
Positionsabhängige Argumente und Argumente
beliebiger Anzahl kombinieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  170
Beliebig viele Schlüsselwortargumente übergeben . . . . . . . . . . . . . . . .  171
Funktionen in Modulen speichern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein komplettes Modul importieren . . . . . . . . . . . . . . . . . . . . . . . . . . .
Einzelne Funktionen importieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eine Funktion mit »as« umbenennen  . . . . . . . . . . . . . . . . . . . . . . . . .
Ein Modul mit »as« umbenennen . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Alle Funktionen eines Moduls importieren . . . . . . . . . . . . . . . . . . . . .
 173
 173
 174
 175
 176
 176
Funktionen formatieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  177
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  178
x
 Inhalt
9 Klassen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  181
Eine Klasse erstellen und verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  182
Die Klasse Dog erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  182
Eine Instanz einer Klasse anlegen  . . . . . . . . . . . . . . . . . . . . . . . . . . . .  184
Mit Klassen und Instanzen arbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Klasse Car  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Einen Standardwert für ein Attribut festlegen . . . . . . . . . . . . . . . . . . .
Attributwerte bearbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 187
 187
 188
 189
Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Methode __init__() für eine Kindklasse . . . . . . . . . . . . . . . . . . . . .
Vererbung in Python 2.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Attribute und Methoden der Kindklasse definieren . . . . . . . . . . . . . . .
Methoden der Elternklasse überschreiben . . . . . . . . . . . . . . . . . . . . . .
Instanzen als Attribute  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Reale Objekte modellieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 193
 193
 195
 195
 196
 197
 199
Klassen importieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eine einzelne Klasse importieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mehrere Klassen in einem Modul speichern  . . . . . . . . . . . . . . . . . . . .
Mehrere Klassen aus einem Modul importieren  . . . . . . . . . . . . . . . . .
Ein gesamtes Modul importieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Alle Klassen eines Moduls importieren . . . . . . . . . . . . . . . . . . . . . . . .
Ein Modul in ein Modul importieren  . . . . . . . . . . . . . . . . . . . . . . . . .
Ihren eigenen Arbeitsablauf finden  . . . . . . . . . . . . . . . . . . . . . . . . . . .
 201
 201
 203
 204
 205
 205
 206
 207
Die Standardbibliothek von Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  207
Klassen formatieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  209
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  210
10 Dateien und Ausnahmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  211
Aus Dateien lesen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eine gesamte Datei lesen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dateipfade  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zeilenweises Lesen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eine Liste aus den Zeilen einer Datei erstellen . . . . . . . . . . . . . . . . . . .
Dateiinhalte verarbeiten  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Große Dateien: eine Million Stellen . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ist Ihr Geburtsdatum in Pi enthalten? . . . . . . . . . . . . . . . . . . . . . . . . .
 212
 212
 214
 215
 216
 217
 218
 219
In Dateien schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  220
In eine leere Datei schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  221
Inhalt
xi
Mehrere Zeilen schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  222
Text an eine Datei anhängen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  222
Ausnahmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Division durch null . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
try-except-Blöcke  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Abstürze mithilfe von Ausnahmen verhindern . . . . . . . . . . . . . . . . . . .
Der else-Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Datei nicht gefunden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Text analysieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Umgang mit mehreren Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fehler stillschweigend übergehen  . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Welche Fehler sollten Sie melden und welche nicht?  . . . . . . . . . . . . . .
 223
 224
 224
 225
 226
 227
 228
 230
 231
 232
Daten speichern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
json.dump() und json.load()  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Benutzergenerierte Daten speichern und lesen . . . . . . . . . . . . . . . . . . .
Refactoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 234
 234
 235
 237
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  240
11 Code testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  243
Funktionen testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  244
Unit Tests und Testfälle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  245
Ein bestandener Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  245
Ein nicht bestandener Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  247
Was tun bei einem nicht bestandenen Test? . . . . . . . . . . . . . . . . . . . . .  248
Neue Tests hinzufügen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  249
Klassen testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Verschiedene Zusicherungsmethoden  . . . . . . . . . . . . . . . . . . . . . . . . .
Eine Beispielklasse zum Testen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Klasse AnonymousSurvey testen . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Methode setUp() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 251
 251
 252
 254
 256
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  258
Teil 2
Projekte  259
Alien Invasion – ein Python-Spiel  . . . . . . . . . . . . . . . . . . . . . . . . . . . .  259
Datenvisualisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  260
Webanwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  260
xii
 Inhalt
Projekt 1: Alien Invasion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  261
12 Das eigene Kampfschiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  263
Das Projekt planen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  264
Pygame installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Python-Pakete mit pip installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pygame unter Linux installieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pygame unter OS X installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pygame unter Windows installieren  . . . . . . . . . . . . . . . . . . . . . . . . . .
 265
 265
 267
 269
 269
Das Spielprojekt beginnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein Pygame-Fenster anlegen und auf Benutzereingaben reagieren . . . .
Die Hintergrundfarbe festlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eine Klasse für Einstellungen anlegen . . . . . . . . . . . . . . . . . . . . . . . . .
 270
 270
 272
 272
Das Bild eines Raumschiffs hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . . . . .  274
Die Klasse Ship . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  275
Das Schiff auf den Bildschirm zeichnen . . . . . . . . . . . . . . . . . . . . . . . .  277
Refactoring des Moduls game_functions . . . . . . . . . . . . . . . . . . . . . . . . . . .  278
Die Funktion check_events() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  278
Die Funktion update_screen() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  279
Das Schiff bewegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Auf Tastenbetätigungen reagieren . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Kontinuierliche Bewegung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Bewegung nach rechts und links . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Geschwindigkeit des Schiffes anpassen . . . . . . . . . . . . . . . . . . . . .
Den Bewegungsbereich des Schiffes einschränken . . . . . . . . . . . . . . . .
Refactoring von check_events() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 281
 281
 282
 284
 285
 287
 288
Zwischenstand  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
alien_invasion.py  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
settings.py . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
game_functions.py  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
ship.py  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 288
 289
 289
 289
 289
Geschosse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Einstellungen für Geschosse hinzufügen  . . . . . . . . . . . . . . . . . . . . . . .
Die Klasse Bullet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Geschosse in Gruppen speichern . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Geschosse abfeuern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Alte Geschosse löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 290
 290
 290
 292
 294
 295
Inhalt
xiii
Die Anzahl der Geschosse begrenzen . . . . . . . . . . . . . . . . . . . . . . . . . .  296
Die Funktion update_bullets() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  297
Die Funktion fire_bullet() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  298
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  299
13 Die Außerirdischen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  301
Überblick über das Projekt  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  302
Das erste Invasionsschiff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Klasse Alien  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eine Instanz von Alien erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Das Invasionsschiff auf den Bildschirm zeichnen . . . . . . . . . . . . . . . . .
 303
 304
 304
 305
Die Invasionsflotte erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Wie viele Invasionsschiffe passen in eine Reihe?  . . . . . . . . . . . . . . . . .
Reihen von Invasionsschiffen erstellen  . . . . . . . . . . . . . . . . . . . . . . . .
Die Flotte erstellen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Refactoring von create_fleet() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Reihen hinzufügen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 306
 306
 307
 308
 310
 311
Die Flotte in Bewegung setzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Invasoren nach rechts bewegen . . . . . . . . . . . . . . . . . . . . . . . . . . .
Einstellungen für die Flugrichtung der Flotte . . . . . . . . . . . . . . . . . . . .
Auf Randberührungen prüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sinken und Flugrichtung ändern . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 314
 315
 316
 316
 317
Invasoren abschießen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Kollisionen von Geschossen erkennen . . . . . . . . . . . . . . . . . . . . . . . . .
Größere Geschosse zu Testzwecken . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Flotte auffüllen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Geschosse beschleunigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Refactoring von update_bullets()  . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 319
 319
 320
 321
 322
 323
Spielende . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Kollisionen zwischen Invasoren und dem eigenen Schiff erkennen  . . .
Auf Kollisionen zwischen Invasoren und
dem eigenen Schiff reagieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Wenn Invasoren den unteren Bildschirmrand erreichen . . . . . . . . . . . .
Game over! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 324
 324
 325
 328
 329
Welche Teile des Spiels müssen ausgeführt werden? . . . . . . . . . . . . . . . . . . .  329
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  330
xiv
 Inhalt
14 Das Wertungssystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  331
Eine Play-Schaltfläche hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Klasse Button . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Schaltfläche auf den Bildschirm zeichnen  . . . . . . . . . . . . . . . . . . .
Das Spiel starten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Das Spiel zurücksetzen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Play-Schaltfläche deaktivieren . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Den Mauszeiger ausblenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 331
 332
 334
 335
 336
 338
 338
Levels  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  339
Die Geschwindigkeitseinstellungen ändern  . . . . . . . . . . . . . . . . . . . . .  340
Die Geschwindigkeit zurücksetzen  . . . . . . . . . . . . . . . . . . . . . . . . . . .  341
Die Punktwertung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Den Punktestand anzeigen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eine Anzeigetafel erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Den Punktestand bei jedem Abschuss erhöhen  . . . . . . . . . . . . . . . . . .
Alle Treffer berücksichtigen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Den Punktwert erhöhen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Den Punktestand runden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Highscore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Das Level anzeigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Anzahl der verfügbaren Schiffe anzeigen . . . . . . . . . . . . . . . . . . . .
 342
 343
 344
 346
 348
 348
 349
 351
 354
 357
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  362
Projekt 2: Datenvisualisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  363
15 Daten generieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  365
Die Bibliothek matplotlib installieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Unter Linux  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Unter OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Unter Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
matplotlib testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die matplotlib-Galerie  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 366
 366
 367
 367
 368
 368
Einfache Liniendiagramme  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Beschriftung und Linienstärke ändern . . . . . . . . . . . . . . . . . . . . . . . . .
Das Diagramm korrigieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Einzelne Punkte mit scatter() darstellen und gestalten . . . . . . . . . . . . .
Eine Folge von Punkten mit scatter() ausgeben . . . . . . . . . . . . . . . . . .
Daten automatisch berechnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 368
 369
 370
 371
 373
 374
Inhalt
xv
Die Umrandungen der Punkte entfernen . . . . . . . . . . . . . . . . . . . . . . .
Eigene Farben festlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eine Colormap verwenden  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Diagramme automatisch speichern . . . . . . . . . . . . . . . . . . . . . . . . . . .
 375
 375
 376
 377
Zufallsbewegungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Klasse RandomWalk()  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Richtungen wählen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Den Zufallspfad als Diagramm ausgeben  . . . . . . . . . . . . . . . . . . . . . .
Mehrere Zufallspfade erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Den Pfad gestalten  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Punkte färben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Start- und Endpunkte anzeigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Achsen entfernen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Datenpunkte hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Größe an den Bildschirm anpassen . . . . . . . . . . . . . . . . . . . . . . . .
 377
 378
 379
 380
 381
 382
 382
 383
 384
 384
 386
Würfeln mit Pygal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pygal installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Pygal-Galerie  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Klasse Die . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Würfeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Ergebnisse analysieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein Histogramm erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ergebnisse bei zwei Würfeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Würfel unterschiedlicher Flächenzahl . . . . . . . . . . . . . . . . . . . . . . . . .
 387
 387
 388
 388
 388
 389
 390
 391
 393
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  396
16 Daten herunterladen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  397
Das Dateiformat CSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
CSV-Spaltenköpfe analysieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Spaltenköpfe und ihre Position ausgeben  . . . . . . . . . . . . . . . . . . .
Daten entnehmen und lesen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Daten in einem Temperaturdiagramm darstellen . . . . . . . . . . . . . . . . .
Das Modul datetime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Datumsangaben im Diagramm darstellen . . . . . . . . . . . . . . . . . . . . . .
Ein Diagramm für einen längeren Zeitraum  . . . . . . . . . . . . . . . . . . . .
Eine zweite Datenreihe darstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Einen Diagrammbereich einfärben  . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fehlerprüfung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 398
 398
 400
 400
 402
 403
 404
 405
 406
 408
 409
xvi
Globale Daten im JSON-Format visualisieren . . . . . . . . . . . . . . . . . . . . . . .
Daten zur Weltbevölkerung herunterladen  . . . . . . . . . . . . . . . . . . . . .
Relevante Daten entnehmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Strings in numerische Werte umwandeln . . . . . . . . . . . . . . . . . . . . . . .
Zweistellige Ländercodes ermitteln . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eine Weltkarte zeichnen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Numerische Daten auf einer Weltkarte darstellen  . . . . . . . . . . . . . . . .
Eine vollständige Karte der Weltbevölkerung  . . . . . . . . . . . . . . . . . . .
Länder nach der Bevölkerungszahl gruppieren  . . . . . . . . . . . . . . . . . .
Weltkarten in Pygal gestalten  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Farbpalette aufhellen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 Inhalt
 412
 412
 412
 414
 415
 417
 419
 420
 422
 424
 425
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  427
17 APIs  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  429
Web-APIs  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Git und GitHub  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Daten über einen API-Aufruf anfordern  . . . . . . . . . . . . . . . . . . . . . . .
Das Paket requests installieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
API-Antworten verarbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Das Antwort-Dictionary verarbeiten . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein Überblick über die höchstbewerteten Repositories  . . . . . . . . . . . .
Grenzwerte für die API-Aufrufrate . . . . . . . . . . . . . . . . . . . . . . . . . . .
 429
 430
 430
 431
 432
 433
 435
 436
Repositories mit Pygal visualisieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Pygal-Diagramme verbessern  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eigene Tooltips hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Beschreibungen als Tooltips ausgeben . . . . . . . . . . . . . . . . . . . . . .
Aktive Links zu dem Diagramm hinzufügen . . . . . . . . . . . . . . . . . . . .
 437
 439
 441
 442
 444
Die API von Hacker News  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  444
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  448
Projekt 3: Webanwendungen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  449
18 Erste Schritte mit Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  451
Ein Projekt einrichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eine Spezifikation schreiben  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eine virtuelle Umgebung erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Das Paket virtualenv installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die virtuelle Umgebung aktivieren  . . . . . . . . . . . . . . . . . . . . . . . . . . .
 452
 452
 452
 453
 454
Inhalt
xvii
Django installieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein Projekt in Django erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Datenbank erstellen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Das Projekt anzeigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 454
 455
 455
 456
Eine App anlegen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Modelle definieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Modelle aktivieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Admin-Site von Django  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Das Modell für die Einträge definieren  . . . . . . . . . . . . . . . . . . . . . . . .
Das Modell Entry in die Datenbank aufnehmen . . . . . . . . . . . . . . . . .
Das Modell Entry auf der Admin-Site registrieren . . . . . . . . . . . . . . . .
Die Django-Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 458
 458
 460
 461
 464
 465
 465
 466
Seiten erstellen: die Startseite von Learning Log  . . . . . . . . . . . . . . . . . . . . .
Eine URL zuordnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eine Ansicht schreiben  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Eine Vorlage schreiben  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 469
 469
 471
 472
Weitere Seiten erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  473
Vererbung bei Vorlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  474
Die Seite Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  476
Einzelne Fachgebietsseiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  479
Die Vorlage für eine Fachgebietsseite . . . . . . . . . . . . . . . . . . . . . . . . . .  481
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  483
19 Benutzerkonten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  485
Dateneingabe durch die Benutzer  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Neue Fachgebiete hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Neue Einträge hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Einträge bearbeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 486
 486
 491
 495
Benutzerkonten einrichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die App users . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Anmeldeseite  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Abmelden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Registrierungsseite  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 499
 499
 500
 503
 505
Die Benutzer als Besitzer ihrer eigenen Daten  . . . . . . . . . . . . . . . . . . . . . . .
Den Zugriff mit @login_required beschränken  . . . . . . . . . . . . . . . . . .
Daten mit Benutzern verknüpfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Den Zugriff auf die Fachgebiete auf die zuständigen Benutzer
einschränken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 508
 509
 511
 514
xviii
 Inhalt
Die Fachgebiete eines Benutzers schützen  . . . . . . . . . . . . . . . . . . . . . .  515
Die Seite edit_entry schützen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  516
Neue Fachgebiete dem aktuellen Benutzer zuordnen . . . . . . . . . . . . . .  516
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  518
20 Eine App gestalten und bereitstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  519
Learning Log gestalten  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die App django-bootstrap3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Learning Log mit Bootstrap gestalten . . . . . . . . . . . . . . . . . . . . . . . . .
Änderungen an base.html . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Startseite mit einem Jumbotron gestalten  . . . . . . . . . . . . . . . . . . .
Das Anmeldeformular gestalten  . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Seite new_topic gestalten  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Seite Topics gestalten  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Einträge auf den Fachgebietsseiten gestalten . . . . . . . . . . . . . . . . . . . .
 520
 520
 521
 522
 526
 527
 528
 529
 530
Learning Log bereitstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein Heroku-Konto anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Heroku Toolbelt installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die erforderlichen Pakete installieren  . . . . . . . . . . . . . . . . . . . . . . . . .
Eine Paketliste mit der Datei requirements.txt erstellen . . . . . . . . . . . .
Die Python-Laufzeitversion angeben . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Datei settings.py für Heroku anpassen . . . . . . . . . . . . . . . . . . . . .
Ein Procfile zum Starten der Prozesse erstellen  . . . . . . . . . . . . . . . . . .
Die Datei wsgi.py für Heroku anpassen  . . . . . . . . . . . . . . . . . . . . . . .
Ein Verzeichnis für statische Dateien erstellen . . . . . . . . . . . . . . . . . . .
Den Server gunicorn lokal nutzen . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Mit Git den Überblick über die Projektdateien bewahren . . . . . . . . . .
Die Datenbank auf Heroku einrichten  . . . . . . . . . . . . . . . . . . . . . . . .
Die Heroku-Bereitstellung verbessern . . . . . . . . . . . . . . . . . . . . . . . . .
Das Onlineprojekt schützen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Änderungen mit Commit bestätigen und übertragen . . . . . . . . . . . . . .
Eigene Fehlerseiten erstellen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Weiterentwicklung des Projekts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Einstellung SECRET_KEY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Projekte auf Heroku löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 532
 532
 533
 533
 533
 535
 535
 536
 537
 537
 537
 538
 542
 543
 544
 545
 547
 550
 550
 551
Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  552
Nachwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  553
Inhalt
xix
Anhang  555
A Python installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  555
Python unter Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  555
Die installierte Version herausfinden . . . . . . . . . . . . . . . . . . . . . . . . . .  555
Python 3 unter Linux installieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . .  556
Python unter OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  556
Die installierte Version herausfinden . . . . . . . . . . . . . . . . . . . . . . . . . .  556
Python 3 mit Homebrew installieren . . . . . . . . . . . . . . . . . . . . . . . . . .  557
Python unter Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Python 3 unter Windows installieren  . . . . . . . . . . . . . . . . . . . . . . . . .
Den Python-Interpreter finden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Python zur Pfadvariablen hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . .
 558
 558
 559
 559
Schlüsselwörter und integrierte Funktionen . . . . . . . . . . . . . . . . . . . . . . . . .  560
Python-Schlüsselwörter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  560
Integrierte Python-Funktionen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  560
B Texteditoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  563
Geany . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Geany unter Linux installieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Geany unter Windows installieren  . . . . . . . . . . . . . . . . . . . . . . . . . . .
Python-Programme in Geany ausführen  . . . . . . . . . . . . . . . . . . . . . . .
Geany-Einstellungen anpassen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 564
 564
 565
 565
 566
Sublime Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sublime Text unter OS X installieren  . . . . . . . . . . . . . . . . . . . . . . . . .
Sublime Text unter Linux installieren . . . . . . . . . . . . . . . . . . . . . . . . .
Sublime Text unter Windows installieren  . . . . . . . . . . . . . . . . . . . . . .
Python-Programme in Sublime Text ausführen . . . . . . . . . . . . . . . . . .
Sublime Text konfigurieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die Einstellungen von Sublime Text anpassen . . . . . . . . . . . . . . . . . . .
 567
 567
 567
 567
 567
 568
 568
IDLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IDLE unter Linux installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IDLE unter OS X installieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IDLE unter Windows installieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IDLE-Einstellungen anpassen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 569
 569
 569
 570
 570
Emacs und vim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  570
xx
 Inhalt
C Hilfe finden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  571
Erste Schritte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Versuchen Sie es erneut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Legen Sie eine Pause ein  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nutzen Sie das Onlinematerial zu diesem Buch . . . . . . . . . . . . . . . . . .
 571
 572
 572
 573
Online nach Hilfe suchen  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Stack Overflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Die offizielle Python-Dokumentation  . . . . . . . . . . . . . . . . . . . . . . . . .
Offizielle Dokumentation der Bibliotheken . . . . . . . . . . . . . . . . . . . . .
r/learnpython  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Blogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 573
 573
 574
 574
 574
 574
IRC (Internet Relay Chat) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ein IRC-Konto anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Hilfreiche Kanäle  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
IRC-Kultur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 575
 575
 575
 576
D Versionssteuerung mit Git  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  577
Git installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Git unter Linux installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Git unter OS X installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Git unter Windows installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Git konfigurieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 578
 578
 578
 578
 578
Ein Projekt anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  579
Dateien ignorieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  579
Ein Repository initialisieren  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  580
Den Projektstatus überprüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  580
Dateien zum Repository hinzufügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  581
Einen Commit durchführen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  581
Das Protokoll einsehen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  582
Der zweite Commit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  582
Änderungen zurücknehmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  583
Vorherige Commits auschecken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  585
Das Repository löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  587
Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  589
Zugehörige Unterlagen
Herunterladen