E-Book, Deutsch, 1066 Seiten
Reihe: mitp Professional
Weigend Python 3
1. Auflage 2022
ISBN: 978-3-7475-0545-8
Verlag: mitp Verlags GmbH & Co.KG
Format: PDF
Kopierschutz: 1 - PDF Watermark
Lernen und professionell anwenden. Das umfassende Praxisbuch
E-Book, Deutsch, 1066 Seiten
Reihe: mitp Professional
ISBN: 978-3-7475-0545-8
Verlag: mitp Verlags GmbH & Co.KG
Format: PDF
Kopierschutz: 1 - PDF Watermark
Zielgruppe
Programmierer
Autoren/Hrsg.
Weitere Infos & Material
1;Cover;1
2;Titel;5
3;Impressum;6
4;Inhalt;7
5;Einleitung;25
6;Kapitel 1: Grundlagen;29
6.1;1.1 Was ist Programmieren?;29
6.2;1.2 Hardware und Software;30
6.3;1.3 Programm als Algorithmus;31
6.4;1.4 Syntax und Semantik;32
6.5;1.5 Interpreter und Compiler;32
6.6;1.6 Programmierparadigmen;34
6.7;1.7 Objektorientierte Programmierung;35
6.7.1;1.7.1 Strukturelle Zerlegung;35
6.7.2;1.7.2 Die Welt als System von Objekten;36
6.7.3;1.7.3 Objekte besitzen Attribute und beherrschen Methoden;37
6.7.4;1.7.4 Objekte sind Instanzen von Klassen;38
6.8;1.8 Hintergrund: Geschichte der objektorientierten Programmierung;38
6.9;1.9 Aufgaben;39
6.10;1.10 Lösungen;40
7;Kapitel 2: Der Einstieg – Python im interaktiven Modus;41
7.1;2.1 Python installieren;41
7.2;2.2 Python im interaktiven Modus;44
7.2.1;2.2.1 Start des Python-Interpreters in einem Konsolenfenster;44
7.2.2;2.2.2 Die IDLE-Shell;45
7.2.3;2.2.3 Die ersten Python-Befehle ausprobieren;45
7.2.4;2.2.4 Hotkeys;46
7.3;2.3 Objekte;47
7.4;2.4 Namen;49
7.5;2.5 Hintergrund: Syntax-Regeln für Bezeichner;49
7.6;2.6 Schlüsselwörter;50
7.7;2.7 Anweisungen;51
7.7.1;2.7.1 Ausdruckanweisungen;52
7.7.2;2.7.2 Import-Anweisungen;56
7.7.3;2.7.3 Zuweisungen;57
7.7.4;2.7.4 Erweiterte Zuweisungen;61
7.7.5;2.7.5 Hintergrund: Dynamische Typisierung;61
7.8;2.8 Aufgaben;62
7.9;2.9 Lösungen;64
8;Kapitel 3: Python-Skripte;67
8.1;3.1 Ausprobieren, nachmachen, besser machen!;67
8.2;3.2 Skripte editieren und ausführen mit IDLE;67
8.3;3.3 Ausführen eines Python-Skripts;69
8.4;3.4 Kommentare;71
8.5;3.5 Die Zeilenstruktur von Python-Programmen;72
8.6;3.6 Das EVA-Prinzip;75
8.7;3.7 Phasen der Programmentwicklung;77
8.8;3.8 Guter Programmierstil;78
8.9;3.9 Hintergrund: Die Kunst des Fehlerfindens;80
8.10;3.10 Weitere Entwicklungsumgebungen für Python;82
8.10.1;3.10.1 Thonny – eine Entwicklungsumgebung für Python-Einsteiger;82
8.10.2;3.10.2 Python in der Cloud;83
8.10.3;3.10.3 Jupyter Notebook und Google Colab;84
8.10.4;3.10.4 Entwicklungsumgebungen für Profis;84
8.11;3.11 Aufgaben;85
8.12;3.12 Lösungen;86
9;Kapitel 4: Standard-Datentypen;89
9.1;4.1 Daten als Objekte;89
9.2;4.2 Fundamentale Datentypen im Überblick;91
9.3;4.3 Typen und Klassen;92
9.4;4.4 NoneType;93
9.5;4.5 Wahrheitswerte – der Datentyp bool;93
9.6;4.6 Ganze Zahlen;94
9.7;4.7 Gleitkommazahlen;96
9.8;4.8 Komplexe Zahlen;97
9.9;4.9 Arithmetische Operatoren für Zahlen;98
9.10;4.10 Sequenzen;103
9.10.1;4.10.1 Zeichenketten (Strings);104
9.10.2;4.10.2 Bytestrings;106
9.10.3;4.10.3 Tupel;107
9.10.4;4.10.4 Liste;108
9.10.5;4.10.5 Bytearray;109
9.10.6;4.10.6 Einige Grundoperationen für Sequenzen;109
9.10.7;4.10.7 Veränderbare und unveränderbare Sequenzen;111
9.11;4.11 Mengen;112
9.12;4.12 Dictionaries;113
9.13;4.13 Typumwandlungen;113
9.13.1;4.13.1 int();115
9.13.2;4.13.2 float();115
9.13.3;4.13.3 complex();116
9.13.4;4.13.4 bool();116
9.13.5;4.13.5 str();116
9.13.6;4.13.6 dict(), list() und tuple();117
9.14;4.14 Aufgaben;117
9.15;4.15 Lösungen;120
10;Kapitel 5: Kontrollstrukturen;125
10.1;5.1 Einfache Bedingungen;125
10.1.1;5.1.1 Vergleiche;125
10.1.2;5.1.2 Zugehörigkeit zu einer Menge (in, not in);129
10.1.3;5.1.3 Beliebige Ausdrücke als Bedingungen;129
10.2;5.2 Zusammengesetzte Bedingungen – logische Operatoren;130
10.2.1;5.2.1 Negation (not);130
10.2.2;5.2.2 Konjunktion (and);131
10.2.3;5.2.3 Disjunktion (or);132
10.2.4;5.2.4 Formalisierung von Bedingungen;133
10.2.5;5.2.5 Hinweis zum Programmierstil;134
10.3;5.3 Programmverzweigungen (bedingte Anweisungen);134
10.3.1;5.3.1 Einseitige Verzweigung (if);135
10.3.2;5.3.2 Zweiseitige Verzweigung (if-else);135
10.3.3;5.3.3 Mehrfache Fallunterscheidung (elif);136
10.3.4;5.3.4 Bedingte Ausdrücke;138
10.4;5.4 Bedingte Wiederholung (while);138
10.4.1;5.4.1 Endlosschleifen;139
10.5;5.5 Iteration über eine Kollektion (for);141
10.5.1;5.5.1 Zählschleifen – Verwendung von range();142
10.5.2;5.5.2 Verschachtelte Iterationen;143
10.5.3;5.5.3 Vertiefung: Iterative Berechnung rekursiver Folgen;145
10.6;5.6 Abbruch einer Schleife mit break;145
10.6.1;5.6.1 Abbruch eines Schleifendurchlaufs mit continue;146
10.7;5.7 Abfangen von Ausnahmen mit try;147
10.7.1;5.7.1 try...except;148
10.8;5.8 Aufgaben;150
10.9;5.9 Lösungen;154
11;Kapitel 6: Funktionen;159
11.1;6.1 Aufruf von Funktionen;159
11.2;6.2 Definition von Funktionen;162
11.3;6.3 Schrittweise Verfeinerung;164
11.4;6.4 Ausführung von Funktionen;168
11.4.1;6.4.1 Globale und lokale Namen;168
11.4.2;6.4.2 Seiteneffekte – die global-Anweisung;171
11.4.3;6.4.3 Parameterübergabe;172
11.5;6.5 Voreingestellte Parameterwerte;174
11.5.1;6.5.1 Schlüsselwort-Argumente;176
11.6;6.6 Funktionen mit beliebiger Anzahl von Parametern;178
11.7;6.7 Lokale Funktionen;179
11.8;6.8 Rekursive Funktionen;180
11.9;6.9 Experimente zur Rekursion mit der Turtle-Grafik;182
11.9.1;6.9.1 Turtle-Befehle im interaktiven Modus;182
11.9.2;6.9.2 Eine rekursive Spirale;183
11.9.3;6.9.3 Baumstrukturen;185
11.9.4;6.9.4 Künstlicher Blumenkohl – selbstähnliche Bilder;186
11.10;6.10 Rekursive Zahlenfunktionen;188
11.11;6.11 Hintergrund: Wie werden rekursive Funktionen ausgeführt?;189
11.11.1;6.11.1 Execution Frames;189
11.11.2;6.11.2 Rekursionstiefe;190
11.12;6.12 Funktionen als Objekte;192
11.12.1;6.12.1 Hintergrund: Typen sind keine Funktionen;193
11.13;6.13 Lambda-Formen;193
11.14;6.14 Funktionsannotationen: Typen zuordnen;194
11.15;6.15 Hinweise zum Programmierstil;195
11.15.1;6.15.1 Allgemeines;195
11.15.2;6.15.2 Funktionsnamen;195
11.15.3;6.15.3 Kommentierte Parameter;196
11.15.4;6.15.4 Docstrings;196
11.16;6.16 Aufgaben;198
11.17;6.17 Lösungen;201
12;Kapitel 7: Sequenzen, Mengen und Generatoren;205
12.1;7.1 Gemeinsame Operationen für Sequenzen;205
12.1.1;7.1.1 Zugriff auf Elemente einer Sequenz;206
12.1.2;7.1.2 Slicing von Sequenzen;207
12.1.3;7.1.3 Auspacken (unpacking);208
12.2;7.2 Vertiefung: Rekursive Funktionen für Sequenzen;209
12.2.1;7.2.1 Rekursives Summieren;209
12.2.2;7.2.2 Rekursive Suche;209
12.3;7.3 Tupel;211
12.4;7.4 Listen;212
12.4.1;7.4.1 Eine Liste erzeugen;212
12.4.2;7.4.2 Eine Liste verändern;215
12.4.3;7.4.3 Flache und tiefe Kopien;217
12.4.4;7.4.4 Listen sortieren;218
12.4.5;7.4.5 Binäre Suche in einer sortierten Liste;220
12.4.6;7.4.6 Zwei Sortierverfahren im Vergleich;221
12.4.7;7.4.7 Modellieren mit Listen – Beispiel: die Charts;225
12.5;7.5 Generatoren;229
12.5.1;7.5.1 Generatorausdrücke;230
12.5.2;7.5.2 Generatorfunktionen;230
12.5.3;7.5.3 Iteratoren;232
12.5.4;7.5.4 Verwendung von Generatoren;233
12.6;7.6 Mengen;233
12.6.1;7.6.1 Operationen für Mengen;235
12.6.2;7.6.2 Modellieren mit Mengen – Beispiel: Graphen;236
12.7;7.7 Aufgaben;239
12.8;7.8 Lösungen;241
13;Kapitel 8: Dictionaries;243
13.1;8.1 Operationen für Dictionaries;243
13.2;8.2 Wie erstellt man ein Dictionary?;244
13.2.1;8.2.1 Definition mit einem Dictionary-Display;244
13.2.2;8.2.2 Schrittweiser Aufbau eines Dictionarys;246
13.2.3;8.2.3 Ein Dictionary aus anderen Dictionaries zusammensetzen – update();247
13.3;8.3 Zugriff auf Daten in einem Dictionary;247
13.3.1;8.3.1 Vergebliche Zugriffsversuche;247
13.4;8.4 Praxisbeispiel: Vokabeltrainer;248
13.5;8.5 Typische Fehler;250
13.6;8.6 Aufgaben;250
13.7;8.7 Lösungen;253
14;Kapitel 9: Ein- und Ausgabe;257
14.1;9.1 Streams;257
14.1.1;9.1.1 Die Rolle der Streams bei E/A-Operationen;257
14.1.2;9.1.2 Was ist ein Stream?;258
14.1.3;9.1.3 Eine Datei öffnen;259
14.1.4;9.1.4 Speichern einer Zeichenkette;260
14.1.5;9.1.5 Laden einer Zeichenkette aus einer Datei;262
14.1.6;9.1.6 Absolute und relative Pfade;262
14.1.7;9.1.7 Zwischenspeichern, ohne zu schließen;264
14.1.8;9.1.8 Zugriff auf Streams (lesen und schreiben);265
14.2;9.2 Mehr Zuverlässigkeit durch try- und with-Anweisungen;267
14.2.1;9.2.1 try...finally;268
14.2.2;9.2.2 with-Anweisungen;269
14.3;9.3 Objekte speichern mit pickle;270
14.3.1;9.3.1 Funktionen zum Speichern und Laden;270
14.4;9.4 Die Streams sys.stdin und sys.stdout;272
14.5;9.5 Ausgabe von Werten mit der print()-Funktion;273
14.5.1;9.5.1 Anwendung: Ausgabe von Tabellen;274
14.6;9.6 Kommandozeilen-Argumente (Optionen);275
14.6.1;9.6.1 Zugriff auf Optionen;276
14.6.2;9.6.2 Beispiel;276
14.6.3;9.6.3 Skripte mit Optionen testen;277
14.7;9.7 Aufgaben;277
14.8;9.8 Lösungen;280
15;Kapitel 10: Definition eigener Klassen;285
15.1;10.1 Klassen und Objekte;285
15.2;10.2 Definition von Klassen;287
15.3;10.3 Objekte (Instanzen);289
15.4;10.4 Zugriff auf Attribute – Sichtbarkeit;292
15.4.1;10.4.1 Öffentliche Attribute;292
15.4.2;10.4.2 Private Attribute;293
15.4.3;10.4.3 Properties;295
15.4.4;10.4.4 Dynamische Erzeugung von Attributen;297
15.5;10.5 Methoden;297
15.5.1;10.5.1 Polymorphismus – überladen von Operatoren;298
15.5.2;10.5.2 Vertiefung: Objekte ausführbar machen – die Methode __call__();301
15.5.3;10.5.3 Statische Methoden;302
15.6;10.6 Abstraktion, Verkapselung und Geheimnisprinzip;304
15.6.1;10.6.1 Abstraktion;304
15.6.2;10.6.2 Verkapselung;304
15.6.3;10.6.3 Geheimnisprinzip;304
15.7;10.7 Vererbung;305
15.7.1;10.7.1 Spezialisierungen;305
15.7.2;10.7.2 Beispiel: Die Klasse Konto – eine Spezialisierung der Klasse Geld;306
15.7.3;10.7.3 Vertiefung: Standardklassen als Basisklassen;309
15.8;10.8 Hinweise zum Programmierstil;311
15.8.1;10.8.1 Schreibweise;311
15.8.2;10.8.2 Sichtbarkeit;311
15.8.3;10.8.3 Dokumentation von Klassen;312
15.9;10.9 Typische Fehler;313
15.9.1;10.9.1 Versehentliches Erzeugen neuer Attribute;313
15.9.2;10.9.2 Verwechseln von Methoden und Attributen;313
15.10;10.10 Aufgaben;314
15.11;10.11 Lösungen;317
16;Kapitel 11: Klassen wiederverwenden – Module;323
16.1;11.1 Testen einer Klasse in einem lauffähigen Stand-alone- Skript;323
16.2;11.2 Module speichern und importieren;325
16.3;11.3 Den Zugang zu einem Modul sicherstellen;327
16.3.1;11.3.1 Erweitern der Verzeichnisliste sys.path;327
16.3.2;11.3.2 Anwendungsbeispiel: Eine interaktive Testumgebung;327
16.3.3;11.3.3 Kompilieren von Modulen;328
16.4;11.4 Programmierstil: Verwendung und Dokumentation von Modulen;329
17;Kapitel 12: Objektorientiertes Modellieren;331
17.1;12.1 Phasen einer objektorientierten Software-Entwicklung;331
17.1.1;12.1.1 Objektorientierte Analyse (OOA);331
17.1.2;12.1.2 Objektorientierter Entwurf (OOD);332
17.1.3;12.1.3 Objektorientierte Programmierung (OOP);332
17.2;12.2 Beispiel: Modell eines Wörterbuchs;332
17.2.1;12.2.1 OOA: Entwicklung einer Klassenstruktur;332
17.2.2;12.2.2 OOD: Entwurf einer Klassenstruktur zur Implementierung in Python;336
17.2.3;12.2.3 OOP: Implementierung der Klassenstruktur;338
17.3;12.3 Assoziationen zwischen Klassen;342
17.3.1;12.3.1 Reflexive Assoziationen;342
17.3.2;12.3.2 Aggregation;344
17.4;12.4 Beispiel: Management eines Musicals;345
17.4.1;12.4.1 OOA;345
17.4.2;12.4.2 OOD;347
17.4.3;12.4.3 OOP;347
17.5;12.5 Aufgaben;357
17.6;12.6 Lösungen;358
18;Kapitel 13: Textverarbeitung;363
18.1;13.1 Standardmethoden zur Verarbeitung von Zeichenketten;363
18.1.1;13.1.1 Formatieren;364
18.1.2;13.1.2 Schreibweise;364
18.1.3;13.1.3 Tests;365
18.1.4;13.1.4 Entfernen und Aufspalten;366
18.1.5;13.1.5 Suchen und Ersetzen;367
18.2;13.2 Codierung und Decodierung;367
18.2.1;13.2.1 Platonische Zeichen und Unicode;367
18.2.2;13.2.2 Vertiefung: Zeichenketten durch Bytefolgen darstellen;369
18.3;13.3 Automatische Textproduktion;371
18.3.1;13.3.1 Texte mit variablen Teilen – Anwendung der String-Methode format();371
18.3.2;13.3.2 Vertiefung: Eine Tabelle erstellen;374
18.3.3;13.3.3 Mahnbriefe;375
18.3.4;13.3.4 Textuelle Repräsentation eines Objekts;376
18.3.5;13.3.5 F-Strings;378
18.4;13.4 Analyse von Texten;379
18.4.1;13.4.1 Chat-Bots;379
18.4.2;13.4.2 Textanalyse mit einfachen Vorkommenstests;380
18.5;13.5 Reguläre Ausdrücke;382
18.5.1;13.5.1 Die Funktion findall() aus dem Modul re;383
18.5.2;13.5.2 Aufbau eines regulären Ausdrucks;383
18.5.3;13.5.3 Objekte für reguläre Ausdrücke;386
18.5.4;13.5.4 Strings untersuchen mit search();387
18.5.5;13.5.5 Textpassagen extrahieren mit findall();388
18.5.6;13.5.6 Zeichenketten zerlegen mit split();389
18.5.7;13.5.7 Teilstrings ersetzen mit sub();390
18.5.8;13.5.8 Match-Objekte;391
18.6;13.6 Den Computer zum Sprechen bringen – Sprachsynthese;393
18.6.1;13.6.1 Buchstabieren;395
18.6.2;13.6.2 Den Klang der Stimme verändern;397
18.7;13.7 Aufgaben;400
18.8;13.8 Lösungen;403
19;Kapitel 14: Systemfunktionen;411
19.1;14.1 Das Modul sys – die Schnittstelle zum Laufzeitsystem;411
19.1.1;14.1.1 Informationen über die aktuelle Systemumgebung;412
19.1.2;14.1.2 Standardeingabe und -ausgabe;413
19.1.3;14.1.3 Die Objektverwaltung beobachten mit getrefcount();414
19.1.4;14.1.4 Ausführung eines Skripts beenden;415
19.2;14.2 Das Modul os – die Schnittstelle zum Betriebssystem;415
19.2.1;14.2.1 Dateien und Verzeichnisse suchen;416
19.2.2;14.2.2 Hintergrund: Zugriffsrechte abfragen und ändern (Windows und Unix);417
19.2.3;14.2.3 Dateien und Verzeichnisse anlegen und modifizieren;419
19.2.4;14.2.4 Merkmale von Dateien und Verzeichnissen abfragen;420
19.2.5;14.2.5 Pfade verarbeiten;421
19.2.6;14.2.6 Hintergrund: Umgebungsvariablen;423
19.2.7;14.2.7 Systematisches Durchlaufen eines Verzeichnisbaumes;424
19.3;14.3 Datum und Zeit;426
19.3.1;14.3.1 Funktionen des Moduls time;427
19.3.2;14.3.2 Sekundenformat;427
19.3.3;14.3.3 Zeit-Tupel;428
19.3.4;14.3.4 Zeitstrings;429
19.3.5;14.3.5 Einen Prozess unterbrechen mit sleep();430
19.4;14.4 Zeitberechnungen mit dem Modul datetime;430
19.4.1;14.4.1 Die Klasse datetime;430
19.4.2;14.4.2 Die Zeitzone;432
19.4.3;14.4.3 Die Klasse timedelta;433
19.5;14.5 Aufgaben;433
19.6;14.6 Lösungen;434
20;Kapitel 15: Grafische Benutzungsoberflächen mit tkinter;439
20.1;15.1 Ein einführendes Beispiel;440
20.2;15.2 Einfache Widgets;443
20.3;15.3 Die Master-Slave-Hierarchie;444
20.4;15.4 Optionen der Widgets;445
20.4.1;15.4.1 Optionen bei der Instanziierung setzen;445
20.4.2;15.4.2 Widget-Optionen nachträglich konfigurieren;446
20.4.3;15.4.3 Fonts;447
20.4.4;15.4.4 Farben;448
20.4.5;15.4.5 Rahmen;448
20.4.6;15.4.6 Die Größe eines Widgets;449
20.4.7;15.4.7 Leerraum um Text;451
20.5;15.5 Gemeinsame Methoden der Widgets;452
20.6;15.6 Die Klasse Tk;452
20.7;15.7 Die Klasse Button;453
20.8;15.8 Die Klasse Label;453
20.8.1;15.8.1 Dynamische Konfiguration der Beschriftung;454
20.8.2;15.8.2 Verwendung von Kontrollvariablen;455
20.9;15.9 Die Klasse Entry;457
20.10;15.10 Die Klasse Radiobutton;459
20.11;15.11 Die Klasse Checkbutton;461
20.12;15.12 Die Klasse Scale;463
20.13;15.13 Die Klasse Frame;465
20.14;15.14 Aufgaben;465
20.15;15.15 Lösungen;466
21;Kapitel 16: Layout;471
21.1;16.1 Der Packer;471
21.2;16.2 Layout-Fehler;473
21.3;16.3 Raster-Layout;474
21.4;16.4 Vorgehensweise bei der GUI-Entwicklung;478
21.4.1;16.4.1 Die Benutzungsoberfläche gestalten;481
21.4.2;16.4.2 Funktionalität hinzufügen;484
21.5;16.5 Aufgaben;485
21.6;16.6 Lösungen;488
22;Kapitel 17: Grafik;499
22.1;17.1 Die tkinter-Klasse Canvas;499
22.1.1;17.1.1 Generierung grafischer Elemente – ID, Positionierung und Display-Liste;500
22.1.2;17.1.2 Grafische Elemente gestalten;502
22.1.3;17.1.3 Visualisieren mit Kreisdiagrammen;504
22.2;17.2 Die Klasse PhotoImage;507
22.2.1;17.2.1 Eine Pixelgrafik erzeugen;508
22.2.2;17.2.2 Fotos analysieren und verändern;510
22.3;17.3 Bilder in eine Benutzungsoberfläche einbinden;513
22.3.1;17.3.1 Icons auf Schaltflächen;513
22.3.2;17.3.2 Hintergrundbilder;514
22.3.3;17.3.3 Hintergrund: Das PPM-Format;516
22.4;17.4 Die Python Imaging Library (PIL);517
22.4.1;17.4.1 Installation eines Moduls mit pip;517
22.4.2;17.4.2 Mit PIL beliebige Bilddateien einbinden;518
22.4.3;17.4.3 Steganografie – Informationen in Bildern verstecken;519
22.5;17.5 Aufgaben;521
22.6;17.6 Lösungen;522
23;Kapitel 18: Event-Verarbeitung;527
23.1;18.1 Einführendes Beispiel;528
23.2;18.2 Event-Sequenzen;530
23.2.1;18.2.1 Event-Typen;530
23.2.2;18.2.2 Qualifizierer für Maus- und Tastatur-Events;530
23.2.3;18.2.3 Modifizierer;532
23.3;18.3 Beispiel: Tastaturereignisse verarbeiten;532
23.4;18.4 Programmierung eines Eventhandlers;534
23.4.1;18.4.1 Beispiel für eine Event-Auswertung;535
23.5;18.5 Bindemethoden;536
23.6;18.6 Aufgaben;536
23.7;18.7 Lösungen;539
24;Kapitel 19: Komplexe Benutzungsoberflächen;545
24.1;19.1 Text-Widgets;545
24.1.1;19.1.1 Methoden der Text-Widgets;546
24.2;19.2 Rollbalken (Scrollbars);548
24.3;19.3 Menüs;549
24.3.1;19.3.1 Die Klasse Menu;550
24.3.2;19.3.2 Methoden der Klasse Menu;550
24.4;19.4 Texteditor mit Menüleiste und Pulldown-Menü;552
24.5;19.5 Dialogboxen;554
24.6;19.6 Applikationen mit mehreren Fenstern;558
24.7;19.7 Aufgaben;561
24.8;19.8 Lösungen;562
25;Kapitel 20: Threads;567
25.1;20.1 Funktionen in einem Thread ausführen;568
25.2;20.2 Thread-Objekte erzeugen – die Klasse Thread;570
25.3;20.3 Aufgaben;573
25.4;20.4 Lösungen;574
26;Kapitel 21: Fehler finden und vermeiden;579
26.1;21.1 Testen von Bedingungen;579
26.1.1;21.1.1 Ausnahmen (Exceptions);579
26.1.2;21.1.2 Testen von Vor- und Nachbedingungen mit assert;580
26.1.3;21.1.3 Vertiefung: Programmabstürze ohne Fehlermeldung;583
26.2;21.2 Debugging-Modus und optimierter Modus;585
26.3;21.3 Ausnahmen gezielt auslösen;586
26.4;21.4 Selbstdokumentation;587
26.5;21.5 Dokumentation eines Programmlaufs mit Log-Dateien;589
26.5.1;21.5.1 Grundfunktionen;589
26.5.2;21.5.2 Beispiel: Logging in der GUI-Programmierung;590
26.6;21.6 Vertiefung: Professionelles Arbeiten mit Logging;591
26.6.1;21.6.1 Logging-Levels;591
26.6.2;21.6.2 Logger-Objekte;596
26.6.3;21.6.3 Das Format der Logging-Meldungen konfigurieren;596
26.7;21.7 Debugging;598
26.7.1;21.7.1 Schaltflächen des Debug-Control-Fensters;599
26.7.2;21.7.2 Breakpoints;599
27;Kapitel 22: Dynamische Webseiten – CGI und WSGI;601
27.1;22.1 Wie funktionieren dynamische Webseiten?;601
27.2;22.2 Wie spät ist es? Aufbau eines CGI-Skripts;603
27.2.1;22.2.1 Die Ausgabe eines CGI-Skripts;603
27.2.2;22.2.2 Wie ist ein CGI-Skript aufgebaut?;604
27.2.3;22.2.3 Verwendung von Schablonen;605
27.2.4;22.2.4 Aufruf mit dem Webbrowser;606
27.2.5;22.2.5 Ein einfacher HTTP-Server;607
27.3;22.3 Kommunikation über interaktive Webseiten;607
27.3.1;22.3.1 Aufbau eines HTML-Formulars;608
27.3.2;22.3.2 Eingabekomponenten in einem HTML-Formular;610
27.4;22.4 Verarbeitung von Eingabedaten mit FieldStorage;612
27.5;22.5 Sonderzeichen handhaben;614
27.6;22.6 CGI-Skripte debuggen;615
27.7;22.7 Der Apache-Webserver;616
27.7.1;22.7.1 Den Apache-Server installieren;617
27.7.2;22.7.2 CGI-Skripte auf dem Apache-Server;618
27.8;22.8 Dynamische Webseiten mit WSGI;618
27.8.1;22.8.1 Einfacher geht’s nicht: Ein Stand-alone-WSGI-Webserver mit wsgiref;619
27.9;22.9 mod_wsgi;620
27.9.1;22.9.1 Installation;620
27.9.2;22.9.2 Vorbereitung;621
27.9.3;22.9.3 Den Apache-Server konfigurieren;621
27.9.4;22.9.4 Ein WSGI-Skript für den Apache-Server;623
27.9.5;22.9.5 Tipps zum Debuggen;623
27.9.6;22.9.6 Zugriff von einem entfernten Rechner im WLAN;624
27.10;22.10 Verarbeitung von Eingabedaten aus Formularen;625
27.11;22.11 Objektorientierte WSGI-Skripte – Beispiel: ein Chatroom;627
27.11.1;22.11.1 Die HTML-Seiten;629
27.11.2;22.11.2 Die Klassen für den Chatroom;631
27.11.3;22.11.3 Skript (Teil 2):;631
27.12;22.12 WSGI-Skripte mit Cookies;634
27.12.1;22.12.1 Besuche zählen;635
28;Kapitel 23: Internet-Programmierung;643
28.1;23.1 Was ist ein Protokoll?;643
28.2;23.2 Übertragung von Dateien mit FTP;644
28.2.1;23.2.1 Das Modul ftplib;644
28.2.2;23.2.2 Navigieren und Downloaden;645
28.2.3;23.2.3 Ein Suchroboter für FTP-Server;647
28.3;23.3 Zugriff auf Webseiten mit HTTP und HTTPS;651
28.3.1;23.3.1 Automatische Auswertung von Webseiten;653
28.4;23.4 Zugriff auf Ressourcen im Internet über deren URL;655
28.4.1;23.4.1 Webseite herunterladen und verarbeiten;655
28.4.2;23.4.2 Projekt: Wie warm wird es heute?;656
28.4.3;23.4.3 Datei herunterladen und speichern;657
28.4.4;23.4.4 Projekt: Filme herunterladen;657
28.5;23.5 E-Mails senden mit SMTP;659
28.6;23.6 Aufgaben;662
28.7;23.7 Lösungen;663
29;Kapitel 24: Datenbanken;671
29.1;24.1 Was ist ein Datenbanksystem?;671
29.2;24.2 Entity-Relationship-Diagramme (ER-Diagramme);672
29.3;24.3 Relationale Datenbanken;673
29.4;24.4 Darstellung von Relationen als Mengen oder Dictionaries;674
29.5;24.5 Das Modul sqlite3;675
29.5.1;24.5.1 Beispiel: Telefonbuch;675
29.5.2;24.5.2 Eine Tabelle anlegen;676
29.5.3;24.5.3 Anfragen an eine Datenbank;677
29.5.4;24.5.4 Datensuche im interaktiven Modus;678
29.5.5;24.5.5 SQL-Anweisungen mit variablen Teilen;680
29.5.6;24.5.6 Vertiefung: SQL-Injection;682
29.6;24.6 Online-Redaktionssystem mit Datenbankanbindung;683
29.6.1;24.6.1 Objektorientierte Analyse (OOA);685
29.6.2;24.6.2 Objektorientierter Entwurf des Systems (OOD);686
29.6.3;24.6.3 Hintergrund: Authentifizieren mit SHA-256;688
29.6.4;24.6.4 Implementierung des Redaktionssystems mit Python (OOP);689
29.7;24.7 Aufgaben;699
29.8;24.8 Lösungen;700
30;Kapitel 25: Testen und Tuning;703
30.1;25.1 Automatisiertes Testen;703
30.2;25.2 Testen mit Docstrings – das Modul doctest;703
30.3;25.3 Praxisbeispiel: Suche nach dem Wort des Jahres;706
30.4;25.4 Klassen testen mit doctest;713
30.4.1;25.4.1 Wie testet man eine Klasse?;713
30.4.2;25.4.2 Normalisierte Whitespaces – doctest-Direktiven;714
30.4.3;25.4.3 Ellipsen verwenden;714
30.4.4;25.4.4 Dictionaries testen;715
30.5;25.5 Gestaltung von Testreihen mit unittest;715
30.5.1;25.5.1 Einführendes Beispiel mit einem Testfall;716
30.5.2;25.5.2 Klassen des Moduls unittest;717
30.5.3;25.5.3 Weiterführendes Beispiel;720
30.6;25.6 Tuning;723
30.6.1;25.6.1 Performance-Analyse mit dem Profiler;723
30.6.2;25.6.2 Praxisbeispiel: Auswertung astronomischer Fotografien;725
30.6.3;25.6.3 Performance-Analyse und Tuning;731
30.7;25.7 Aufgaben;732
30.8;25.8 Lösungen;734
31;Kapitel 26: XML und JSON;741
31.1;26.1 Was ist XML?;741
31.2;26.2 XML-Dokumente;742
31.3;26.3 Ein XML-Dokument als Baum;744
31.4;26.4 DOM;745
31.5;26.5 Das Modul xml.dom.minidom;748
31.5.1;26.5.1 XML-Dokumente und DOM-Objekte;748
31.5.2;26.5.2 Die Basisklasse Node;750
31.5.3;26.5.3 Die Klassen Document, Element und Text;752
31.6;26.6 Attribute von XML-Elementen;754
31.7;26.7 Anwendungsbeispiel 1: Eine XML-basierte Klasse;754
31.8;26.8 Anwendungsbeispiel 2: Datenkommunikation mit XML;757
31.8.1;26.8.1 Überblick;758
31.8.2;26.8.2 Das Client-Programm;759
31.8.3;26.8.3 Das Server-Programm;762
31.9;26.9 JSON;766
31.9.1;26.9.1 JSON-Texte decodieren;767
31.9.2;26.9.2 Decodierungsfehler;768
31.9.3;26.9.3 Ein Dictionary als JSON-Objekt speichern: Kompakt oder gut lesbar?;768
31.9.4;26.9.4 Projekt: Verarbeitung von Wetterdaten;771
31.10;26.10 Aufgaben;774
31.11;26.11 Lösungen;775
32;Kapitel 27: Modellieren mit Kellern, Schlangen und Graphen;777
32.1;27.1 Stack (Keller, Stapel);777
32.2;27.2 Queue (Schlange);780
32.3;27.3 Graphen;781
32.4;27.4 Aufgaben;791
32.5;27.5 Lösungen;793
33;Kapitel 28: Benutzungsoberflächen mit Qt;797
33.1;28.1 Was bietet PyQt5?;797
33.2;28.2 PyQt5 erkunden;798
33.3;28.3 Wie arbeitet PyQt? Applikation und Fenster;798
33.4;28.4 Eine objektorientierte Anwendung mit PyQt5;799
33.5;28.5 Ein Webbrowser;800
33.6;28.6 Interaktive Widgets;804
33.7;28.7 Label – Ausgabe von Text und Bild;805
33.8;28.8 Signale;806
33.9;28.9 Checkboxen und Radiobuttons;807
33.10;28.10 Auswahlliste (ComboBox);810
33.11;28.11 Gemeinsame Operationen der Widgets;812
33.12;28.12 Spezielle Methoden eines Fensters;813
33.13;28.13 Events;815
33.14;28.14 Fonts;816
33.15;28.15 Stylesheets;818
33.16;28.16 Icons;821
33.17;28.17 Messageboxen;821
33.18;28.18 Timer;822
33.19;28.19 Das Qt-Layout unter der Lupe;824
33.19.1;28.19.1 Absolute Positionierung und Größe;824
33.19.2;28.19.2 Raster-Layout;826
33.19.3;28.19.3 Form-Layout;827
33.20;28.20 Browser für jeden Zweck;829
33.20.1;28.20.1 Die Klasse QWebEngineView;829
33.21;28.21 Ein Webbrowser mit Filter;830
33.22;28.22 Surfen mit Geschichte – der Verlauf einer Sitzung;832
33.23;28.23 Aufgaben;834
33.24;28.24 Lösungen;835
34;Kapitel 29: Multimediaanwendungen mit Qt;839
34.1;29.1 Kalender und Textfeld – ein digitales Tagebuch;839
34.1.1;29.1.1 Programmierung;840
34.2;29.2 Kamerabilder;845
34.3;29.3 Dialoge;847
34.3.1;29.3.1 Projekt: Ansichtskarte;849
34.4;29.4 Videoplayer;853
34.4.1;29.4.1 Ein einfacher Videoplayer;853
34.4.2;29.4.2 Videoplayer mit Playlist;857
34.4.3;29.4.3 Regeln zur Änderung der Größe (Size Policy);860
34.4.4;29.4.4 Das Dashboard bei Mausbewegungen einblenden;861
34.5;29.5 Aufgaben;864
34.6;29.6 Lösungen;869
35;Kapitel 30: Rechnen mit NumPy;877
35.1;30.1 NumPy installieren;877
35.2;30.2 Arrays erzeugen;877
35.2.1;30.2.1 Arrays;877
35.2.2;30.2.2 Matrizen und Vektoren;880
35.2.3;30.2.3 Zahlenfolgen;880
35.2.4;30.2.4 Zufallsarrays;881
35.2.5;30.2.5 Spezielle Arrays;882
35.3;30.3 Indizieren;883
35.4;30.4 Slicing;884
35.5;30.5 Arrays verändern;885
35.6;30.6 Arithmetische Operationen;887
35.7;30.7 Funktionen, die elementweise ausgeführt werden;888
35.8;30.8 Einfache Visualisierung;889
35.9;30.9 Matrizenmultiplikation mit dot();890
35.10;30.10 Array-Funktionen und Achsen;891
35.11;30.11 Projekt: Diffusion;893
35.12;30.12 Vergleiche;896
35.13;30.13 Projekt: Wolken am Himmel;896
35.14;30.14 Projekt: Wie versteckt man ein Buch in einem Bild?;899
35.15;30.15 Datenanalyse mit Histogrammen;902
35.16;30.16 Wie funktioniert ein Medianfilter?;905
35.17;30.17 Rechnen mit SciPy;908
35.17.1;30.17.1 Lineare Gleichungssysteme lösen;908
35.17.2;30.17.2 Integration;910
35.18;30.18 Aufgaben;911
35.19;30.19 Lösungen;914
36;Kapitel 31: Messdaten verarbeiten;919
36.1;31.1 Messwerte in einem Diagramm darstellen – Matplotlib und tkinter;919
36.1.1;31.1.1 Basisprojekt;919
36.1.2;31.1.2 Erweiterung: Den letzten Wert löschen;923
36.1.3;31.1.3 Das Aussehen eines Diagramms gestalten;925
36.2;31.2 Messwerte aus einem Multimeter lesen und darstellen;928
36.2.1;31.2.1 Vorbereitung;928
36.2.2;31.2.2 Werte auslesen;929
36.2.3;31.2.3 Welche Ziffern zeigt das Display des Multimeters?;932
36.3;31.3 Anzeige der Temperatur;936
36.4;31.4 Messreihen aufzeichnen;938
36.5;31.5 Aufgabe;941
36.6;31.6 Lösung;941
37;Kapitel 32: Parallele Datenverarbeitung;945
37.1;32.1 Was sind parallele Programme?;945
37.2;32.2 Prozesse starten und abbrechen;946
37.3;32.3 Funktionen in eigenen Prozessen starten;947
37.4;32.4 Prozesse zusammenführen – join();949
37.5;32.5 Wie können Prozesse Objekte austauschen?;950
37.5.1;32.5.1 Objekte als Argumente übergeben;950
37.5.2;32.5.2 Objekte über eine Pipe senden und empfangen;951
37.5.3;32.5.3 Objekte über eine Queue austauschen;952
37.6;32.6 Daten im Pool bearbeiten;953
37.6.1;32.6.1 Mit dem Pool geht’s schneller – ein Zeitexperiment;953
37.6.2;32.6.2 Forschen mit Big Data aus dem Internet;955
37.7;32.7 Synchronisation;958
37.8;32.8 Produzenten und Konsumenten;960
37.8.1;32.8.1 Sprücheklopfer;961
37.9;32.9 Aufgaben;963
37.10;32.10 Lösungen;964
38;Kapitel 33: Django;969
38.1;33.1 Django aus der Vogelperspektive;969
38.2;33.2 Ein Projekt anlegen;970
38.2.1;33.2.1 Den Server starten;972
38.2.2;33.2.2 Eine neue Applikation anlegen;972
38.2.3;33.2.3 Startseite und View einrichten;973
38.3;33.3 Datenbankanbindung;976
38.4;33.4 Modelle erstellen;976
38.5;33.5 Modelle aktivieren;978
38.6;33.6 In der Python-Shell die Datenbank bearbeiten;981
38.6.1;33.6.1 Objekte durch Aufruf der Klasse erzeugen;982
38.6.2;33.6.2 Auf Attribute eines Objekts zugreifen;983
38.6.3;33.6.3 Objekte finden;983
38.6.4;33.6.4 Objekte erzeugen und Beziehungen herstellen;984
38.6.5;33.6.5 Den Beziehungsmanager nutzen;985
38.6.6;33.6.6 Objekte löschen;985
38.7;33.7 Django-Modelle unter der Lupe;986
38.7.1;33.7.1 Grenzwerte;986
38.7.2;33.7.2 Leere Felder;987
38.7.3;33.7.3 Voreingestellte Werte;987
38.7.4;33.7.4 Einmaligkeit;987
38.7.5;33.7.5 Auswahlmöglichkeiten;987
38.8;33.8 Der Manager unter der Lupe – Objekte erzeugen und suchen;988
38.8.1;33.8.1 Objekte erzeugen;988
38.8.2;33.8.2 Objekte finden;988
38.8.3;33.8.3 Mehrere Bedingungen;989
38.8.4;33.8.4 Suchen über Beziehungen;990
38.8.5;33.8.5 Weitere Suchmethoden;990
38.9;33.9 Administration;991
38.9.1;33.9.1 Eine Applikation der Website-Verwaltung zugänglich machen;993
38.10;33.10 Views einrichten – die Grundstruktur;997
38.10.1;33.10.1 Was sind Views?;997
38.10.2;33.10.2 Funktionen für Views;997
38.10.3;33.10.3 URL-Patterns;998
38.11;33.11 View-Funktionen erweitern;999
38.11.1;33.11.1 Startseite;1000
38.11.2;33.11.2 Auflistung der Ideen zu einer Frage – question_index;1003
38.11.3;33.11.3 Die Templates verbessern: Namen statt expliziter URLs;1005
38.12;33.12 Interaktive Webseiten – Views mit Formularen;1006
38.12.1;33.12.1 Eingabe einer neuen Frage;1006
38.12.2;33.12.2 Eingabe einer neuen Idee;1012
38.12.3;33.12.3 View-Funktion für das Speichern einer neuen Idee;1014
38.12.4;33.12.4 Fertig!;1015
38.13;33.13 Die nächsten Schritte;1015
38.14;33.14 Aufgabe;1016
38.15;33.15 Lösung;1017
39;A Anhang;1021
39.1;A.1 Codierung von Sonderzeichen in HTML;1021
39.2;A.2 Quellen im WWW;1021
39.3;A.3 Standardfunktionen und Standardklassen;1022
39.4;A.4 Mathematische Funktionen;1024
39.4.1;A.4.1 Das Modul math;1024
39.4.2;A.4.2 Das Modul random;1025
39.5;A.5 EBNF-Grammatik;1026
40;B Glossar;1031
41;C Download der Programmbeispiele;1045
42;D Ein Python-Modul veröffentlichen: PyPI;1047
42.1;D.1 Bei PyPI und TestPyPI registrieren;1048
42.2;D.2 Ein Paket für die Veröffentlichung vorbereiten;1049
42.2.1;D.2.1 Die Programmdatei setup.py;1049
42.2.2;D.2.2 Die Lizenz;1050
42.2.3;D.2.3 Die Datei README.txt;1051
42.2.4;D.2.4 Die Datei __init__.py;1052
42.3;D.3 Das Paket auf PyPI veröffentlichen;1052
42.3.1;D.3.1 Das Paket aktualisieren;1053
43;Stichwortverzeichnis;1055