Heiko Kalista
Python 3 - Einsteigen und Durchstarten
Python lernen für Anfänger und Umsteiger. Inkl. Kapitel zu Git und Minecraft Pi
Inhalt
6
Vorwort
16
1 Grundlagen
20
1.1 Hältst Du das richtige Buch in den Händen?
20
1.2 Dieses Buch bricht mit einigen Konventionen!
21
1.3 Die Arbeit mit diesem Buch
22
1.4 Das Kapitel zu Minecraft
23
1.5 Das Begleitmaterial zum Buch
23
1.6 Anregungen? Kritik? Forum?
24
1.7 Die Geschichte von Python in 120 Wörtern
24
1.8 Was kann man mit Python machen (und was nicht)?
25
1.9 Interpreter vs. Compiler
26
1.10 Python 2.7 oder 3.7?
27
1.11 Die Entwicklungsumgebung PyCharm
28
1.11.1 Alternativen zu PyCharm
29
1.12 Python-Interpreter installieren
29
1.12.1 Python-Interpreter unter Windows installieren
30
1.12.2 Python-Interpreter unter macOS installieren
31
1.12.3 Python-Interpreter unter Linux installieren
31
1.12.4 PyCharm unter Windows installieren
32
1.12.5 PyCharm unter macOS installieren
32
1.12.6 PyCharm unter Linux installieren
33
1.12.7 PyCharm einrichten
34
1.13 Genug geredet, los gehts!
36
1.13.1 Das erste Programm eingeben
37
1.13.2 Ausführen des ersten Beispiels
39
1.13.3 Laden der Beispiele
39
1.13.4 Der Quelltext im Detail
41
1.13.5 Kommentare im Detail
42
1.14 PEP8 – um sie ewig zu binden
44
1.15 Python-Programme ohne Entwicklungsumgebung starten
46
1.15.1 Python-Programme unter Windows starten
46
1.15.2 Python-Programme unter Linux oder macOS starten
47
1.16 Python interaktiv
48
1.17 Aufgabenstellung
50
1.18 Kurz & knapp
50
2 Variablen
52
2.1 Was sind Variablen?
52
2.2 Statisch typisiert vs. dynamisch typisiert
53
2.3 Einige Details vorab – Variablen sind auch nur Namen
55
2.4 Richtlinien für Variablennamen
57
2.4.1 Von Kamelen, Schlangen und Pascal
57
2.4.2 Sinnvolle Variablennamen
58
2.5 Rechnen mit Variablen
59
2.5.1 Verkürzte Schreibweise bei Rechenoperationen
60
2.5.2 Gibt es noch weitere Datentypen?
61
2.5.3 Konvertierung von Datentypen
62
2.5.4 Besonderheiten bei der Konvertierung von Datentypen
63
2.6 Formatierte Ausgabe mit print()
64
2.7 Genauigkeit von Fließkommazahlen
66
2.7.1 Formatierte Ausgabe von Fließkommazahlen
67
2.8 Den ganzzahligen Rest einer Division bestimmen
68
2.9 Konstanten, Konventionen und Restriktionen
69
2.10 Fehlerquelltext
70
2.10.1 Was ist die Aufgabe des Programms?
71
2.10.2 Lösungsvorschlag
71
2.10.3 Die gemeinen Kleinigkeiten
73
2.11 Aufgabenstellung
74
2.11.1 Einige Tipps
74
2.11.2 Lösung zur Aufgabenstellung
75
2.12 Kurz & knapp
76
3 Schleifen und Bedingungen
78
3.1 Was sind Schleifen und Bedingungen?
78
3.2 Die if-Bedingung
79
3.2.1 Blöcke und Einrückungen
80
3.2.2 Arbeit sparen mit else
81
3.2.3 elif
83
3.3 Der Platzhalter pass
85
3.4 Blöcke im interaktiven Modus
86
3.5 Logische Operatoren
86
3.6 PyCharm – Korrekturvorschläge übernehmen
89
3.7 while-Schleifen
90
3.7.1 Eine Schleife mit break vorzeitig beenden
91
3.7.2 continue in while-Schleifen
93
3.7.3 while-else
94
3.8 for-Schleifen
95
3.8.1 Eine einfache Zählschleife
96
3.8.2 Ein Wort zu Schleifenvariablen
97
3.8.3 Die Funktion range() im Detail
98
3.8.4 break und continue in for-Schleifen
99
3.8.5 Sonderfall Unterstrich: die Wegwerfvariable
100
3.9 Ein kurzer Abstecher: Exceptions
101
3.10 Fehlerquelltext
102
3.10.1 Was ist die Aufgabe des Programms?
103
3.10.2 Lösung zum Fehlerquelltext
104
3.11 Aufgabenstellung
105
3.11.1 Einige Tipps
106
3.11.2 Lösungsvorschlag
107
3.12 Ein umfangreicheres Beispiel: Zahlenraten
108
3.12.1 Die Hauptschleife
111
3.12.2 Ein neues Spiel starten
111
3.12.3 Abfrage des Schwierigkeitsgrades und Beenden des Spiels
112
3.13 Kurz & knapp
112
4 Funktionen
116
4.1 Was sind Funktionen?
116
4.2 Eine einfache Funktion definieren
116
4.3 Parameter, Argumente und Rückgabewert
118
4.4 Weitere Möglichkeiten, Funktionen aufzurufen
120
4.5 Globale und lokale Variablen
122
4.5.1 Ein bisschen mehr Verwirrung, bitte!
124
4.5.2 Das Schlüsselwort global
125
4.5.3 Auch Parameter sind lokal
127
4.5.4 Ein Wort zu globalen Variablen
128
4.5.5 Von Schatten und Hauptprogrammen
128
4.6 Standardwerte für Parameter
132
4.7 Schlüsselwortparameter
133
4.8 Wann sollten Funktionen zum Einsatz kommen?
135
4.9 Aufgabenstellung
136
4.9.1 Lösung zur Aufgabenstellung
137
4.10 Vorgehensweise bei größeren Projekten
140
4.11 Rekursion
141
4.12 Fehlerquelltext
142
4.12.1 Was ist die Aufgabe des Programms?
143
4.12.2 Lösung zum Fehlerquelltext
144
4.13 Kurz & knapp
146
5 Klassen
150
5.1 Was ist Objektorientierung?
150
5.2 Eine einfache Klasse definieren
151
5.2.1 Aufbau einer Klasse
152
5.2.2 Erzeugen von Objekten
153
5.2.3 Verwenden der Objekte
154
5.3 Kontrollierter Zugriff auf Attribute: Properties
155
5.3.1 Getter
155
5.3.2 Setter
158
5.3.3 Wann sollten Attribute und wann Properties verwendet werden?
159
5.3.4 Nachträgliches Umstellen auf Properties
160
5.4 Dynamische Attribute
161
5.5 Klassenattribute
164
5.5.1 Stolpersteine bei Klassenattributen
166
5.6 Statische Methoden
168
5.7 Zwischenstand: Braucht man das wirklich?
170
5.8 Aufgabenstellung
171
5.8.1 Einige Tipps
172
5.8.2 Lösungsvorschlag
173
5.9 Das Gleiche ist nicht dasselbe
175
5.9.1 Für Fortgeschrittene: Parameterübergabe im Detail
178
5.10 None
180
5.11 Vererbung
182
5.11.1 Ein einfaches Beispiel
183
5.11.2 Überschreiben von Methoden
185
5.12 Wie das Smartphone erfunden wurde – oder: Mehrfachvererbung
190
5.13 Für Fortgeschrittene: Binden von Methoden
193
5.13.1 Ein Blick hinter die Kulissen
193
5.13.2 Klassen um eigene Funktionen erweitern
195
5.13.3 Statische Methoden und instanzbezogene Bindung
197
5.14 Überschreiben der Methode __str__()
201
5.15 Und wo ist der Fehlerquelltext?
202
5.16 Kurz & knapp
202
6 Container
208
6.1 Was sind Container?
208
6.1.1 Eine Anmerkung, bevor es losgeht
208
6.2 Listen
209
6.2.1 Listen erzeugen und auf Elemente zugreifen
209
6.2.2 Listen dynamisch erzeugen
210
6.2.3 Elemente löschen oder ersetzen
212
6.2.4 Aufgabenstellung
215
6.2.4.1 Einige Tipps
216
6.2.4.2 Lösung zur Aufgabenstellung
216
6.2.5 Sortieren von Listen
217
6.2.5.1 Eigene Sortierfunktionen
219
6.2.5.2 Eine weitere Möglichkeit der Sortierung: sorted
221
6.2.5.3 Für Fortgeschrittene: lambda – anonyme Funktionen
222
6.2.6 Listen verknüpfen
225
6.2.7 Nicht nur für Fortgeschrittene: tiefes und flaches Kopieren
226
6.3 Tupel
228
6.3.1 Unterschiede zu Listen
228
6.3.2 Vorsicht: Instanzen in Tupeln können geändert werden
230
6.3.3 Mehrere Rückgabewerte mit Tupeln
231
6.3.4 Für Fortgeschrittene: namedtuple
233
6.4 Strings
235
6.4.1 Für Fortgeschrittene: Darum sind Strings unveränderlich
236
6.4.2 Slicing
238
6.4.3 Arbeiten mit Strings
240
6.4.4 Strings verbinden
240
6.4.5 Zerlegen und wieder zusammensetzen: split und join
242
6.4.6 Strings „aufbereiten“
244
6.4.7 Ändern der Groß- und Kleinschreibung
246
6.4.8 Strings durchsuchen
247
6.4.9 Aufgabenstellung
249
6.4.9.1 Einige Tipps
250
6.4.9.2 Lösungsvorschlag
250
6.4.10 Ersetzungen durchführen
252
6.5 Dictionaries
254
6.5.1 Grundlagen von Dictionaries
254
6.5.2 Vorsicht beim Zugriff!
255
6.5.3 Dictionaries durchlaufen und verändern
257
6.5.4 Elemente aus einem Dictionary entfernen
259
6.6 Fehlerquelltext
261
6.6.1 Was ist die Aufgabe des Programms?
261
6.6.2 Lösung zum Fehlerquelltext
262
6.7 Sets und Frozensets
264
6.7.1 Einfache Sets/Frozensets erzeugen
264
6.7.2 Sets: Elemente hinzufügen und entfernen
266
6.7.3 Mengenoperationen
267
6.8 Kurz & knapp
271
7 Exceptions
280
7.1 Was sind Exceptions?
280
7.2 Fehler? Die passieren mir doch nicht!
280
7.3 Die Mechanik von Exceptions
282
7.4 Abfangen unterschiedlicher Exceptions
284
7.5 Alle Exceptions fangen
286
7.6 Eigene Exceptions
288
7.7 else und finally
291
7.8 Einige allgemeine Tipps
294
7.9 Kurz & knapp
298
8 Module und Pakete
302
8.1 Module
302
8.1.1 Grundlagen
303
8.1.2 Dokumentation von Modulen
305
8.1.3 Umbenennen eines Namensraums
307
8.1.4 Selektives Importieren
308
8.1.5 Namensräume haben ihren Sinn
309
8.1.6 Batteries included!
309
8.1.7 Reihenfolge beim Importieren
310
8.1.8 Eigene Module in mehreren Projekten nutzen
311
8.1.9 Tipps für das Schreiben von Modulen
311
8.1.10 Automatische Ausführung beim Import verhindern
313
8.2 Pakete
314
8.2.1 Importieren von Modulen aus Paketen
315
8.2.2 Reguläre Pakete
316
8.2.3 Namespace Packages
317
8.2.4 Unterscheidung der Paketarten
318
8.3 Kurz & knapp
319
9 Dateien und Dateisystem
322
9.1 Lesen und Schreiben von Dateien
322
9.1.1 Eine einfache Textdatei auslesen
323
9.1.2 Fehler beim Öffnen von Dateien
324
9.1.3 Eine Datei schrittweise auslesen
325
9.1.4 Zeilenweises Auslesen von Textdateien
327
9.1.5 Textdateien schreiben
328
9.1.6 Übersicht möglicher Modi der Funktion open()
330
9.1.7 Aufgabenstellung
331
9.2 Dateien und Dateisystem
331
9.2.1 Verzeichnisse
332
9.2.2 Pfade und Prüfung auf deren Existenz
333
9.2.3 Pfade und Plattformunabhängigkeit
335
9.2.4 Verzeichnisse und Dateien erzeugen und löschen
336
9.2.5 Verzeichnisstrukturen erzeugen und löschen
339
9.2.6 Umbenennen von Verzeichnissen und Dateien
341
9.2.7 Kopieren und Verschieben
343
9.3 Kurz & knapp
345
10 GUI-Programmierung mit tkinter
350
10.1 Warum gerade tkinter?
350
10.2 Die Layout-Manager
351
10.2.1 Absolute Positionierung
351
10.2.2 Der pack-Manager
352
10.2.3 Der grid-Manager
357
10.2.4 Welcher Manager soll es sein?
359
10.3 Flexible Fenstergröße
360
10.4 Konfiguration von Widgets
363
10.5 Steuerelemente im Detail
365
10.5.1 Buttons
365
10.5.2 Kontrollvariablen
367
10.5.3 Eingabefelder
368
10.5.4 Textboxen
369
10.5.5 Checkboxen
373
10.5.6 Radiobuttons
375
10.5.7 Aufgabenstellung
376
10.5.8 Lösungsvorschlag
377
10.5.9 Listboxen
378
10.5.10 Listbox mit Scrollbalken
381
10.6 Fehlerquelltext
382
10.6.1 Was ist die Aufgabe des Programms?
382
10.6.2 Lösung zum Fehlerquelltext
383
10.7 Dialogfenster
385
10.8 Menüs
388
10.8.1 Einfache Menüs
388
10.8.2 Untermenüs
389
10.9 Kurz & knapp
391
11 Debugging
396
11.1 Was ist ein Debugger?
397
11.2 Eine einfache Fehlersuche
397
11.2.1 Haltepunkte setzen und entfernen
398
11.2.2 Das Programm durchlaufen und Werte betrachten
399
11.2.3 Geht es auch ohne Haltepunkte?
402
11.2.4 Interaktive Fehlersuche mit der Python-Konsole
403
11.3 Debuggen von Funktionen und Methoden
405
11.3.1 In Funktionen springen
406
11.3.2 Abschnitte überspringen und Funktionen verlassen
407
11.3.3 Clever springen
408
11.4 Watches
409
11.5 Haltepunkte im Detail
411
11.5.1 Ein Beispiel zum Experimentieren
411
11.5.2 Verwalten von Haltepunkten
412
11.5.3 Unterbrechen oder nicht?
416
11.5.4 Bedingte Haltepunkte
416
11.5.5 Protokollierung
417
11.5.6 Temporäre Haltepunkte
418
11.5.7 Verkettete Haltepunkte
419
11.5.8 Haltepunkte für Exceptions
419
11.5.9 Kombination der Optionen
420
11.6 Einsatz in der Praxis
421
12 Versionsverwaltung mit Git
422
12.1 Der vermeintlich leichte Weg
422
12.2 Wie funktionieren Versionskontrollsysteme?
423
12.2.1 Verallgemeinerte Arbeitsweise
423
12.2.2 Zentrale und verteilte Versionskontrolle
424
12.3 Was ist Git?
424
12.4 Interessiert mich nicht, ich arbeite alleine!
426
12.5 Vorbereitungen
426
12.5.1 Git unter Windows installieren
426
12.5.2 Git unter macOS installieren
427
12.5.3 Git unter Linux installieren
428
12.5.4 GitHub
428
12.6 Los geht’s – Git lokal verwenden
429
12.6.1 Ein bestehendes Projekt unter Versionskontrolle stellen
429
12.6.2 Dateien hinzufügen
431
12.6.3 Commit/Einchecken
432
12.6.4 Änderungen vornehmen und überprüfen
433
12.6.5 Änderungen rückgängig machen
435
12.6.6 Betrachten der Historie
436
12.6.7 Zu älteren Versionen zurückkehren – Möglichkeit 1
438
12.6.8 Dateien ignorieren
439
12.7 Zusammenarbeit über ein Remote Repository
440
12.7.1 Projekt auf GitHub veröffentlichen
441
12.7.2 Ein Repository klonen
441
12.7.3 Änderungen pushen
443
12.7.4 Pull
443
12.7.5 Wer hat’s erfunden?
444
12.7.6 Automatisches Merging
444
12.7.7 Mergen und Konflikte beheben
445
12.8 Branching
449
12.8.1 Um was geht es?
449
12.8.2 Einen Branch erzeugen und damit arbeiten
450
12.8.3 Zwischen Branches wechseln
452
12.8.4 Branches mergen
452
12.8.5 Branches pushen
454
12.8.6 Fetch
454
12.8.7 Zu älteren Versionen zurückkehren – Möglichkeit 2
455
12.9 Weitere nützliche Features
455
12.9.1 Stashing – Änderungen temporär speichern
456
12.9.2 Commits korrigieren
458
12.9.3 Tagging
458
12.10 Noch ein paar Tipps
459
12.10.1 Zwei einfache Branching-Modelle
459
12.10.2 Atomare Commits
460
12.10.3 Test-Repository griffbereit halten
461
12.10.4 Andere Git-Clients
461
12.11 Kurz & knapp
462
13 Minecraft auf dem Raspberry Pi
466
13.1 Um was geht es in diesem Kapitel?
466
13.1.1 Der Raspberry Pi – ein kleines Kraftpaket
466
13.1.2 Minecraft Pi
467
13.1.3 Was wird benötigt?
468
13.2 Der Sprung ins kalte Wasser
469
13.3 Die Entwicklungsumgebungen
469
13.4 Den Raspberry Pi einrichten
470
13.4.1 Erstellen der SD-Karte
470
13.4.2 Einstellen des Tastaturlayouts
471
13.4.3 Minecraft starten
471
13.4.4 Die Steuerung
471
13.5 Der erste Testlauf
473
13.5.1 Arbeiten mit IDLE
473
13.5.2 Arbeiten mit Thonny
475
13.6 Das Begleitmaterial
476
13.7 Die Minecraft Python API
476
13.7.1 Quellen und weitere Informationen:
477
13.7.2 Eine Übersicht der Minecraft API
477
13.7.3 Die Klasse Minecraft
477
13.7.4 Die Klasse CmdCamera
480
13.7.5 Die Klasse CmdPlayer
481
13.7.6 Die Klasse CmdEntity
481
13.7.7 Die Klasse Block
482
13.7.7.1 Eine Übersicht der wichtigsten Blöcke
482
13.7.8 Noch einmal alles zusammen
483
13.8 Beispiele zu Schleifen und Bedingungen
485
13.8.1 Blocktypen ausprobieren
485
13.8.2 Spielfigur automatisch durch die Welt bewegen
487
13.8.3 Eine Treppe bauen
488
13.8.4 Eine Pyramide bauen
489
13.9 Beispiele zu Funktionen
491
13.9.1 Swimmingpools bauen
491
13.9.2 Moderne Kunst?
493
13.10 Beispiele zu Klassen
496
13.10.1 Blöcke regnen lassen
496
13.10.2 Blinklichter
499
13.11 Beispiele zu Containern
502
13.11.1 Lichterkette
502
13.11.2 Mengenoperationen
504
13.12 Ein Beispiel zu Modulen und Paketen
506
13.13 exit() – wie geht es weiter?
509
Index
510
© 2009-2024 ciando GmbH