|
Zu diesem Buch – sowie zu vielen weiteren dpunkt.büchern – können Sie auch das entsprechende E-Book im PDF-Format herunterladen. Werden Sie dazu einfach Mitglied bei dpunkt.plus+: www.dpunkt.plus |
Der spielerische Weg zur Programmiersprache
Al Sweigart
Lektorat: Gabriel Neumann
Fachgutachterin (amerikanische Ausgabe): Ari Lacenski
Copy-Editing: Claudia Lötschert
Übersetzung & Satz: G&U Language & Publishing Services GmbH, www.gundu.com
Herstellung: Nadine Thiele
Umschlaggestaltung: Helmut Kraus, www.exclam.de
nach der Originalvorlage von No Starch Press
Druck und Bindung: M.P. Media-Print Informationstechnologie GmbH, 33100 Paderborn
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
ISBN:
Print 978-3-86490-492-9
PDF 978-3-96088-322-7
ePub 978-3-96088-323-4
mobi 978-3-96088-324-1
1. Auflage 2017
Translation Copyright für die deutschsprachige Ausgabe © 2017 dpunkt.verlag GmbH
Wieblinger Weg 17
69123 Heidelberg
Copyright © 2017 by Al Sweigart. Title of English-language original: Invent Your Own Computer Games with Python, 4th Edition, ISBN 978-1-59327-795-6, published by No Starch Press.
German-language edition copyright © 2017 by dpunkt.verlag. All rights reserved.
Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.
Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.
Alle Angaben und Programme in diesem Buch wurden mit größter Sorgfalt kontrolliert. Weder Autor noch Verlag können jedoch für Schäden haftbar gemacht werden, die in Zusammenhang mit der Verwendung dieses Buches stehen.
5 4 3 2 1 0
Der Autor
Die Fachgutachterin der amerikanischen Ausgabe
Danksagung
Einleitung
Zielgruppe
Der Aufbau dieses Buches
Die Codebeispiele
Zeilennummern und Einrückungen
Lange Codezeilen
Python herunterladen und installieren
IDLE starten
Online Hilfe finden
1 Die interaktive Shell
Einfaches Rechnen
Integer und Fließkommazahlen
Ausdrücke
Ausdrücke auswerten
Syntaxfehler
Werte in Variablen speichern
Zusammenfassung
2 Programme schreiben
Stringwerte
Stringverkettung
Programme im Dateieditor von IDLE schreiben
Das Hello-World-Programm schreiben
Das Programm speichern
Das Programm ausführen
So funktioniert das Hello-World-Programm
Kommentare
Funktionen: Miniprogramme innerhalb von Programmen
Das Ende des Programms
Variablennamen
Zusammenfassung
3 Zahlen raten
Ein Beispieldurchlauf des Zahlenratespiels
Der Quellcode für das Zahlenratespiel
Das Modul random importieren
Zufallszahlen mit der Funktion random.randint() erzeugen
Den Spieler begrüßen
Flusssteuerungsanweisungen
Code in Schleifen wiederholen
Blöcke
for-Schleifen
Die Vermutung des Spielers abrufen
Werte mit den Funktionen int(), float() und str() umwandeln
Boolesche Werte
Vergleichsoperatoren
Bedingungen
Experimente mit booleschen Werten, Vergleichsoperatoren und Bedingungen
Der Unterschied zwischen = und ==
if-Anweisungen
Schleifen mit break vorzeitig abbrechen
Wenn der Spieler gewonnen hat
Wenn der Spieler verloren hat
Zusammenfassung
4 Ein Kalauerprogramm
Ein Beispieldurchlauf von Jokes
De Quellcode für Jokes
Funktionsweise des Codes
Maskierungszeichen
Einfache und doppelte Anführungszeichen
Der Schlüsselwortparameter end der Funktion print()
Zusammenfassung
5 Im Reich der Drachen
Spielverlauf von Dragon Realm
Ein Beispieldurchlauf von Dragon Realm
Das Flussdiagramm für Dragon Realm
Quellcode von Dragon Realm
Die Module random und time importieren
Funktionen
def-Anweisungen
Funktionen aufrufen
Wohin mit Funktionsdefinitionen?
Mehrzeilige Strings
while-Schleifen
Boolesche Operatoren
Der Operator and
Der Operator or
Der Operator not
Ausdrücke mit booleschen Operatoren auswerten
Rückgabewerte
Globaler und lokaler Gültigkeitsbereich
Funktionsparameter
Das Ergebnis anzeigen
Die Höhle mit dem freundlichen Drachen bestimmen
Die Hauptschleife des Spiels
Die Funktionen aufrufen
Neue Runde
Zusammenfassung
6 Der Debugger
Fehlerarten
Der Debugger
Den Debugger starten
Das Programm im Debugger schrittweise durchlaufen
Fehler finden
Haltepunkte setzen
Haltepunkte verwenden
Zusammenfassung
7 Galgenmännchen: Entwurf mit einem Flussdiagramm
Die Regeln für Galgenmännchen
Ein Beispieldurchlauf von Galgenmännchen
ASCII-Grafik
Programme mit Flussdiagrammen entwerfen
Das Flussdiagramm zeichnen
Verzweigungen in Flussdiagrammen
Das Spiel beenden oder neu starten
Erneut raten
Rückmeldung an den Spieler
Zusammenfassung
8 Galgenmännchen: Der Code
Der Quellcode von Galgenmännchen
Das Modul random importieren
Konstanten
Der Datentyp für Listen
Zugriff auf Listenelemente über den Index
Listenverkettung
Der Operator in
Methoden
Die Listenmethoden reverse() und append()
Die Methode split()
Ein Wort aus der Liste auswählen
Die Grafik anzeigen
Die Funktionen list() und range()
Listen- und Stringslices
Das zu erratende Wort mit Leerstellen anzeigen
Die Rateversuche des Spielers abrufen
Die Stringmethoden lower() und upper()
Die while-Schleife verlassen
elif-Anweisungen
Die Eingabe eines gültigen Werts sicherstellen
Dem Spieler eine weitere Runde anbieten
Die Funktionen im Galgenmännchen-Programm
Die Hauptschleife des Spiels
Die Funktion displayBoard() aufrufen
Den Spieler raten lassen
Gehört der Buchstabe zu dem Wort?
Hat der Spieler gewonnen?
Fehlversuche handhaben
Hat der Spieler verloren?
Das Spiel beenden oder zurücksetzen
Zusammenfassung
9 Galgenmännchen: Erweiterungen
Mehr Rateversuche hinzufügen
Dictionarys
Die Größe eines Dictionarys mit len() bestimmen
Der Unterschied zwischen Dictionarys und Listen
Die Dictionary-Methoden keys() und values()
Dictionarys in Galgenmännchen
Zufällige Auswahl aus einer Liste
Elemente aus Listen entfernen
Mehrfachzuweisung
Die Wortkategorie ausgeben
Zusammenfassung
10 Tic-Tac-Toe
Ein Beispieldurchlauf von Tic-Tac-Toe
Der Quellcode von Tic-Tac-Toe
Das Programm entwerfen
Das Spielbrett in Form von Daten darstellen
Die Strategie der Spiel-KI
Das Modul random importieren
Das Spielbrett anzeigen
Den Spieler zwischen X und O wählen lassen
Den ersten Zug auswürfeln
Eine Markierung auf dem Spielbrett vornehmen
Listenverweise
Listenverweise in makeMove()
Hat der Spieler gewonnen?
Die Spielbrettdaten duplizieren
Ist ein Feld belegt?
Einen Zug vom Spieler abrufen
Kurzschlussauswertung
Einen Zug von einer Zugliste auswählen
Der Wert None
Die KI gestalten
Prüfung auf einen Gewinnzug des Computers
Prüfung auf einen Gewinnzug des Spielers
Ecken, Mitte und Seitenfelder prüfen
Ist das Brett voll?
Die Hauptschleife des Spiels
Den Spielerbuchstaben auswählen und den ersten Zug auslosen
Der Zug des Spielers
Der Zug des Computers
Eine weitere Spielrunde anbieten
Zusammenfassung
11 Bagels
Ein Beispieldurchlauf von Bagels
Der Quellcode von Bagels
Das Flussdiagramm für Bagels
Import von random() und Definition von getSecretNum()
Ziffern durcheinanderwürfeln
Reihenfolge von Listenelementen mit random.shuffle() ändern
Die Geheimzahl aus durcheinandergewürfelten Ziffern zusammenstellen
Erweiterte Zuweisungsoperatoren
Berechnungen für die Hinweise
Die Listenmethode sort()
Die Stringmethode join()
Besteht der String nur aus Ziffern?
Das Spiel starten
Stringinterpolation
Die Hauptschleife des Spiels
Die Vermutung des Spielers abrufen
Die Hinweise gewinnen
Auf Sieg oder Niederlage prüfen
Nach einer weiteren Runde fragen
Zusammenfassung
12 Kartesische Koordinaten
Raster und kartesische Koordinaten
Negative Zahlen
Das Koordinatensystem eines Computerbildschirms
Rechentricks
Trick 1: Ein Minuszeichen verschlingt ein Pluszeichen zu seiner Linken
Trick 2: Zweimal Minus gibt Plus
Trick 3: Zwei Zahlen in einer Addition können den Platz tauschen
Beträge und die Funktion abs()
Zusammenfassung
13 Sonar-Schatzsuche
Ein Beispieldurchlauf der Sonar-Schatzsuche
Der Quellcode für die Sonar-Schatzsuche
Entwurf des Programms
Die Module random, sys und math importieren
Ein neues Spielbrett erstellen
Das Spielbrett zeichnen
Die x-Koordinaten am oberen Rand des Spielbretts zeichnen
Das Meer zeichnen
Eine Meeresreihe ausgeben
Die x-Koordinaten am unteren Rand ausgeben
Die zufällig verteilen Schatztruhen erstellen
Die Gültigkeit eines Zugs bestimmen
Einen Zug auf dem Spielbrett machen
Die nächstgelegene Schatztruhe finden
Werte mit der Listenmethode remove() entfernen
Den Zug des Spielers abrufen
Die Spielanleitung ausgeben
Die Hauptschleife des Spiels
Den Spielzustand anzeigen
Den Zug des Spielers verarbeiten
Eine Schatztruhe finden
Hat der Spieler gewonnen?
Hat der Spieler verloren?
Das Programm mit der Funktion sys.exit() beenden
Zusammenfassung
14 Die Caesar-Chiffre
Kryptografie und Verschlüsselung
Funktionsweise der Caesar-Chiffre
Ein Beispieldurchlauf der Caesar-Chiffre
Der Quellcode für die Caesar-Chiffre
Die maximale Schlüssellänge festlegen
Auswahl zwischen Ver- und Entschlüsselung
Die Nachricht vom Benutzer abrufen
Den Schlüssel vom Benutzer abrufen
Die Nachricht verschlüsseln oder entschlüsseln
Strings mit der Methode find() finden
Die einzelnen Buchstaben ver- bzw. entschlüsseln
Das Programm starten
Brute-Force-Entschlüsselung
Den Brute-Force-Modus hinzufügen
Zusammenfassung
15 Reversegam
Die Spielregeln von Reversegam
Ein Beispieldurchlauf von Reversegam
Der Quellcode von Reversegam
Module importieren und Konstanten einrichten
Die Datenstruktur für das Spielbrett
Die Datenstruktur für das Spielbrett auf dem Bildschirm ausgeben
Eine neue Datenstruktur für das Brett erstellen
Züge auf Gültigkeit prüfen
Die acht Richtungen prüfen
Prüfen, ob Steine gedreht werden müssen
Prüfen auf gültige Koordinaten
Eine Liste mit allen gültigen Zügen bekommen
Die Funktion bool() aufrufen
Die Punktzahl des Spielbretts ermitteln
Die Steinwahl des Spielers abfragen
Entscheiden, wer beginnt
Einen Spielstein auf dem Brett platzieren
Die Datenstruktur des Spielbretts kopieren
Bestimmen, was eine Ecke ist
Den Spielzug abfragen
Der Zug des Computers
Strategische Züge in Ecken
Eine Liste der besten Züge erstellen
Die Punkte auf dem Bildschirm ausgeben
Das Spiel starten
Ein Patt erkennen
Der Spieler ist am Zug
Der Spielzug des Computers
Die Spielschleife
Fragen, ob der Spieler erneut spielen möchte
Zusammenfassung
16 Reversegam-KI-Simulation
Der Computer spielt gegen sich selbst
Ein Beispieldurchlauf von Simulation 1
Der Quellcode für Simulation 1
Die Spielereingaben entfernen und einen Computerspieler hinzufügen
Den Computer mehrfach gegen sich selbst spielen lassen
Ein Beispieldurchlauf von Simulation 2
Quellcode für Simulation 2
Den Überblick über mehrere Spiele behalten
Die Funktionsaufrufe print() auskommentieren
Die KI mit Prozentsätzen bewerten
Die verschiedenen KI-Algorithmen vergleichen
Quellcode für Simulation 3
Wie die KI in Simulation 3 funktioniert
Die KI miteinander vergleichen
Zusammenfassung
17 Grafik einsetzen
pygame installieren
Hello World in pygame
Beispieldurchlauf des pygame Hello World
Quellcode für pygame Hello World
Das Modul pygame importieren
pygame initialisieren
Das pygame-Fenster einrichten
Tupel
Surface-Objekte
Farb-Variablen einrichten
Im pygame-Fenster Text ausgeben
Text mit Schriftarten formatieren
Ein Font-Objekt ausgeben
Die Textposition mit Rect-Attributen festlegen
Ein Surface-Objekt mit Farbe füllen
Die Zeichenfunktionen von pygame
Ein Polygon zeichnen
Eine Linie zeichnen
Einen Kreis zeichnen
Eine Ellipse zeichnen
Ein Rechteck zeichnen
Pixel färben
Die blit()-Methode für Surface-Objekte
Das Surface-Objekt auf dem Bildschirm ausgeben
Ereignisse und die Game-Schleife
Ereignis-Objekte erhalten
Das Programm beenden
Zusammenfassung
18 Grafiken animieren
Beispieldurchlauf des Animationsprogramms
Der Quellcode für das Animationsprogramm
Kästen bewegen und abprallen lassen
Die Konstanten einrichten
Konstanten für die Richtung
Konstanten für die Farbe
Datenstrukturen für die Kästen einrichten
Die Game-Schleife
Wenn der Spieler aufhören möchte
Die Kästen bewegen
Einen Kasten abprallen lassen
Kästen an ihren neuen Positionen im Fenster zeichnen
Das Fenster auf den Bildschirm zeichnen
Zusammenfassung
19 Kollisionserkennung
Beispieldurchlauf der Kollisionserkennung
Der Quellcode für die Kollisionserkennung
Die Module importieren
Das Programm mit einem Zeitgeber steuern
Das Fenster und die Datenstrukturen einrichten
Variablen zur Bewegungsverfolgung einrichten
Ereignisse verarbeiten
Das KEYDOWN-Ereignis
Das Ereignis KEYUP
Den Spieler teleportieren
Neue Nahrungsquadrate hinzufügen
Den Spieler im Fenster bewegen
Den Spieler im Fenster zeichnen
Auf Kollisionen prüfen
Die Nahrungsquadrate im Fenster zeichnen
Zusammenfassung
20 Toneffekte und Bilder
Bilder mit Sprites hinzufügen
Ton-und Bilddateien
Beispieldurchlauf des Sprites- und Sound-Programms
Der Code für das Sprites- und Sounds-Programm
Das Fenster und die Datenstruktur einrichten
Ein Sprite hinzufügen
Die Größe eines Sprites verändern
Die Musik und die Toneffekte einrichten
Sound-Dateien hinzufügen
Den Ton ein- und ausschalten
Den Spieler im Fenster zeichnen
Auf Kollisionen prüfen
Die Kirschen im Fenster zeichnen
Zusammenfassung
21 Dodger mit Ton und Grafik
Wiederholung: Die grundlegenden Datentypen in pygame
Ein Beispieldurchlauf von Dodger
Der Quellcode von Dodger
Die Module importieren
Die Konstanten einrichten
Funktionen definieren
Das Spiel beenden und unterbrechen
Kollisionen mit Gegnern feststellen
Text in das Fenster zeichnen
pygame initialisieren und das Fenster einrichten
Schrift-, Klang- und Bildobjekte einrichten
Den Startbildschirm anzeigen
Das Spiel starten
Die Spielschleife
Tastaturereignisse
Mausbewegungen
Neue Gegner hinzufügen
Die Figur des Spielers und die Gegner bewegen
Die Cheats
Gegner entfernen
Das Fenster zeichnen
Den Punktestand ausgeben
Die Spielerfigur und die Gegner zeichnen
Auf Kollisionen prüfen
Game Over
Das Spiel abwandeln
Zusammenfassung
Stichwortverzeichnis
Für Caro
Al Sweigart ist Softwareentwickler, Fachbuchautor und ein echter Frood, der weiß, wo sein Handtuch ist. Er hat mehrere Programmierbücher für Einsteiger geschrieben, darunter Routineaufgaben mit Python automatisieren und Coole Spiele mit Scratch, die ebenfalls beim dpunkt.verlag erschienen sind. Auf seiner Website https://inventwithpython.com/ stehen seine Bücher unter einer Creative-Commons-Lizenz auch kostenlos zur Verfügung.
Ari Lacenski ist Entwicklerin für Android-Anwendungen und Python-Software. Sie lebt in Bay Area, wo sie auf http://gradlewhy.ghost.io/ über Android-Programmierung schreibt und als Mentorin für Women Who Code dient.
Ohne die herausragende Arbeit des Teams von No Starch Press wäre dieses Buch nicht möglich gewesen. Ich danke meinem Herausgeber Bill Pollock und meinen Lektoren Laurel Chun, Jan Cash und Tyler Ortman für ihre unglaubliche Hilfe während des gesamten Vorgangs, meiner Fachgutachterin Ari Lacenski für ihre gründliche Durchsicht und Josh Ellingson für ein weiteres hervorragendes Titelbild.
Die ersten Videospiele, die ich im Kindesalter spielte, machten mich süchtig. Ich wollte sie nicht nur spielen, ich wollte selbst so etwas gestalten. Damals fand ich ein Buch, das mir zeigte, wie ich eigene erste Programme und Spiele schreiben konnte. Das machte Spaß und war ganz einfach. Die ersten Spiele, die ich entwickelte, waren ähnlich wie diejenigen in diesem Buch. Sie waren nicht so ausgefeilt wie die Nintendo-Spiele, die meine Eltern für mich kauften, aber sie waren mein eigenes Werk.
Jetzt, als Erwachsener, habe ich immer noch Spaß am Programmieren und werde sogar dafür bezahlt. Doch auch wenn Sie nicht vorhaben, Programmierer zu werden, ist Programmierung eine nützliche und unterhaltsame Fähigkeit. Sie schulen sich dabei, logisch zu denken, planvoll vorzugehen und ihre Ideen kritisch zu betrachten, wenn Sie Fehler in Ihrem Code gefunden haben.
Viele Programmierbücher für Einsteiger fallen in eine von zwei verschiedenen Kategorien. Die erste Art von Büchern konzentriert sich so sehr auf »Spielentwicklungssoftware« oder stark vereinfachende Sprachen, dass man das, was da gelehrt wird, gar nicht mehr als »Programmieren« bezeichnen kann. Die zweite Kategorie umfasst Bücher, die Programmierung in der Art eines Mathebuchs abhandeln: lauter Lehrsätze und Begriffe, aber nur wenige praktische Anwendungen für die Leser. Das vorliegende Buch verfolgt einen anderen Ansatz und bringt Ihnen das Programmieren am Beispiel von Videospielen bei. Ich stelle Ihnen den Quellcode der Spiele jeweils zu Anfang vor und erkläre dann die Programmierprinzipien anhand dieser Beispiele. Diese Vorgehensweise war für mich selbst von entscheidender Bedeutung, als ich Programmieren lernte. Je mehr ich darüber erfuhr, wie die Programme anderer Leute funktionierten, umso mehr Ideen bekam ich für meine eigenen.
Sie brauchen nicht mehr als einen Computer, den Python-Interpreter (eine kostenlose Software) und dieses Buch. Wenn Sie gelernt haben, wie Sie die Spiele in diesem programmieren, können Sie auch Ihre eigenen entwickeln.
Computer sind unglaubliche Maschinen. Zu lernen, wie man sie programmiert, ist gar nicht so schwer, wie die meisten Leute glauben. Ein Computer-programm ist eine Folge von Anweisungen, die ein Computer verstehen kann, ähnlich wie ein Buch eine Folge von Sätzen ist, die der Leser verstehen kann. Um einen Computer anzuweisen, etwas zu tun, müssen Sie ein Programm in einer Sprache schreiben, die er versteht. In diesem Buch lernen Sie die Programmiersprache Python kennen. Es gibt noch viele andere Programmiersprachen, die Sie lernen können, z. B. BASIC, Java, JavaScript, PHP oder C++.
Als Kind habe ich BASIC gelernt, aber neuere Programmiersprachen wie Python lassen sich noch einfacher lernen. Python wird auch von professionellen Programmierern sowohl bei der Arbeit als auch für Hobbyprojekte verwendet. Installation und Verwendung sind außerdem völlig kostenlos. Sie brauchen lediglich eine Internetverbindung, um die Sprache herunterzuladen.
Da Videospiele nichts anderes sind als Computerprogramme, bestehen sie ebenfalls aus Anweisungen. Im Vergleich zu den Spielen für die Xbox, die Play-Station oder den Nintendo wirken diejenigen, die Sie in diesem Buch erstellen werden, ziemlich simpel. Sie weisen keine anspruchsvolle Grafik auf, sondern sind absichtlich einfach gehalten, sodass Sie sich drauf konzentrieren können, Programmieren zu lernen. Außerdem müssen Spiele nicht kompliziert sein, um Spaß zu machen.
Programmieren an sich ist nicht schwer. Dagegen kann es durchaus schwer sein, Anleitungen zu finden, die einem sagen, wie man interessante Dinge programmiert. Andere Computerbücher behandeln viele Themen, die Neulinge gar nicht brauchen. Dieses Buch zeigt Ihnen, wie Sie Ihre eigenen Spiele programmieren. Damit erwerben Sie eine nützliche Fähigkeit und haben außerdem unterhaltsame Spiele, die Sie stolz vorstellen können. Dieses Buch richtet sich an folgende Leser:
In den meisten Kapiteln dieses Buches wird jeweils ein neues Spielprojekt vorgestellt und erläutert. Einige wenige Kapitel sind zusätzlichen interessanten Themen gewidmet, z. B. dem Debugging. Neue Programmierprinzipien werden jeweils dann vorgestellt, wenn sie in den Spielen vorkommen. Die Kapitel sollten in der vorliegenden Reihenfolge gelesen werden. Die folgende kurze Aufstellung zeigt, was Sie in den einzelnen Kapiteln erwartet:
Die meisten Kapitel dieses Buches beginnen mit einem Beispieldurchlauf des Programms, das in dem Kapitel vorgestellt wird. Dieser Durchlauf zeigt, wie das Programm aussieht, wenn Sie es ausführen. Die Eingaben des Benutzers sind durch Fettdruck gekennzeichnet.
Ich rate Ihnen, den Code der einzelnen Programme jeweils selbst in den IDLE-Dateieditor einzugeben, anstatt ihn einfach nur herunterzuladen und zu kopieren. Wenn Sie sich die Zeit nehmen, den Code abzutippen, werden Sie mehr davon im Kopf behalten.
Beim Abtippen des Quellcodes aus dem Buch dürfen Sie die Nummern zu Beginn der einzelnen Zeilen nicht mit eingeben! Nehmen wir an, Sie sehen die folgende Codezeile:
9. number = random.randint(1, 20)
Hier dürfen Sie weder 9. noch das darauffolgende Leerzeichen eingeben, sondern nur Folgendes:
number = random.randint(1, 20)
Die Zeilennummern stehen hier nur, um in den Erklärungen auf die einzelnen Zeilen verweisen zu können. Sie gehören nicht zum Quellcode des Programms.
Abgesehen von diesen Zeilennummern jedoch müssen Sie den Code genau so eingeben, wie er in dem Buch erscheint. Einige Zeilen sind mit vier, acht oder mehr Leerzeichen eingerückt. Diese Leerzeichen zu Anfang einer Zeile wirken sich darauf aus, wie Python die Anweisungen deutet, weshalb es sehr wichtig ist, sie einzuschließen.
Betrachten Sie dazu das folgende Beispiel. Die Leerzeichen sind durch dicke Punkte (•) dargestellt, sodass Sie sie sehen können:
while guesses < 10:
····if number == 42:
········print('Hello')
Die erste Zeile ist nicht eingerückt, die zweite um vier und die dritte um acht Leerzeichen. In den tatsächlichen Beispielen in dem Buch sind die Leerzeichen zwar nicht durch solche Punkte gekennzeichnet, aber da alle Zeichen in IDLE die gleiche Breite aufweisen, können Sie die Anzahl der Leerzeichen einfach dadurch bestimmen, dass Sie die Anzahl der Zeichen in der darüber- oder darunterliegenden Zeile zählen.
Manche Codeanweisungen sind so lang, dass sie nicht mehr in eine Buchzeile passen und daher in die nächste Codezeile umbrechen. Allerdings passt die Zeile auf den Computerbildschirm. Geben Sie sie dort in einer einzigen Zeile ein, ohne zwischendurch die Eingabetaste zu drücken. Ob eine Anweisung einfach nur fortgesetzt wird oder ob tatsächlich eine neue Anweisung beginnt, können Sie anhand der Zeilennummern auf der linken Seite erkennen. Das folgende Beispiel zeigt nur zwei Anweisungen:
1. print('This is the first instruction!xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxx')
2. print('This is the second instruction, not the third instruction.')
Die erste Anweisung bricht in die zweite Buchzeile um. Da die zweite Buchzeile keine Zeilennummer trägt, können Sie erkennen, dass es sich immer noch um die erste Codezeile handelt.
Um die Programme eingeben und ausprobieren zu können, Sie müssen eine Software installieren, die als Python-Interpreter bezeichnet wird und die Anweisungen versteht, die Sie in der Sprache Python geschrieben habe. Den Python-Interpreter werde ich im Folgenden der Einfachheit halber auch einfach als Python bezeichnen.
In diesem Abschnitt zeige ich Ihnen, wie Sie Python 3 – genauer gesagt, Python 3.4 – für Windows, OS X und Ubuntu herunterladen. Es gibt schon neuere Versionen als 3.4, aber das Modul pygame, das wir in den Kapiteln 17 bis 21 verwenden, unterstützt zurzeit nur die Versionen bis 3.4.
Beachten Sie auch, dass es erhebliche Unterschiede zwischen Python 2 und Python 3 gibt. Die Programme in diesem Buch verwenden Python 3. Wenn Sie versuchen, Sie mit Python 2 auszuführen, erhalten Sie Fehlermeldungen. Das ist so wichtig, dass ich bei jedem Programm den kleinen Pinguin hinzugefügt habe, um Sie darauf aufmerksam zu machen.
Wenn Sie mit Windows arbeiten, laden Sie den MSI-Installer für Windows x86-64 von https://www.python.org/downloads/release/python-344/ herunter und doppelklicken darauf. Möglicherweise müssen Sie das Administratorkennwort für Ihren Computer eingeben.
Folgen Sie den Anweisungen, die der Installer anzeigt, um Python zu installieren. Die Vorgehensweise ist wie folgt:
Wenn Sie mit OS X arbeiten, laden Sie den MSI-Installer für Mac OS X 64 Bit/32 Bit von https://www.python.org/downloads/release/python-344/ herunter und doppelklicken darauf. Möglicherweise müssen Sie das Administratorkennwort für Ihren Computer eingeben.
Folgen Sie den Anweisungen, die der Installer anzeigt, um Python zu installieren. Die Vorgehensweise ist wie folgt:
Wenn Sie Ubuntu verwenden, könne Sie Python wie folgt aus dem Ubuntu Software Center heraus installieren:
Sollten die angegebenen Vorgehensweisen nicht funktionieren, finden Sie alternative Installationsanweisungen für Python 3.4 auf https://www.nostarch.com/inventwithpython/.
IDLE steht für Interactive Development Enrivonment, also »interaktive Entwicklungsumgebung«. Es handelt sich dabei um eine Art Textverarbeitungssystem zum Schreiben von Python-Programmen. Je nach Betriebssystem müssen Sie zum Starten dieser Software jeweils unterschiedlich vorgehen:
Das Fenster, das Sie beim Start von IDLE sehen, ist die interaktive Shell (siehe Abbildung). Wenn Sie hinter der Eingabeaufforderung >>> Python-Anweisungen in die Shell eingeben, führt Python sie aus. Anschließend erscheint wieder die Eingabeaufforderung >>>, um auf Ihre nächste Anweisung zu warten.
Die Quellcodedateien und andere Materialien zu diesem Buch finden Sie auf https://www.nostarch.com/inventwithpython/. Wenn Sie Fragen zur Programmierung im Zusammenhang mit diesem Buch haben, können Sie auf https://reddit.com/r/inventwithpython/ nachschauen oder sich über al@inventwithpython.com an mich wenden (in englischer Sprache).
Bevor Sie Ihre Fragen stellen, sollten Sie aber Folgendes unternehmen:
Je besser Sie Ihre Programmierfragen formulieren, umso besser können andere Ihnen helfen. Gehen Sie daher in solchen Fällen immer wie folgt vor:
Nun sind Sie bereit zu lernen, wie Sie Ihre eigenen Computerspiele programmieren!
Bevor Sie Spiele entwickeln können, müssen Sie erst einige elementare Programmierprinzipien lernen. In diesem Kapitel erfahren Sie daher, wie Sie die interaktive Shell von Python nutzen und grundlegende Rechenoperationen durchführen.
Starten Sie IDLE nach der Anleitung im Abschnitt »IDLE starten« in der Einleitung. Als Erstes wollen wir Python nutzen, um einige einfache Rechenaufgaben zu lösen. Die interaktive Shell lässt sich wie ein Taschenrechner benutzen. Geben Sie 2 + 2 an der Eingabeaufforderung >>> der Shell ein und drücken Sie die Eingabetaste (die je nach Tastatur oder heißen kann). Abbildung 1–1 zeigt, wie die Rechenaufgabe in der interaktiven Shell angezeigt wird. Wie Sie sehen, antwortet die Shell mit der Zahl 4.
Diese Rechenaufgabe ist ein einfacher Programmbefehl. Das Pluszeichen weist den Computer an, die beiden Zahlen 2 und 2 zu addieren. Der Computer erledigt diese Aufgabe und gibt in der folgenden Zeile die Zahl 4 aus. Tabelle 1–1 nennt weitere mathematische Symbole, die in Python zur Verfügung stehen.
Operator |
Operation |
+ |
Addition |
– |
Subtraktion |
* |
Multiplikation |
/ |
Division |
Das Minuszeichen subtrahiert Zahlen, das Sternchen multipliziert sie und der Schrägstrich teilt sie. Bei der Verwendung auf diese Weise werden +, –, * und / als Operatoren bezeichnet. Sie weisen Python an, was es mit den Zahlen auf beiden Seiten tun soll.
Integer sind ganze Zahlen wie 4, 99 oder 0. Bei Fließkommazahlen dagegen handelt es sich um Dezimalbrüche wie 3.5, 42.1 oder 5.0 (wobei in Programmiersprachen statt des im Deutschen üblichen Kommas ein Punkt verwendet wird). In Python ist 5 ein Integer und 5.0 eine Fließkommazahl.
Diese Zahlen werden als Werte bezeichnet. (Wir werden später noch andere Arten von Werten kennenlernen.) In der Rechenaufgabe, die Sie in die Shell eingegeben haben, sind 2 und 2 Integerwerte.
Die Rechenaufgabe 2 + 2 ist ein Beispiel für einen Ausdruck. Wie Abbildung 1–2 zeigt, bestehen Ausdrücke aus Werten (den Zahlen), die durch Operatoren (die Rechenzeichen) verbunden sind, um daraus einen neuen Wert zu bilden, der im Code verwendet werden kann. Computer können Millionen von Ausdrücken in Sekundenschnelle berechnen.
Versuchen Sie, einige Ausdrücke in die interaktive Shell einzugeben. Drücken Sie nach jedem dieser Ausdrücke :
>>> 2+2+2+2+2
10
>>> 8*6
48
>>> 10-5+6
11
>>> 2 + 2
4
Diese Ausdrücke sehen alle wie ganz normale Rechenaufgaben aus. Beachten Sie aber die Leerzeichen in dem Beispiel 2 +2. In Python können Sie beliebig viele Leerzeichen zwischen Werte und Operatoren schreiben. Eingaben in die aktive Shell müssen jedoch immer am Anfang der Zeile beginnen (ohne Leerzeichen davor).
Wenn ein Computer den Ausdruck 10 + 5 verarbeitet und den Wert 15 zurückgibt, so spricht man davon, dass er den Ausdruck auswertet. Das bedeutet, dass der Ausdruck auf einen einzigen Wert reduziert wird. Wenn Sie eine Rechenaufgabe lösen, reduzieren Sie sie damit auch auf einen einzigen Wert, nämlich das Ergebnis. Die Ausdrücke 10 + 5 und 10 + 3 + 2 werden beide zu 15 ausgewertet.
Wenn Python einen Ausdruck auswertet, führt es die Operationen in der gleichen Reihenfolge aus, wie Sie es beim Rechnen tun. Dabei gelten die folgenden Regeln:
Der Ausdruck 1 + 2 * 3 + 4 ergibt daher 11 und nicht 13, da zuerst 2 * 3 berechnet wird. Lautete die Aufgabe stattdessen (1 + 2) * (3 + 4), würde sich 21 ergeben, da (1 + 2) und (3 + 4) in Klammern sehen und daher vor der Multiplikation ausgewertet werden.
Ausdrücke können eine beliebige Größe aufweisen, werden aber stets zu einem einzigen Wert ausgewertet. Auch einzelne Werte können Ausdrücke sein. So wird beispielsweise der Ausdruck 15 zu dem Wert 15 ausgewertet. Der Ausdruck 8 * 3 / 2 + 2 + 7 - 9 ergibt 21. Dabei erfolgt die Berechnung in den folgenden Schritten:
Der Computer führt zwar alle diese Schritte durch, doch in der interaktiven Shell sehen Sie nichts davon, sondern nur das Ergebnis:
>>> 8 * 3 / 2 + 2 + 7 - 9
12.0
Ausdrücke mit dem Divisionsoperator / werden stets zu einer Fließkommazahl ausgewertet, hier beispielsweise 24 / 2 zu 12.0. Mathematische Operationen, an denen auch nur ein Fließkommawert beteiligt ist, ergeben wiederum Fließkommawerte. In unserem Beispiel wird deshalb 12.0 + 2 zu 14.0 ausgewertet.
Wenn Sie 5 + in die interaktive Shell eingeben, erhalten Sie die folgende Fehlermeldung:
>>> 5 +
SyntaxError: invalid syntax
Das liegt daran, dass 5 + kein Ausdruck ist. Ausdrücke bestehen aus Werten, die durch Operatoren verbunden sind, und der Operator + erwartet einen Wert davor und dahinter. Wenn ein erwarteter Wert fehlt, wird eine Fehlermeldung angezeigt.
SyntaxError