Hello W rld! warren d. und carter SANDE LERN MIT MIR SPIELE PROGRAMMIEREN! PROGRAMMIEREN FÜR KIDS UND ANDERE ANFÄNGER Inhalt Vorwort. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XIII Was ist Programmieren?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XIII Python – eine Sprache für uns und den Computer.. . . . . . . . . . . . . . . . . . . . . . . . . . . XIV Wozu soll ich Programmieren lernen?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XV Warum Python?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XVI Die lustigen Sachen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XVII Danksagungen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XIX Über dieses Buch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXI Was du brauchst.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXI Was du nicht brauchst.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXII Carter sagt.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXIII An Eltern und Lehrer.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXIV 1 Erste Schritte.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Python installieren.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Python mit IDLE starten.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Anweisungen bitte.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Mit Python interagieren.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Programmierzeit.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Das erste Programm ausführen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Wenn etwas schiefgeht. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Dein zweites Programm.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2 Merk’s dir – Speicher und Variablen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Eingabe, Verarbeitung, Ausgabe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Namen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Was ist ein Name?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Zahlen und Strings.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Wie „variabel“ sind sie?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Das neue Ich.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 V VV Inhalt 3 Einfache Mathematik. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Die vier Grundrechenarten.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Operatoren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Punktrechnung vor Strichrechnung.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Zwei weitere Operatoren.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Sehr große und sehr kleine Zahlen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4 Datentypen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Typen ändern.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Mehr Informationen mit type().. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Typumwandlungsfehler.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Anwendung von Typumwandlungen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5 Eingabe.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 raw_input(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Der print-Befehl und das Komma.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Zahlen eingeben.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Eingabe aus dem Internet.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 6 GUIs – Grafische Benutzeroberflächen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Was ist eine GUI?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Unsere erste GUI.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 GUI-Eingabe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 Welches Eis hättest du gerne?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Nochmal Zahlen raten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Andere GUI-Teile.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 7 Immer diese Entscheidungen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Test, Test.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Einrücken.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Seh’ ich jetzt schon doppelt?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Andere Arten von Tests. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 Was passiert, wenn der Test „falsch“ ergibt?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Mehrere Bedingungen testen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Das Schlüsselwort „and“.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Das Schlüsselwort „or“. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Das Schlüsselwort „not“.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 8 Schleifen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Zählschleifen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 Verwendung von Zählschleifen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 V VVV Inhalt Eine Abkürzung: range(). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Eine Sache des Stils – Namen von Schleifenvariablen.. . . . . . . . . . . . . . . . . . . . . . . . . 82 Zählen in Schritten.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Zählen mit Zahlen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Da wir gerade dabei sind …. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Ausstieg aus einer Schleife – break und continue.. . . . . . . . . . . . . . . . . . . . . . . . . 88 9 Nur für dich – Kommentare.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Kommentare hinzufügen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Einzeilige Kommentare.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Zeilenende-Kommentare.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Mehrzeilige Kommentare.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Kommentierstil.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Auskommentieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 10 Zeit zum Spielen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Skier.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 11 Geschachtelte und variable Schleifen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Geschachtelte Schleifen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Variable Schleifen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Variable, geschachtelte Schleifen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Noch mehr variable, geschachtelte Schleifen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Verwendung von geschachtelten Schleifen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 12 Listen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Was ist eine Liste?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Eine Liste erstellen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Elemente in eine Liste einfügen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 Wozu der Punkt?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Listen können alles Mögliche speichern.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Elemente von einer Liste abrufen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Listen in Scheiben schneiden: „Slicing“.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 Elemente ändern.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Andere Möglichkeiten der Listenerweiterung.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Elemente aus einer Liste löschen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 Eine Liste durchsuchen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Eine Liste per Schleife durchlaufen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Listen sortieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Veränderlich und unveränderlich. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Listen von Listen: Tabellen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 II Inhalt 13 Funktionen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Funktionen – die Bausteine.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Eine Funktion aufrufen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Argumente an eine Funktion übergeben.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Funktionen mit mehreren Argumenten.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 Funktionen, die einen Wert zurückgeben. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Geltungsbereich von Variablen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Globale Variablen erzwingen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Tipps zur Benennung von Variablen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 14 Objekte.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Objekte im wirklichen Leben.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Objekte in Python.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Objekt = Attribute + Methoden.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Was soll der Punkt?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Objekte erstellen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Eine Beispielklasse – HotDog.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Die Daten verbergen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Polymorphismus und Vererbung.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Vorausdenken.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 15 Module. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Was ist ein Modul?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Warum Module verwenden?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 Eimerweise Legosteine.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Wie werden Module erstellt?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Wie werden Module verwendet? .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Namensräume.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Standardmodule.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 16 Grafik.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Hilfe holen – Pygame.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Ein Pygame-Fenster.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 In das Fenster zeichnen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Einzelne Pixel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Bilder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Jetzt kommt Bewegung in die Sache!.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Animation.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Weichere Animationen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Den Ball abprallen lassen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Den Ball umbrechen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 X Inhalt 17 Sprites und Kollisionserkennung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Sprites. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 Peng! Kollisionserkennung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 Die Zeit messen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 18 Eine neue Eingabeart: Ereignisse.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Ereignisse.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Tastaturereignisse.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Mausereignisse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Timer-Ereignisse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Zeit für noch ein Spiel: PyPong.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 19 Sound. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Pygame hilft – mit dem mixer.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Sounds erzeugen oder Sounds abspielen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Sounds abspielen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Lautstärke regeln. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Musik wiederholen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Sounds für PyPong.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Noch mehr coole Sounds.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Musik für PyPong.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 20 Noch mehr GUIs.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Der Umgang mit PythonCard.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Komponenten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Action in der GUI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Ereignis-Handler. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Den Button bewegen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Nützliche GUIs.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 TempGUI.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Was steht auf dem Menü?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 21 Ausgabeformatierung und Strings.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 Neue Zeilen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 Horizontale Abstände: Tabulatoren.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 Variablen in Strings einfügen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290 Zahlenformatierung.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 Strings und so. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 22 Ein- und Ausgabe mit Dateien. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 Was ist eine Datei?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 Dateinamen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 XX Inhalt Speicherorte.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Eine Datei öffnen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Eine Datei lesen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Text- und Binärdateien.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 In eine Datei schreiben.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Daten in Dateien speichern: pickle.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Es ist mal wieder Spielzeit: Galgenmännchen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 23 Das Zufallsprinzip. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 Was ist Zufall?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 Würfeln.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Ein Kartenspiel erstellen. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Crazy Eights – Verrückte Achter.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 24 Computersimulationen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 Die Realität modellieren. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 Mondlandung.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Die Zeit festhalten. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 Zeitobjekte.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 Die Zeit in einer Datei speichern.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 Ein virtuelles Haustier.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 25 Und wie geht’s weiter?.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 Allgemeine Programmierung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 Python.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 Spieleprogrammierung und Pygame.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 Was es sonst noch für Python gibt.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 Schau dich um.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 Regeln für Variablennamen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 Lösungen zu den Übungen.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Index.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 X XX Vorwort Das Vorwort ist der Teil am Anfang eines Buches, den du gerne überspringst, um gleich zu den interessanten Sachen zu kommen, oder? Natürlich kannst du das tun (schließlich bist du es, der die Seiten umblättert), doch wer weiß, was du dabei verpasst. Da das Vorwort hier recht kurz ist, solltest du vielleicht einen Blick riskieren, nur für den Fall des Falles. Was ist Programmieren? Ganz einfach: Durch Programmieren sagst du einem Computer, was er tun soll. Computer sind nur dumme Maschinen. Von sich aus wissen sie gar nichts. Du musst ihnen alles bis in die kleinsten Einzelheiten erklären. Duhhhhhhhhh… Doch wenn du dem Computer die richtigen Anweisungen gibst, kann er wunderbare und erstaunliche Dinge tun. Worterklärung Eine Anweisung ist ein Grundbefehl, den du einem Computer gibst, normalerweise, damit er eine einzige, ganz bestimmte Sache tut. X X XX Vorwort Ein Computerprogramm besteht aus Anweisungen. Computer können nur deshalb so tolle Dinge tun, weil eine Menge schlauer Programmierer Programme – oder Soft‑ ware – geschrieben haben, die ihnen sagen, wie es geht. Software ist nichts anderes als ein oder mehrere Programme, die auf deinem Computer laufen – oder manchmal auch auf einem anderen Computer, mit dem deiner verbunden ist, wie zum Beispiel ein Webserver. Was passiert da drin? Computer „denken“ mit ganz, ganz vielen elektrischen Schaltkreisen. Diese Schaltkreise sind im Grunde wie Schalter, die ein- oder ausgeschaltet sein können. Ingenieure und Informatiker (Computerwissenschaftler) sagen 1 für EIN und 0 für AUS. Alle diese Einser und Nullen bilden eine Art von Code, den so genannten Binärcode. Binär bedeutet eigentlich nur, dass es zwei „Zustände“ gibt, nämlich EIN oder AUS, also 1 oder 0. Wusstest du schon, dass das Wort Bit eine Abkürzung für Binar Digit ist (englisch für „Binärziffer“)? Python – eine Sprache für uns und den Computer Alle Computer verwenden innen den Binärcode, aber Menschen sprechen „Binär“ meistens nicht besonders gut. Wir brauchen ein einfacheres Mittel, um dem Computer zu sagen, was er tun soll. Deshalb haben die Menschen Programmiersprachen erfunden. Eine Programmiersprache lässt uns Dinge auf eine Weise sagen, die für uns noch verständlich ist, und übersetzt das dann für den Computer in Binärcode. Es gibt viele verschiedene Programmiersprachen. Eine davon – nämlich Python – lernst du in diesem Buch, damit du dem Computer sagen kannst, was er tun soll. Wie alle anderen Programmiersprachen baut auch Python auf der englischen Sprache auf und benützt Begriffe wie „print“ oder „class“. Vielleicht kennst du das eine oder andere englische Wort ja schon und verstehst seine Bedeutung. Wenn nicht, schlag die Wörter am besten im Lexikon oder unter http://dict.leo.org nach. Denn wenn du weißt, was die Wörter bedeuten, kannst du die Programme viel leichter verstehen. XXX Wozu soll ich Programmieren lernen? 1110001101 0001110011 0100101000 Nein, nein, ich spreche nur Menschensprache! >>> print “Hallo” Hallo Aha! Jetzt hab ich’s! Hallo! Wurde auch Zeit! Wozu soll ich Programmieren lernen? Selbst wenn du kein Profi-Programmierer werden willst, gibt es viele gute Gründe, Programmieren zu lernen: Na, zunächst einmal, weil du es willst! Programmieren kann sehr interessant und lohnend sein, als Hobby und als Beruf. Wenn du dich für Computer interessierst und wissen willst, wie du ihnen beibringen kannst, zu tun, was du willst, ist das ein Grund, Programmieren zu lernen. Vielleicht möchtest du deine eigenen Spiele programmieren. Oder du findest gerade kein Programm, das genau das tut, was du willst oder brauchst, und möchtest deshalb ein eigenes schreiben. Computer sind heutzutage überall; du wirst sie wahrscheinlich in der Schule, zu Hause oder bei der Arbeit benutzen müssen. Wenn du Programmieren lernst, kannst du Computer ganz allgemein besser verstehen. XX Vorwort Warum Python? Warum habe ich aus den Unmengen Programmiersprachen, die zur Wahl stehen, ausgerechnet Python für ein Programmierbuch für Kinder ausgesucht? Hier sind einige Gründe dafür: Python war von Anfang an auf leichte Erlernbarkeit ausgerichtet. Von allen Programmiersprachen, die ich gesehen habe, sind Programme in Python am einfachsten zu schreiben, zu lesen und zu verstehen. Python kostet nichts. Du kannst es gratis herunterladen – und mit ihm sehr viele witzige und nützliche Programme, die in Python geschrieben sind. Wo – das erfährst du in Kapitel 1. Python ist eine Open Source-Software. Open Source bedeutet, dass jeder Benutzer Python erweitern kann (also Möglichkeiten finden, um mit Python neue Sachen zu tun oder alte Sachen zu vereinfachen). Viele Menschen haben das bereits getan und es gibt eine große Menge kostenloser Python-Sachen zum Herunterladen. Python ist kein Spielzeug. Es eignet sich nicht nur sehr gut, um Programmieren zu lernen, sondern wird auch von Tausenden von Profis in aller Welt benutzt, darunter Programmierer bei der NASA oder von Google. Du brauchst dich also nicht, nachdem du Python gelernt hast, auf eine „echte“ Sprache umzustellen, um „richtige“ Programme zu schreiben. Mit Python ist eine Menge möglich. Python läuft auf verschiedenen Computertypen: Windows-Rechner, Macs und Linux-Computer. Meistens wird dasselbe Python-Programm, das zu Hause auf deinem Windows-PC funktioniert, auch auf dem Mac in der Schule laufen. Du kannst dieses Buch mit buchstäblich jedem Computer benutzen, auf dem Python installiert ist. (Und denk dran: Wenn dein Computer kein Python hat, kannst du es gratis herunterladen.) Ich liebe Python. Ich lerne gerne damit und deshalb glaube ich, dass auch du das tun wirst. s.ex 2: pr i a if # )c it(0 lass # Increment the pag e cou nt, and Denken wie ein Programmierer the lin re given, print ello i t >>> Hello f# int filen et res >>>H if # : pypr sage 'sy 'U nt am e essage if len(sys. ar != gv) t > >> prin p ri n t prin m pful h el Hello t s we self.he In diesem Buch benutzen wir Python, aber das e co u nt meiste, was hier über das Programmieren n =I f n n ume gesagt wird, gilt auch für jede andere ar g Programmiersprache. Wenn du mit Python , s anfängst zu programmieren, ist das ein guter ime Start für jede andere Programmiersprache, die du irgendwann einmal verwenden wirst. ader_writte no arguments a no o If #P # on yth tex t #!/bin/en ina Pag df r an ooter ead tho n vp #!/bin/env p y ah ; t=1 ag i me nt s 1 ; rgu If rt impo sys, t tring # self.c oun nate a e text file, addin te a g X XX Die lustigen Sachen Die lustigen Sachen Eines wollte ich noch sagen. … Was besonders Kindern am Computer am meisten Spaß macht, sind Spiele mit Bild und Ton. Im Laufe des Buches werden wir lernen, wie wir eigene Spiele schreiben und vieles mit Bildern und Tönen anstellen können. Hier siehst du Bilder von einigen Spielen, die wir programmieren: X X XX Index Symbole ' (Einfache Anführungszeichen in Strings) 22 ( ) (Funktionsargumente) 31, 130 [] 79, 115, 133 * (alle) 178, 180 """-Zeichen 23, 93 / (Schrägstrich) 308 \ (Backslash) 93, 288, 290, 308 \n (Newline) 312 & (vor Hotkeys) 280 # (Kommentare) 92, 95 % (Prozentzeichen) 33, 291, 295 %d (Integer in Formatstring) 293 %E, %e (E-Notation in Formatstring) 294 %F, %f (Float in Formatstring) 291, 293 negative Zahlen 294 positive Zahlen 294 %G, %g (Float- oder E-Notation in Formatstring) 295 %i (Integer in Formatstring) 291, 293 %s (String in Formatstring) 291 >> (Ausgabe umleiten) 318 >>> (Python-Prompt) 17 Mathematische Zeichen und Begriffe - (Minus/Subtraktion) 28 -= (Dekrement) 34 <-Zeichen 67 <=-Zeichen 67 <>-Zeichen 67 !=-Zeichen 67 ** (Exponent) 73 ** (Exponentialrechnung) 32 / (Division) 28 % (Modulus) 73 + (Plus/Addition) 27, 294, 296, 297 += (Inkrement) 34 =-Zeichen 17, 29, 66, 213 ==-Zeichen 66 >-Zeichen 67 >=-Zeichen 67 Zahlen 24-Bit-Farbe 189 3-D-Grafik 381 A abgeleitete Klasse 168 abgerundet 49 Abstände, horizontal 289 Abwärts-Pfeil, K_DOWN 231 Achterreihe 79 Addition 27 aktives Fenster 185 aktuelles Arbeitsverzeichnis 308 ALT-Taste 280 and 70 Ändern einer Liste 121 anfügen, Datei 315 Anfügen-Modus 316 Anführungszeichen 42 Animation 203 Anzeigeoberfläche 188 doppelt gepuffert 188 flip 187, 189 .app 305 append() 121, 122 Arbeitsverzeichnis 308, 309 Argument an eine Funktion übergeben Argumente 84, 141, 143 Arithmetik 27 Attribute 154, 305, 318 Daten ändern 166 Daten anzeigen 166 Auflösung 188 Aufwärts-Pfeil, K_UP 231 ausführbare Datei, .exe 305 Ausgabe 53, 304 141 44 4 Index umleiten 318 Ausgabe eines \ 290 Ausgabeformatierung 277, 286 Auffüllen 294 automatischer Float 295 E-Notation 294, 295 Fließkomma 293 formatierte Zahlen speichern Integer 293 Komma 287 Verkettung 287 Zahlenformatierung 292 auskommentieren 94 B 295 Backslash-Zeichen, \ (für spezielle Ausgabecodes) 288 Backslash (Zeilenfortsetzungszeichen), \ 308 Ball mit Aufwärts- und Abwärts-Pfeil 232 mit einem Timer-Ereignis auf und ab bewegen 237 mithilfe von Sprites bewegen 216 Ball-Klasse verwenden 157 Ball-Programm mit Sprites und Clock.tick() 229 Ballspiel in 2-D 207 BASIC 382 BBC BASIC 382 Bedingung 63, 64 mehrere 70 Bedingungsschleifen 76, 87 Befehls-Shell 185 Benutzerereignis 236 Betriebssystem, os 366 Bilder 199 Bildschirmkoordinaten 190 horizontal 190 vertikal 190 x-Achse 190 y-Achse 190 Binär 41 Binärdateien 313, 314 öffnen 314 rb 314 Binärformat 305 Bindestrich 28 Bits 189, 305 Blatt des Spielers anzeigen 346 Blitting 201, 213, 230, 357 Boolescher Wert 125 44 4 False 125 True 125 Bottom-Up 343 break 89 Browser 53 Button 267 Cancel 58 Eigenschaften ändern 268 buttonbox() 56 Button-Eigenschaft position 272 Byte 189, 305 C C 379 C++ 379 Cancel 58 Carriage Return 287 choice() 331, 336 choicebox() 57 Choicebox verkleinern 58 class-Schlüsselwort 270 Clock und get_fps() im Wasserballprogramm 224 Code aufräumen 283 Codeblock 65 Code-Rümpfe 169 Collection 115 combine() 363 component 267 Computeradresse 189 Computeranimation 202 computergeneriert Kartenspiele 329 Würfel 329 Zufallsereignisse 329 Computer-Kartenspiele 340 Computer-Lochkarte 314 Computer-Modell 354 Computersimulation 354 continue 88 CR 287 D Datei 304, 305 anfügen 310, 315, 316 .app 305 binär 313 Dateiname 310 Eigenschaften 305 entpickeln 319 ersetzen 310 Index erstellen 310 Erweiterung 305 .exe 305 Größe 305 hinzufügen 310 lesen 310, 311 load() 320 .mp3 305 Name 305, 310 öffnen 310, 311 Ordner 306 Pfad 307 Pfadnamen 308 pickle 318 print 318 .py 305, 309 readline() 312 readlines() 311 schließen 312, 316 schreiben 310, 314, 315 seek() 313 speichern 305, 306 Speicherort 305 Textdateien 313 .txt 305 Typ 305 Dateien mit load() entpickeln 320 Dateimodus a 315 r 315 w 315 date-Klasse 362 Datenstruktur 131 Datentypen 39 datetime.combine() 363 datetime-Objekt 362 Parameter 362 Datum und Uhrzeit 361 Zeitstempel 361 Debugging 277 def 137 default 59 dekrementieren, -= 24, 34 del 124 Delta 361, 363 Dialogfeld 56, 266 Eingabe 56 Division 28 Modulus 33 Quotient 32 Rest 32 Dokumentation 91 Doppel-Backslash, \\ 308 Doppelpunkt 65, 120, 138 Doppelstern, ** 32 doppeltes Gleichheitszeichen 66 doppelt gepuffert 188 doppelt geschachtelte Schleifen 105 drei Anführungszeichen 23, 93 dump() 319 durchgehende Sinuskurve 197 E EasyGui 53, 182 buttonbox() 56 choicebox() 57 Choicebox verkleinern 58 enterbox() 58 Homepage 62 importieren 54 installieren 54 integerbox() 60 Nachrichtenfeld 54 Texteingabe 58 easygui.py 54 Echtzeit 361 eckige Klammern 79, 115, 133 Eigenschaften 154 Eingabe 45, 53, 304, 310 aus anderen Quellen 50 aus dem Internet 50 Eingabeaufforderung ausgeben 47 Eingabeaufforderung, >>>, Meldung, ausgeben 47 Ereignisse 227 mit Buttons 56 mit Choicebox 57 mit Enterbox 59 Eingabefeld Drehfeld 274 Spinner 274 TextField 274 Einmaleins 81 einrücken 65, 66 Einrückungskonvention 66 einzeilige Kommentare 92 Elemente 115 elif 68, 101 else 69 Ende des Songs abwarten 256 Endlosschleifen 78 endswith() 299 44 4 Index E-Notation 34, 35, 37, 320 enterbox() 58 Entscheidungen 63 Entscheidungsbaum 108 Entscheidungspunkt 109 ereignisgesteuerte Programme 227 Ereignishandler 228, 271, 370 Ereignisschlange 228, 231 Ereignisschleife 183, 228 Ereignisse 183, 227, 228, 271, 272, 370 Benutzerereignis 236 Ereignishandler 228, 271 Ereignisschlange 228, 231 Ereignisschleife 183, 228 KEYDOWN 229, 231 Maus 234 MOUSEBUTTONDOWN 234, 235 MOUSEBUTTONUP 234, 235 MOUSEMOTION 234, 240 on_ 271 Parameter 272 pygame.event.get() 231 QUIT 231 Tastatur 229 Tastenereignisse 230 timer 235 Timer-Ereignisse 235 Zufall 330 Erweiterung 305 Event siehe Ereignisse Exponenten 32, 35, 37 extend() 121, 122 F False 125, 225 Farben Nummer 189 Primär 189 RGB 189 Fehler 29 behandeln 371 Fehlerbehebung 94 häufig 25 invalid literal 43 Rundungsfehler 41 Fließkommadarstellung 293 flip 187, 189 float 364 float() 39, 48, 364 float(raw_input()) 48 Floats 60 44 4 Floatvariable, %f 291 font-Objekt 243 for 76 Formatstrings 291 %E, %e 294 %F, %f 293 %G, %g 295 for-Schleife 76, 78, 337 Programm 77 Frame 221 Framerate 221, 223 anpassen 223 skalieren 223 Frames pro Sekunde 221 Grenze 222 Funktionen 39, 137, 153 Argumente 84, 141, 143, 144 aufrufen 137, 139 buttonbox() 56 choice() 331, 336 choicebox() 57 Code-Rümpfe 169 definieren 137 enterbox() 58 Ergebnis 145 erstellen 137 float() 39, 48, 364 Funktionen, die Werte zurückgeben 147 help() 62 image 199 input() 49 int() 39, 48 integerbox() 60 Liste 145 mehrere Argumente 143, 144 mehrere Parameter 144 Methoden 155 msgbox() 54 Parameter 84, 143 pygame.draw.circle() 187 pygame.draw.lines() 197 pygame.draw.rect() 192 pygame.image.load() 201 randint() 330 range() 80, 83 raw_input() 45 remove() 336 Rückgabewert 145 sorted() 130 str() 39 Surface.get_at() 199 Index Surface.set_at() 199 sys.exit() 231 type() 42 Werte zurückgeben 146 G Galgenmännchen 320 Galgenmännchen-Programm 325 Ganzzahl 40 Gedächtnis 330 Geltungsbereich von Variablen 147 geschachtelte Schleifen 101, 109, 337 Gleichheit 73 Gleichheitszeichen 29 global 150 globale Namensräume 177 globale Variablen 148, 150 Grafik 182 Frame 221 Framerate 221 Frames pro Sekunde 221 löschen 203, 230 rendern 243 übermalen 203, 230 Graphical User Interface siehe GUI größer 67, 73 größer gleich 67, 73 Groß- und Kleinschreibung 25 group-Klasse 217 GUI 53, 266, 344 Galgenmännchen 321 Komponenten 267 Steuerelemente 267 virtuelles Haustier 369 Widgets 267 GUI-Elemente Dialogfelder 56, 266 H help() 62 Hintergrundmusik 255 wiederholen 256 Hitkey 280 horizontale Abstände 289 HotDog-Programm 164 HyperCard 266 I IDLE 53, 352 Farben 93 if 65, 70, 101 import 174 in 125, 300 index() 126, 300 Index 118, 119 Informationen speichern 304 __init__() 158 initialisieren 158, 356 inkrementieren, Variable, += 24, 34 input() 49 insert() 121, 122 Instanz 156 int() 39, 41, 48 Integer 364 integerbox() 60 Integerformatierung 293 Integervariable, %i 291 interaktiver Modus 40 invalid literal-Fehler 43 isfile() 366 Iteration 78, 81, 101 J Java 379 join() 298 K Kartenspiel-Programm, Crazy Eights KEYDOWN 231 delay-Wert 233 interval value 233 key repeat 233 mehrere Ereignisse 233 key repeat 233 Kids Programming Language 378 Klammern 31 eckige 115 Klassen 156 abgeleitete 168 Clock 222 date 362 Familien 168 group 217 Namenskonvention 163 Polymorphismus 167 Sprite 212 time 362 timedelta 363 Unterklasse 168 Vererbung 168 kleiner 67, 73 kleiner gleich 67, 73 340 44 4 Index Kleinschreibung 302 Kollisionserkennung 217, 241 pixelgenau 220 rect 220 Kombination 107 Kommas 47, 115, 144, 287 Kommentare 91 einzeilige 92 mehrzeilige 92 Zeilenende 92 Komponenten StaticText 274 Steuerelemente 273 Widgets 273 Komponenteneigenschaft command 283 Konstanten 103 konvertieren 39 Kopie einer Liste 129 KPL siehe Kids Programming Language Kreis zeichnen 186 künftige Python-Versionen 49 Kunst mit draw.rect 194 Kurven aus vielen kleinen Rechtecken 196 L Lautstärke 254 Line Feed, LF 287 Listen 57, 79, 115, 131, 153, 337 ändern 121 append() 116, 122 del 124 durchsuchen 125 Elemente 115 Elemente einfügen 116 erstellen 116 extend() 122 geordnet 127 in 125 index() 126 Index 118 Inhalt 117 insert() 122 Kommas 115 kopieren 129 leere 116 mit pickle in einer Datei speichern pop() 124 remove() 123 reverse() 127 Slice 120 Slice-Abkürzungen 120 444 319 Slice-Notation 120, 128 Slicing 119 sortieren 127 sortieren in umgekehrter Reihenfolge 127 sortierte Kopie 130 Tupel 130 veränderlich 130 von Listen 131 load() 320 logische Operatoren 72 logischer Ausdruck 125 Logo 380 lokale Namensräume 177 lokale Variablen 148 löschen, übermalen 203 lower() 302 M Mac OS X, .app 305 Mailinglisten 379 Pygame 380 PythonCard 379 Mathe 27 Mausereignisse 234 Maus ziehen 235 mehrere Argumente 143, 144 mehrere Ebenen, Ordner 306 mehrere Parameter 144 mehrzeilige Kommentare 92 Menü 278 aktivieren 280 Menu Editor New Menu 279 New Menu Item 281 Menü-Ereignishandler hinzufügen 282 Menüereignis, select 281 Methoden Argumente übergeben 155 Code-Rümpfe 169 combine() 363 Polymorphismus 167 Vererbung 168 Werte zurückgeben 155 Methoden eines Objekts 154 Minus 28 Modell 354 Moderne Kunst mit Farbe 195 Module 53, 137, 172, 173, 266, 339 erstellen 173 import 174 Index importieren 177 Namensräume 175 Python Standardbibliothek 178 random 180, 329 sleep() 179 sprite 211 time 179 verwenden 174 Modulus, % 33, 292 Mondlandung-Programm 357 .mp3 305 MP3-Dateien 251 msgbox() 54 Multiplikationstabellen 102 Münze werfen 330, 334 Musik 252 fadeout() 262 get_busy() 256 Hintergrund 255 immer wiederholen 257 PyPong 261 set_volume() 254 spielen 253 und Sound mit Lautstärkeregelung 255 N Namensräume 175, 244 global 177 lokal 177 Namen von Variablen 151 Newline-Zeichen, \n 287, 288, 312, 313 not 72 now() 364 Nummernzeichen, # 92, 95 O Objekte 117, 137, 153 abgeleitete Klasse 168 Attribute 154 Attribute ändern 166 Eigenschaften 154 erstellen 156 Funktionen und Daten zusammenfassen 153 __init__ () 158 initialisieren 158 Instanz 156 Instanzen anlegen 157 Klasse 156 Methoden 154, 155 self 161 __str__() 159 Unterklasse 168 Variablen 155 Verbergen von Daten 166 objektorientiert 153 Objektsyntax 117 Ogg Vorbis-Dateien 251 on_ 271 open() 310 a-Argument 315 r-Argument 311, 315 w-Argument 315 Open Graphics Language 380 Operatoren 29, 67 gleich 64 größer 67 kleiner 67 Liste 73 logische 72 ungleich 67 verketten 67 or 71 Ordner 306 Baum 307 mehrere Ebenen 306 Unterordner 307 Wurzel 307 Zweige 307 Ordnerstruktur 306 os 366 P Parameter 84, 143 reverse 127 pass 169, 184 Permutation 107 Pfad 307 Pfadnamen 308 Phrogram 378 pickle 318, 366 dump() 319 load() 320 Pixel kopieren 201 Plus 27 Pluszeichen, + 296, 297 Polymorphismus 167 pop() 124 print 20, 41, 286 Programme Achterreihe 79 Anfügen-Modus 316 4 44 Index anhalten 78 Argument an eine Funktion übergeben 141 Aufräumarbeiten 284 Ausgabe 53 Bälle mithilfe von Sprites bewegen 216 Ball-Klasse 156 Ball-Klasse verwenden 157 Ball mit Aufwärts- und Abwärts-Pfeil 232 Ball mit einem Timer-Ereignis auf und ab bewegen 237 Ball-Programm mit Sprites und Clock.tick() 229 Ballspiel in 2-D 207 Clock und get_fps() im Wasserballprogramm 224 Code aufräumen 283 Crazy Eights Programm 342 Dateien mit load() entpickeln 320 Datei öffnen und lesen 311 die Ausgabe des Objekts mit __str__() ändern 160 durchgehende Sinuskurve 197 Eingabe 45, 53 Eingabe aus dem Internet 50 Eingabe mit Buttons 56 Eingabe mit Choicebox 57 Eingabe mit Enterbox 59 Einmaleins 81 Ende des Songs abwarten 256 ereignisgesteuert 227 Ereignishandler für den Hello-Button 271 for-Schleife 77, 78 Funktionen mit zwei Argumenten 144 Funktion erstellen und benutzen 138 Funktion erstellen und verwenden, die einen Wert zurückgibt 147 Galgenmännchen-Programm 325 globale Variable in einer Funktion ändern 150 Hot Dog-Programm 163 _init_()-Methode 158 Kartenspiel-Programm 339 Kreis rückt in die Fenstermitte 191 Kreis zeichnen 186 Kunst mit draw.rect 194 Kurven aus vielen kleinen Rechtecken 196 Liste mit pickle in einer Datei speichern 319 lokale Variable ausgeben 148 444 Menü-Ereignishandler hinzufügen 282 Mit Sprites mehrere Bälle auf den Bildschirm laden 213 Modul erstellen 173 Modul verwenden 174 Mondlandung 357 Musik spielen 253 Musik und Sound mit Lautstärkeregelung 255 Punkteverbinden 199 Pygame-Fenster erstellen 183 Pygame-Fenster offen halten 184 Pygame-Fenster schließen 186 PyPong 246 PyPong mit Sound und Musik 262 Quadrat- und Kubikzahlen ausgeben 290 readline() mehrmals verwenden 313 Schleifenvariablen in geschachtelten Schleifen 106 Schreibmodus für neue Dateien 317 Schreibmodus für vorhandene Dateien 317 Skier 97 Sounds in Pygame ausprobieren 253 Standardargumente 59 Sternenblöcke, knifflige Version 106 Sternenblöcke mit doppelt geschachtelten Schleifen 105 String mit raw_input() 46 Tausendmal würfeln mit dem elfseitigen Würfel 331 Tausendmal würfeln mit zwei sechsseitigen Würfeln 332 Temperaturen umrechnen 48, 276 Tippgeschwindigkeit 365 variable, geschachtelte Schleife 104 Verarbeitung 53 Virtuelles Haustier 372 Wasserball abprallen lassen 206 Wasserball bewegen 202, 204 Wasserball umbrechen 208 Wer ist am coolsten 86 while-Schleife 87 Wurstkombinationen 109 Wurstprogramm mit Kalorienzähler 112 Zahlen raten mit EasyGui 60 Zehnmal hintereinander Kopf 335 Zeit mit pickle in einer Datei speichern 367 Programmieren Anweisung 66 Index auskommentieren 94 Bedingung 63, 64 Blatt des Spielers anzeigen 346 Bottom-Up 343 Codeblock 65 Debugging 277 Dokumentation 91 einrücken 65, 66 Entscheidungen 63 Entscheidungsbaum 108 Fehlerbehebung 94 Funktionen 137 Kommentare 91 Module 137 Objekte 137, 153 Punktnotation 156 Schleifenverarbeitung 76 Stil 94 Test 63 Top-Down 343 Wichtigkeit von Kommentaren 94 Programmiersprachen BASIC 382 BBC BASIC 382 C 379 C++ 379 Java 379 Kids Programming Language 378 KPL 378 Logo 380 Phrogram 378 QBASIC 382 Smalltalk 378 Squeak Etoys 378 Programmierstil 82 Property Editor-Eigenschaften max 278 min 278 Property Editor (PythonCard) 267, 278 Prozent 33 Prozentzeichen, % 291, 295 Punkteverbinden 199 Punktnotation 156 .py 305, 309 Pygame 97, 182, 356, 380 Abwärts-Pfeil 231 Animation 203 Anzeige 187 Argumente 193 Aufwärts-Pfeil 231 benutzerdefinierte Ereignisse 236 Bilder 199 blit 201 clock.get_fps() 223 clock.tick() 222 colormixer.py 190 draw 191 draw.rect() 356 Ereignisliste 233 Ereignisschleife 183, 228 Farben 189 Fenster erstellen 183 Fenster offen halten 184 Fenster schließen 186 flip() 187 font 242 font-Objekt 243, 356 Formen zeichnen 186 Framerate 223 Größe 191 Kollisionserkennung 217, 241 Linienstärke 193 Mailingliste 380 Oberflächen 188 pixelgenau 220 Position 190 pygame.draw.circle() 187 pygame.draw.lines() 197 pygame.draw.rect() 192 pygame.event 230 pygame.font 242 pygame.mixer 250 pygame.time.Clock() 222 PyPong 238 rect 191 spritecollide() 219, 220 Sprites 211 Sprites gruppieren 217 sys.exit() 186 Tastennamen 233 Textanzeige 242 time 222 time.delay() 221 pygame.font 242 pygame.image.load() 201 pygame.mixer 250 initialisieren 252 Musik 252 Sound 252 PyLogo 380 PyPong 238 Musik 261 444 Index Sounds 257 Sound und Musik 262 PyPong-Programm 241, 246 Python 379 3-D-Grafik 381 Anführungszeichen 17 Codeblock 65 Dateiobjekt 310 datetime 361 Doppelstern 32 EasyGui 53 eingebaute Funktionen 39, 46 Einrücken 66 Einrückungskonvention 66 Fehlerbehandlung 371 Global Module Index 379 help() 62 Integerdivision 29 Kommentare 91 künftige Versionen 49 Liste 79 Module 53, 97, 172, 173 Namenskonvention für Klassen 163 Newline-Zeichen 287 Numeric-Modul 182 Objekte 117, 153, 296 objektorientiert 153 Online-Dokumentation 379 os 366 pickle 318 print 286 PyLogo 380 PyOpenGL 380 PythonCard 266 Python-Standardbibliothek 178 Pywinauto 381 randint() 330 Referenz 379 Reihenfolge der Operationen 30 RUR-PLE 380 Speicherverwaltung 149 Spezialmethoden 159 Standardmodule 178 Strings 296 Syntax 214 testen 63 try-except 370 turtle 380 Tutorial 379 unveränderlich 130 van Rossum, Guido 379 444 Variablen 23 VPython 381 win32com 382 Windows 381 Zeilenumbrüche 288 PythonCard 266, 320 Background 271 Button 267 command 283 component 267 Dialogfeld 376 Ereignishandler 271 Ereignisse 272 Gauge 369 GUI 369 Hotkey 280 Image 369 ImageButton 369 Komponente 369 Liste 272 Mailingliste 379 Menü 278 Menu Editor 279 Menü-Ereignishandler 281 NewButton 267 Objekt 270 Property Editor 267, 278 Resource Editor 267, 274, 278, 327 Ressourcendatei 268 self 272 StaticText 369 Timer 370 wxPython 266 Python-Datei, .py 305, 309 Python-Standardbibliothek 178 Pywinauto 381 Q QBASIC 382 Quadrat- und Kubikzahlen ausgeben QUIT 231 Quotient 32 R randint() 330 random 180, 329 randint() 180 random.choice() 322 range() 83, 84 raw_input() 45, 57 String 45 290 Index Zahlen bekommen 48 readline() 312, 313 readlines() 311 rect-Methode, move() 215 Reihenfolge der Operationen 30 remove() 123, 336 rendern 243 Resource Editor 327 PythonCard 267, 274, 278 Ressourcendatei 268 Rest 32 return 146 reverse() 127 reverse-Parameter 128 RGB 189 Robotik 378 Rumpf der Schleife 78 runde Klammern 31, 46, 49, 122, 125, 130, 141 Runden 292 Rundungsfehler 41, 320 Run in Terminal 183 Run without arguments 225 RUR-PLE 380 S Schlange 228 Schleifen Bedingung 76, 87 break 89 continue 88 doppelt geschachtelte 105 Endlosschleifen 78 Ereignis 228 geschachtelte 101, 109 Iteration 78, 81, 101 Liste 126 mit range() 80 Schleifenrumpf 78 variabel und geschachtelt 104 variable 103 Variablenname 81 Verarbeitung 76 while 87 Zählschleifen 76 Schleifenvariablen Namenskonvention 82 schließen, Datei, close() 312, 316 Schlüsselwort and 70 class 270 def 137 elif 68, 101 else 69 for 76 global 150 if 65, 70, 101 in 125, 300 not 72 or 71 pass 169, 184 return 146 sort() 127 while 87 Schrägstrich / 28 schreiben 304 schreiben, Datei 315, 319 print 318 Schreibmodus für neue Dateien 317 für vorhandene Dateien 317 Schwerkraftsimulation 355 seek() 313 self 161, 272 Simulation 354 Schwerkraft 355 Zeit 360 Sinuskurve 195 Skier-Programm 97 SkiFree 96 sleep() 179 Slice, Abkürzung 120 Slice-Notation 120, 128 Slicing 119 Smalltalk 378 sort() 127 sorted() 130 Sound 250 abspielen 251 Ausgabe 250 Eingabe 250 generieren 251 in Pygame ausprobieren 253 Lautstärke 254 MP3-Dateien 251 Musik 252 Ogg Vorbis-Dateien 251 pygame.mixer 252 PyPong 257 Schleifen 256 Synthesizer 251 Wave-Dateien 251 444 Index WMA-Dateien 251 Soundclips 252 Sounddateien .mp3 252, 305 .ogg 252 .wav 252 .wma 252 Soundeffekte 252 SPE 183, 185, 352 Speicherorte 306 Speicherverwaltung 147, 149 Spiele, Zufall 329 split() 296, 366 Split-Marker 297 Whitespace 297 Sprite 211, 356 spritecollide() 219, 220 Sprite-Eigenschaften image 212, 240 rect 212 Sprite-Gruppe 217 statt Liste 218 Squeak Etoys 378 Standardargumente 59 Standardmodule 178 startswith() 299 Stern, * 178, 180 Steuerelemente 273 Stil 82, 94 __str__() 160 str() 39 Strg-Break 185 Strg-C 78, 185 Strg-Umschalt-R 225 String 22, 43, 45, 84, 310 drei Anführungszeichen 23 mit raw_input() 46 Teilstring 300 Verkettung 22 Stringmethoden 296 endswith() 299 index() 300 join() 298 lower() 302 split() 296 startswith() 299 strip() 301 Suchen 298 upper() 302 Stringvariable, %s 291 Subtraktion 28 444 Surface.get_at() 199 Surface.set_at() 199 Symbol & 280 % 33 Syntax 214 sys.exit() 186 T Tabellen 131 Zugriff auf Werte 133 Tabstop 289 Tabulatoren 110, 289 Tastaturereignis 229 Tausendmal würfeln elfseitiger Würfel 331 zwei sechsseitige Würfel 332 Teilstring 300 Temperaturen umrechnen 48 Temperaturumrechnungsprogramm Test 63 Textdateien 305, 313 tiefgestellte Zahl 35 time 179 sleep() 179 time.delay() 221 timedelta 363, 364 time-Klasse 362 Timer 235, 370 Tippgeschwindigkeit 365 Top-Down 343 True 125, 225 try-except 370 except-Block 371 try-Block 371 Tupel 130 turtle 380 .txt 305 type() 42 Typkonvertierung 39 float() 39 int() 39 str() 39 Typ, Tupel 130 U überprüfen 346 ungleich 67, 73 Unterordner 307 Unterverzeichnisse 307 unveränderliche Variable 130 276 Index upper() 302 uppercase 302 V Validierungscode 346 van Rossum, Guido 379 Variablen 21, 23, 25, 116, 131 count 110 dekrementieren 24, 34 Geltungsbereich 147 global 148, 150 inkrementieren 24, 34 lokale 148 Namen 151 nicht im Geltungsbereich 148 Schleifen 82 unveränderliche 130 veränderliche 130 Zähler 335 Variablenname Groß- und Kleinschreibung 25 Regeln 25, 383 Schleife 81 veränderliche Variable 130 Verarbeitung 53 Vererbung 168 Vergleichsoperatoren 67 verwenden 68 Verketten von Operatoren 67 Verkettung 22, 287, 297 Versuch globale Variable in einer Funktion ändern 150 lokale Variable ausgeben 148 Verzeichnisse 306 Unterverzeichnisse 307 Verzeichnisstruktur 306 virtuelles Haustier, GUI 369 Vorwärts-Schrägstrich, / 308 VPython 381 W Wahrscheinlichkeit 329, 331, 333 Gedächtnis 330, 336 Wasserball abprallen lassen 206 umbrechen 208 Wasserball-Bild in einem Pygame-Fenster anzeigen 200 Wave-Dateien 251 Werte zurückgeben 146 while 87, 184, 225 while-Schleife 87, 101, 184 Ereignisschleife 228 Programm 87 Test 87 Whitespace 297, 301 Widgets 273 win32com 382 Windows Media Audio-Dateien 251 wissenschaftliche Notation 35 WMA-Dateien 251 Würfel 330 verschiedene Kombinationen 333 zwei 331 Wurstkombinationen 109 Wurstprogramm mit Kalorienzähler 112 wxPython 266, 376 X x-Achse 190 xturtle 380 Y y-Achse 190 Z Zahlen 22 Zahlen raten mit EasyGui 60 Zähler 335 Zählschleifen 76, 79 Zehnmal hintereinander Kopf 335 Zeichen – 28 ** 32 / 28 # 92, 95 + 27 = 29, 213 Zeilenende-Kommentare 92 Zeit Datum und Uhrzeit 361 Delta 361, 363 Echtzeit 361 mit pickle in einer Datei speichern Zeitsimulation 360 Zeitstempel 361 Zufall 329 Zufallsereignis 330 Zufallsspiele 329 Zugriff auf Werte einer Tabelle 133 Zuweisungsoperator 29 367 444