Vorwort 11 <p>1 Programmieren für Einsteiger 15</p> <p>1.1 Was tut eigentlich ein Programmierer? 15</p> <p>1.2 Wie der Computer mit Daten umgeht 19</p> <p>1.3 Sprachbarrieren zwischen Mensch und Computer 20</p> <p>2 Annäherung an Python 23</p> <p>2.1 Beschaffung und Installation 24</p> <p>2.2 Werkzeug 25</p> <p>2.2.1 Die Standard-IDE IDLE 26</p> <p>2.2.2 Direktaufruf von Editor und Interpreter 27</p> <p>2.3 Gestaltung eines Python-Programms 29</p> <p>2.4 Kommentare 30</p> <p>2.5 Die Last mit den Umlauten 31</p> <p>3 Speicherwerke für Rechenkünstler 33</p> <p>3.1 Verschiedene Zahlen 34</p> <p>3.2 Mathematische Ausdrücke 35</p> <p>3.3 Programmatisches Geschwätz: Zeichenketten 38</p> <p>3.4 Alles muss raus: print 39</p> <p>3.5 Futter für die Programme: input 41</p> <p>3.6 Konvertierung der Variablentypen 42</p> <p>3.7 Aufgaben 44</p> <p>4 Ablaufstrukturen 47</p> <p>4.1 Abfrage if 47</p> <p>4.2 Der Umgang mit der Wahrheit 50</p> <p>4.2.1 Vergleich zwischen Zahlen 50</p> <p>4.2.2 Vergleich von Zeichenketten 52</p> <p>4.2.3 Boolesche Verknüpfungen 53</p> <p>4.3 Programmierte Wiederholung: Schleifen 55</p> <p>4.3.1 Mit der Bedingung im Kopf: while 55</p> <p>4.3.2 Prüfung der Benutzereingabe 56</p> <p>4.3.3 Listen durchschleifen: for 60</p> <p>4.3.4 Schleifenbruch mit break und continue 62</p> <p>4.3.5 Schleifen können auch anders: else 63</p> <p>4.4 Das Bermuda-Projekt 63</p> <p>4.5 Aufgaben 66</p> <p>5 Funktionen 69</p> <p>5.1 Rückgabewert und Adresse einer Funktion 70</p> <p>5.2 Parameter 71</p> <p>5.2.1 Vorbelegte Parameter 73</p> <p>5.2.2 Parameter per Namen belegen 74</p> <p>5.2.3 Variable Anzahl von Parametern 75</p> <p>5.3 Globale und lokale Variablen 76</p> <p>5.4 Rekursion: Selbstgespräche einer Funktion 78</p> <p>5.5 Die anonyme Funktion lambda 81</p> <p>5.6 Das Bermuda-Projekt 81</p> <p>5.7 Aufgaben 83</p> <p>6 Wir bauen die Welt: Klassen 87</p> <p>6.1 Konstruktor (und Destruktor?) 91</p> <p>6.2 Privat oder Öffentlich? 92</p> <p>6.3 Statisch: Ein Attribut für alle Objekte der Klasse 96</p> <p>6.4 Wenn eine Zuweisung zur Referenz führt 98</p> <p>6.5 Referenzlos im Abfall 100</p> <p>6.6 Ein eigener Datencontainer: Der Binärbaum 101</p> <p>6.6.1 Bäume, Äste und Knoten 102</p> <p>6.6.2 Einbau einer Besucherfunktion 105</p> <p>6.7 Selbst gebaute Operatoren 106</p> <p>6.8 Erweiterte Erbschaftsangelegenheiten 109</p> <p>6.8.1 Vererbung am Beispiel von Supermans Kiosk 110</p> <p>6.8.2 Abstrakte Basisklassen 114</p> <p>6.8.3 Polymorphie? Ein Problem der Anderen 116</p> <p>6.8.4 Mehrfachvererbung 117</p> <p>6.9 Das Bermuda-Projekt 119</p> <p>6.10 Aufgaben 121</p> <p>7 Ausnahmsweise falsch: Die Exception 125</p> <p>7.1 Selbst gemachte Exception basteln 128</p> <p>7.2 Python-Exceptions 131</p> <p>7.3 Eine Zusicherung: Assert 132</p> <p>8 Der Umgang mit Texten 133</p> <p>8.1 Der Umgang mit Zeichenketten und deren Operatoren 133</p> <p>8.2 Die Sequenz und die rechteckigen Klammern 134</p> <p>8.3 Die String-Methoden 136</p> <p>8.4 Textformatierung 139</p> <p>8.4.1 Zeichenketten mit format ausrichten 140</p> <p>8.4.2 Formatierung über das Prozentzeichen 141</p> <p>8.5 Steuerzeichen 142</p> <p>8.6 Internationales Parkett 143</p> <p>8.6.1 Internationale Sonderzeichen im Programm 143</p> <p>8.6.2 Daten umcodieren 144</p> <p>8.6.3 Die nationale Umgebung 145</p> <p>8.7 Mustererkennung mit regulären Ausdrücken 149</p> <p>8.7.1 Die Funktionen für den Vergleich 149</p> <p>8.7.2 Die wichtigsten Platzhalterzeichen 152</p> <p>8.7.3 Beispielhafte Suche 152</p> <p>8.7.4 Verfressene Quantoren 155</p> <p>8.7.5 Noch ein paar Platzhalter 155</p> <p>8.8 Das Bermuda-Projekt 156</p> <p>8.9 Aufgaben 157</p> <p>9 Kä;;ghaltung für Datenrudel 159</p> <p>9.1 Schön eng beieinander: Die Sequenz 160</p> <p>9.2 Heterogene Gemeinsamkeit: Das Tupel 160</p> <p>9.3 Elementweise veränderbar: Die Liste 165</p> <p>9.3.1 Listen anlegen und initialisieren 165</p> <p>9.3.2 Elemente hinzufügen, ändern und löschen 166</p> <p>9.3.3 Umräumen und sortieren 168</p> <p>9.4 Dimensionen 169</p> <p>9.5 Die Reißverschlussfunktion zip 171</p> <p>9.6 Zugriff per Schlüssel: Das Dictionary 171</p> <p>9.7 Einzigartig und unordentlich: Die Menge 173</p> <p>9.8 Das Geheimnis der Container 176</p> <p>9.9 Das Bermuda-Projekt 178</p> <p>9.10 Aufgaben 183</p> <p>10 Gra;;sche Ober;;äche (Tkinter) 187</p> <p>10.1 Eine kleine Anwendung 189</p> <p>10.2 Das Programm ist Event-gesteuert 190</p> <p>10.2.1 Kontrollelemente lösen Ereignisse aus 190</p> <p>10.2.2 Ereignisse und Reaktionen 192</p> <p>10.3 Kontrollelemente im Fenster anordnen: Layout 194</p> <p>10.3.1 Pack alles aufeinander! 194</p> <p>10.3.2 Hinter Gitter verteilen: Grid 198</p> <p>10.3.3 Pixelweise positionieren: Place 199</p> <p>10.4 Kontrollelemente und ihre Optionen 201</p> <p>10.4.1 Tkinter-Variablen . 203</p> <p>10.4.2 Label: Aufkleber mit Schriftart 204</p> <p>10.4.3 Druckknopf: Button 206</p> <p>10.4.4 Einer unter vielen: Radiobutton 207</p> <p>10.4.5 Abgehakt: Checkbutton 209</p> <p>10.4.6 Der Umgang mit der Listbox 210</p> <p>10.4.7 Ein Scrollbar am Beispiel einer Listbox 212</p> <p>10.4.8 Die Eingabezeile Entry 214</p> <p>10.4.9 Texte anzeigen und editieren 217</p> <p>10.4.10 Schmackhafte Menüs 219</p> <p>10.5 Eine selbst gebaute Tabelle 222</p> <p>10.6 Dialogboxen 224</p> <p>10.6.1 Kurzmeldung: Die Messagebox 224</p> <p>10.6.2 Datei- und Verzeichnisauswahl 227</p> <p>10.6.3 Farbselektor 231</p> <p>10.6.4 Der eigene Dialog: tk_dialog 231</p> <p>10.7 Das Bermuda-Projekt 233</p> <p>10.8 Aufgaben 235</p> <p>11 Kleine Zeichenschule 241</p> <p>11.1 Canvas erzeugen 241</p> <p>11.2 Zeichnen im Canvas 242</p> <p>11.2.1 Linien 243</p> <p>11.2.2 Rechtecke 244</p> <p>11.2.3 Polygone 245</p> <p>11.2.4 Ovale und Kreise 246</p> <p>11.2.5 Bögen und Tortenstücke 247</p> <p>11.2.6 Texte in die Gra;;k 250</p> <p>11.2.7 Bilder und Symbole 251</p> <p>11.2.8 Die Ereignisse im Canvas 253</p> <p>11.3 Canvas als Widget-Halter 256</p> <p>11.4 Das Bermuda-Projekt 257</p> <p>11.5 Aufgaben 262</p> <p>12 Gut verschnürt: Module, Pakete und Bibliotheken 265</p> <p>12.1 Import 265</p> <p>12.2 Eigene Module 267</p> <p>12.3 Module testen 269</p> <p>12.3.1 Das Hauptprogramm als Selbsttest 269</p> <p>12.3.2 Kommentare testen Funktionen: doctest 270</p> <p>12.3.3 unittest 272</p> <p>12.4 Gebündelt zum Paket 274</p> <p>12.5 Aufgaben 276</p> <p>13 Naturwissenschaftliches 277</p> <p>13.1 Mathematik: math 277</p> <p>13.2 Zufallszahlen: random 280</p> <p>13.3 Dezimalbrüche: decimal 280</p> <p>13.4 Lineare Algebra mit NumPy und SciPy 282</p> <p>13.5 Datumsbibliothek 284</p> <p>13.5.1 Das Paket datetime 284</p> <p>13.5.2 Das klassische Modul time 286</p> <p>13.5.3 Schlafenszeit 288</p> <p>13.6 Aufgaben 289</p> <p>14 Dateien 291</p> <p>14.1 Textdateien 291</p> <p>14.2 Binärdateien 293</p> <p>14.3 Zusammenfassung 295</p> <p>14.4 Exceptions 296</p> <p>14.5 Strukturierte Variablen sichern: JSON 297</p> <p>14.6 Packen und Komprimieren: GZIP, ZIP und TAR 298</p> <p>14.6.1 Eine Datei komprimieren: gzip 299</p> <p>14.6.2 ZIP-Dateien und TAR-Archive 300</p> <p>14.7 Aufgaben 302</p> <p>15 Python und Datenbanken 305</p> <p>15.1 Nichts als Tabellen 306</p> <p>15.2 Verbindungsaufbau 309</p> <p>15.2.1 Eine kleine, lokale Datenbank namens SQLite 309</p> <p>15.2.2 Die allgegenwärtige Datenbank MySQL 310</p> <p>15.2.3 Wenn es etwas mehr sein soll: PostgreSQL 312</p> <p>15.3 Tabellen erstellen: CREATE 313</p> <p>15.4 Variationen von INSERT 315</p> <p>15.5 Änderungen mit UPDATE 316</p> <p>15.6 Löschen mit DELETE 316</p> <p>15.7 Ergebnisermittlung durch SELECT 317</p> <p>16 Umgang mit XML-Dateien 319</p> <p>16.1 Eine Speisekarte als XML-Datei 321</p> <p>16.2 XML-Dateien mit ElementTree bearbeiten 322</p> <p>16.3 Der XML-Klassiker DOM 326</p> <p>16.4 Schrittweise durch die XML-Datei: SAX 329</p> <p>16.5 Aufgaben 331</p> <p>17 Netzwerk: Socket, E-Mail und WWW 335</p> <p>17.1 Der Griff in die Steckdose: Sockets 335</p> <p>17.2 Versenden von Mails: SMTP 339</p> <p>17.3 Auslesen von Mails per POP3 343</p> <p>17.4 Griff ins WWW 347</p> <p>18 Parallelverarbeitung mit Threads 349</p> <p>18.1 Das machen wir im Schlaf 350</p> <p>18.2 Glockengeläut im Threading 350</p> <p>18.2.1 Die Vereinzelungsanlage 352</p> <p>18.2.2 Warten auf den Startschuss 354</p> <p>18.2.3 Ein kleiner Wecker 355</p> <p>18.3 Die alte Bibliothek thread 356</p> <p>19 Zusammenarbeit mit dem Betriebssystem 359</p> <p>19.1 Die Aufrufparameter des Programms 359</p> <p>19.2 Umgebungsvariablen 360</p> <p>19.3 Aufruf anderer Programme 361</p> <p>19.4 Umgang mit dem Dateisystem 363</p> <p>19.5 Das Ende des Programms 364</p> <p>Programmentwicklung und Werkzeuge 367</p> <p>A Fehler sind auch nur Menschen: Der Debugger 367</p> <p>B Eclipse mit PyDev 368</p> <p>C Richtig distribuieren: Das eigene Setup 372</p> <p>Stichwortverzeichnis 377</p>