Der Autor | 5 |
Inhaltsverzeichnis | 6 |
Einführung | 22 |
Für wen ist dieses Buch? | 23 |
Wir wissen, was Sie gerade denken. | 24 |
Lies mich! | 29 |
Sie müssen Python installieren | 31 |
Ein paar Worte zur Organisation Ihres Codes | 33 |
Danksagungen* | 34 |
Das Gutachterteam | 35 |
Über den Übersetzer dieses Buchs | 36 |
1 Rechnerisch denken | 38 |
Immer der Reihe nach | 39 |
Wie Programmieren funktioniert | 43 |
Sprechen wir überhaupt die gleiche Sprache? | 44 |
Die Welt der Programmiersprachen | 45 |
Code mit Python schreiben und ausführen | 50 |
Eine kurze Geschichte von Python | 52 |
Python auf Herz und Nieren prüfen | 55 |
Ihre Arbeit speichern | 57 |
Herzlichen Glückwunsch zu Ihrem ersten Python-Programm! | 58 |
Phrasendrescher | 62 |
Den Code in die Maschine bekommen | 63 |
2 Einfache Werte, Variablen und Typen | 70 |
Einen Rechner für Hundejahre programmieren | 71 |
Pseudocode in richtigen Code umwandeln | 73 |
Schritt 1: Eingaben einsammeln | 74 |
Wie die input-Funktion funktioniert | 75 |
Variablen verwenden, um Werte zu erinnern und zu speichern | 75 |
Benutzereingabe einer Variablen zuweisen | 76 |
Schritt 2: Weitere Eingaben einsammeln | 76 |
Zeit, unseren Code auszuführen | 77 |
Etwas Code eingeben | 80 |
Ein genauer Blick auf Variablen | 81 |
Etwas mehr Ausdruck | 82 |
Variablen sind VARIABEL | 83 |
Besser leben durch Operatoren-Präzedenz | 84 |
Rechnen mit Operatoren-Präzedenz | 85 |
Finger von der Tastatur! | 88 |
Step 3: Das Alter des Hundes berechnen | 89 |
Houston, wir haben ein Problem! | 90 |
Fehler sind menschlich gehören zum Programmieren dazu | 91 |
Etwas mehr Debugging … | 93 |
Welcher Python-(Daten-)Typ sind Sie? | 95 |
Den Code reparieren | 96 |
Houston, wir sind abgehoben. | 97 |
Schritt 4: Benutzerfreundliche Ausgaben | 98 |
3 Boolesche Werte, Entscheidungen und Schleifen | 110 |
Wollen Sie ein Spiel spielen? | 111 |
Zuerst ein allgemeines Konzept | 113 |
Die Wahl des Computers | 114 |
Wie Zufallszahlen genutzt werden | 115 |
Vorstellung des booleschen Datentyps | 118 |
Entscheidungen treffen | 119 |
Entscheidungen und noch mehr Entscheidungen | 120 |
Zurück zu Stein, Schere, Papier | 121 |
Die Wahl des Benutzers ermitteln | 122 |
Ein Blick auf die Wahl des Benutzers | 125 |
Den Code zum Finden eines Unentschiedens einbauen | 126 |
Wer hat gewonnen? | 127 |
Implementieren wir die Spiellogik | 129 |
Mehr über boolesche Operatoren | 130 |
Ist das dokumentiert? | 135 |
Den Code mit Kommentaren versehen | 136 |
Wir müssen das Spiel endlich fertigstellen! | 137 |
Woher wissen wir, ob eine Benutzereingabe ungültig ist? | 138 |
Den Ausdruck überprüfen und aufräumen | 139 |
Den Benutzer immer wieder zur Eingabe auffordern | 141 |
Dinge mehr als einmal tun | 142 |
Wie die while-Schleife funktioniert | 143 |
while benutzen, um den Benutzer zur Eingabe aufzufordern, bis eine gültige Auswahl getroffen wurde | 147 |
Glückwunsch! Sie haben Ihr erstes Spiel programmiert! | 149 |
4 Listen und Iterationen | 162 |
Können Sie Bubbles-R-Us helfen? | 163 |
Mehrere Werte in Python darstellen | 164 |
Wie Listen funktionieren | 165 |
Wie lang ist die Liste eigentlich? | 168 |
Auf das letzte Listenelement zugreifen | 169 |
Python macht das sogar noch einfacher | 169 |
Pythons negative Indizes benutzen | 170 |
In der Zwischenzeit bei Bubbles-R-Us … | 172 |
Wie man über eine Liste iteriert | 175 |
Den Ausgabefehler beseitigen | 176 |
Den Ausgabefehler wirklich beseitigen | 177 |
Die for-Schleife – der bevorzugte Weg zum Iterieren über eine Liste | 179 |
Die for-Schleife mit einer Zahlenfolge benutzen | 182 |
Mehr tun mit Zahlenfolgen | 183 |
Die Einzelteile zusammensetzen | 185 |
Eine komplett neue Liste erstellen | 193 |
Mit Listen geht noch mehr | 194 |
Probefahrt für den fertigen Bericht | 198 |
Und die Gewinner sind … | 198 |
Probefahrt für die kosteneffektivste Seifenblasenmischung | 202 |
5 Funktionen und Abstraktion | 216 |
Was stimmt denn mit dem Code nicht? | 218 |
Einen Codeblock in eine FUNKTION umwandeln | 220 |
Wir haben eine Funktion erstellt, aber wie können wir sie benutzen? | 221 |
Aber wie funktioniert das wirklich? | 221 |
Funktionen können auch Dinge ZURÜCKGEBEN | 229 |
Funktionen mit Rückgabewerten aufrufen | 230 |
Ein bisschen Refaktorierung zwischendurch | 232 |
Den Code ausführen | 233 |
Den Avatar-Code abstrahieren | 234 |
Den Körper der get attribute-Funktion schreiben | 235 |
get_attribute aufrufen | 236 |
Wir sollten noch etwas mehr über Variablen sprechen … | 238 |
Den Geltungsbereich von Variablen verstehen | 239 |
Wenn Variablen an Funktionen übergeben werden … | 240 |
Die drink_me-Funktion aufrufen | 241 |
Was ist mit der Verwendung globaler Variablen in Funktionen? | 244 |
Mehr zu Parametern: Standardwerte und Schlüsselwörter | 247 |
Wie Standardwerte funktionieren | 247 |
Geben Sie erforderliche Parameter immer zuerst an! | 248 |
Argumente mit Schlüsselwörtern verwenden | 249 |
Wie man diese Optionen einordnen sollte | 249 |
4, Teil 2, Sortierung und verschachtelte Iteration | 262 |
Bubble Sort verstehen | 265 |
Wir beginnen mit Durchgang 1: | 265 |
Etwas Bubble Sort-Pseudocode | 268 |
Bubble Sort in Python implementieren | 271 |
Die Nummern der Seifenblasenmischungen berechnen | 273 |
6 Text, Strings und Heuristiken | 282 |
Willkommen zu den Datenwissenschaften | 283 |
Wie berechnet man einen Lesbarkeitsindex? | 284 |
Der große Plan | 285 |
Ein bisschen Pseudocode | 286 |
Wir brauchen etwas Text zur Analyse | 287 |
Die Funktion erstellen | 289 |
Als Erstes brauchen wir die Anzahl der Wörter in unserem Text | 290 |
Die Anzahl der Sätze berechnen | 294 |
Die count_sentences-Funktion schreiben | 295 |
Die Anzahl der Silben zählen – oder: Heuristiken lieben lernen | 301 |
Die Heuristik vorbereiten | 304 |
Die Heuristik schreiben | 305 |
Wie man Vokale zählt | 306 |
Aufeinanderfolgende Vokale ignorieren | 306 |
Den Code zum Ignorieren aufeinanderfolgender Vokale schreiben | 307 |
Die Buchstaben e und y sowie Interpunktionszeichen am Satzende entfernen | 309 |
Slicing (und Substrings) benutzen | 311 |
Den heuristischen Code fertigstellen | 313 |
Die Formel für den Lesbarkeitsindex implementieren | 315 |
Und noch mehr | 320 |
7 Module, Methoden, Klassen und Objekte | 328 |
Ein schneller Rückblick auf Module | 331 |
Die globale Variable _name_ | 333 |
analyze.py aktualisieren | 334 |
analyze.py als Modul benutzen | 336 |
analyze.py mit Docstrings versehen | 338 |
Andere Python-Module erforschen | 342 |
Moment mal. Haben Sie gerade »Schildkröten« gesagt?! | 343 |
Erschaffen Sie Ihre eigene Schildkröte! | 345 |
Tierversuche mit Schildkröten | 346 |
Eine zweite Schildkröte hinzufügen | 348 |
Was sind diese Schildkröten überhaupt? | 351 |
Was sind Objekte? | 352 |
Okay, und was ist eine Klasse? | 353 |
Eine Klasse ist kein Objekt. Sie wird verwendet, um Objekte zu erzeugen. | 353 |
Objekte und Klassen verwenden | 355 |
Worum geht es bei den Methoden und Attributen? | 356 |
Klassen und Objekte überall | 357 |
Bereitmachen zum Schildkrötenrennen | 359 |
Das Spiel planen | 360 |
Fangen wir mit dem Programmieren an | 361 |
Das Spiel vorbereiten | 361 |
Den Setup-Code schreiben | 362 |
Nicht so schnell! | 363 |
Das Rennen beginnen | 365 |
8 Rekursion und Dictionaries | 378 |
Eine andere Art, Dinge zu berechnen | 379 |
Kommen wir jetzt zu etwas völlig anderem … | 380 |
Schreiben wir etwas Code für beide Fälle | 381 |
Etwas mehr Übung | 384 |
Rekursion zum Finden von Palindromen benutzen | 385 |
Einen rekursiven Palindrom-Detektor schreiben | 386 |
Das Unsoziale Netzwerk | 397 |
Das Dictionary | 399 |
Sehen wir, wie ein Dictionary erstellt wird. | 399 |
Schlüssel und Werte müssen keine Strings sein. | 400 |
Natürlich können Sie die Schlüssel auch wieder entfernen. | 400 |
Vielleicht wollen Sie aber zuerst überprüfen, ob er überhaupt existiert. | 400 |
Kann man über Dictionaries auch iterieren? | 401 |
Dictionaries für das Unsoziale Netzwerk einsetzen | 403 |
Aber wie fügen wir weitere Attribute hinzu? | 405 |
Erinnern Sie sich an das Killer-Feature unseres Unsozialen Netzwerks? | 407 |
Den unsozialsten Benutzer finden | 408 |
Können wir uns die Ergebnisse der Funktionsaufrufe nicht einfach merken? | 413 |
Ein Dictionary zum Speichern der Fibonacci-Ergebnisse | 413 |
Etwas gegen teure Berechnungen: Memoisation | 414 |
Ein genauer Blick auf die koch-Funktion | 417 |
Das Koch-Fraktal eingehend erforschen | 419 |
9 Dateien speichern und auslesen | 430 |
Bereit für Crazy Libs? | 431 |
Wie Crazy Libs funktionieren soll | 433 |
Schritt 1: Text der Geschichte aus einer Datei lesen | 436 |
Dateipfade richtig benutzen | 437 |
Relative Pfade | 437 |
Absolute Pfade | 438 |
Oh, und vergessen Sie nicht, wieder aufzuräumen, wenn Sie fertig sind. | 439 |
Dateien im Python-Code lesen | 440 |
Jetzt hör schon auf! | 443 |
Verwendung der readline-Methode am Dateiobjekt | 444 |
Woher wissen wir, wann die letzte Zeile gelesen wurde? | 446 |
Eine Crazy Lib-Schablone einlesen | 447 |
Den Schablonentext verarbeiten | 448 |
Den Bug mit einer neuen Stringmethode beseitigen | 450 |
Den Bug tatsächlich beheben | 451 |
Der eine oder andere Code hat echte Probleme | 452 |
Mit Ausnahmen umgehen | 454 |
Ausdrücklich mit Ausnahmen umgehen | 455 |
Crazy Libs aktualisieren, um mit Ausnahmen umzugehen | 457 |
Unser letzter Schritt: Das Crazy Lib speichern | 458 |
Den Rest des Code aktualisieren | 458 |
10 Web-APIs benutzen | 472 |
Erweitern Sie Ihre Reichweite mit Web-APIs | 473 |
Die Funktionsweise von Web-APIs | 474 |
Alle Web-APIs besitzen eine Webadresse | 475 |
Zeit für ein schnelles Upgrade | 478 |
Das Upgrade durchführen | 479 |
Jetzt brauchen wir nur noch eine gute Web-API ... | 480 |
Ein genauerer Blick auf die API | 481 |
Web-APIs verwenden JSON für die Rückgabe der Daten | 482 |
Sehen wir uns das requests-Modul noch einmal an | 484 |
Die Einzelteile zusammensetzen: einen Request an Open Notify verschicken | 486 |
JSON in Python verarbeiten | 487 |
Das JSON-Modul zum Auslesen der ISS-Daten benutzen | 488 |
Wir brauchen etwas mehr Grafik | 489 |
Das screen-Objekt | 490 |
Wir benutzen eine Schildkröte, um die ISS darzustellen | 492 |
Schildkröten können auch wie Weltraumstationen aussehen | 493 |
Vergessen Sie die ISS. Wo sind WIR? | 494 |
Den ISS-Code fertigstellen | 495 |
11 Widgets, Events und emergentes Verhalten | 504 |
Willkommen in der WUNDERVOLLEN WELT des KÜNSTLICHEN LEBENS | 505 |
Eine genauerer Blick auf das Spiel des Lebens | 506 |
Was wir bauen werden | 509 |
Haben wir das richtige Design? | 510 |
Das Datenmodell (Model) entwickeln | 514 |
Das Raster im Code abbilden | 514 |
Eine Generation des Spiels des Lebens berechnen | 515 |
Das Schicksal aller Zellen berechnen | 515 |
Den Model-Code fertigstellen | 519 |
Den View erstellen | 522 |
Das erste Widget erstellen | 523 |
Die fehlenden Widgets hinzufügen | 524 |
Das Layout korrigieren | 525 |
Die Widgets auf einem Gitter anordnen. | 526 |
Das Gitter-Layout in Code übersetzen | 526 |
Mit dem Controller weitermachen | 528 |
Eine Aktualisierungsfunktion einbauen | 528 |
Bereit für eine neue Art der Programmierung? | 531 |
Die Funktionsweise des Start/Pause-Buttons | 534 |
Eine andere Art von Event | 536 |
Die nötige Technologie haben wir: die after-Methode | 538 |
Zellen direkt eingeben und bearbeiten | 541 |
Den grid_view Event-Handler schreiben | 542 |
Jetzt können wir ein paar Muster hinzufügen. | 543 |
Einen Handler für das Auswahlmenü schreiben | 544 |
Die Ladefunktion für das Muster schreiben | 547 |
Noch weiter! | 554 |
12 Objektorientierte Programmierung | 560 |
Die Dinge anders aufteilen | 561 |
Worum geht es bei der objektorientierten Programmierung überhaupt? | 562 |
Ihre erste Klasse planen | 564 |
Ihre erste Klasse schreiben | 565 |
Wie der Konstruktor funktioniert | 565 |
Die bark-Methode schreiben | 568 |
Die Funktionsweise von Methoden | 569 |
Vererbung nutzen | 571 |
Die ServiceDog-Klasse implementieren | 572 |
Ein genauerer Blick auf abgeleitete Klassen | 573 |
Ein ServiceDog IST EIN Dog | 574 |
IST-Beziehungen im Code überprüfen | 575 |
Verhalten überschreiben und erweitern | 579 |
Noch mehr Fachjargon … | 581 |
Objekt HAT ein anderes Objekt | 583 |
Ein Hundehotel entwickeln | 586 |
Das Hundehotel implementieren | 587 |
Das Hundhotel renovieren | 590 |
Das Hotel um ein paar Aktivitäten erweitern | 591 |
Ich kann alles, was du auch kannst, oder: Polymorphismus | 592 |
Es ist Zeit, den Hunden das Gassigehen beizubringen | 593 |
Die Macht der Vererbung | 595 |
Anhang: Was u?brig bleibt | 612 |
#1 Listen-Comprehensions | 613 |
#2 Datum und Uhrzeit | 614 |
#3 Reguläre Ausdrücke | 615 |
#4 Andere Datentypen: Tupel | 616 |
#5 Andere Datentypen: Sets | 617 |
#6 Serverseitige Programmierung | 618 |
#7 Lazy Evaluation | 619 |
#8 Dekoratoren | 620 |
#9 Higher-Order- und First Class-Funktionen | 621 |
#10 Eine Menge Bibliotheken | 622 |
Index | 624 |