Eigene Spiele programmieren – Python lernen - Al Sweigart - E-Book

Eigene Spiele programmieren – Python lernen E-Book

Al Sweigart

0,0

Beschreibung

Dieses Buch wird Ihnen beibringen, wie man Computerspiele mit der beliebten Python- Programmiersprache entwickelt – auch wenn Sie noch nie zuvor programmiert haben! Beginnen Sie mit dem Entwurf klassischer Spiele wie Galgenmännchen, einem Zahlenratespiel und Tic-Tac-Toe. Mit fortgeschrittenen Spielen bauen Sie Ihre Programmierkenntnisse weiter aus, beispielsweise mit einer textbasierten Schatzsuche und einem animierten Kollisionsspiel mit Soundeffekten. Dabei lernen Sie grundlegende Konzepte der Programmierung und der Mathematik, die Ihnen helfen, Ihre Spieleprogrammierung auf die nächste Stufe zu heben. Lernen Sie, wie Sie • Loops, Variablen und Flusssteuerungsanweisungen in funktionierenden Programmen kombinieren. • die richtigen Datenstrukturen für die jeweilige Aufgabe einsetzen, also Listen, Dictionarys und Tupel. • mit dem pygame-Modul Ihre Spiele mit Grafiken und Animation bereichern. • Benutzereingaben über Tastatur und Maus in Ihren Spielen einsetzen. • einfache künstliche Intelligenz programmieren, um gegen den Computer zu spielen. • Kryptografie verwenden, um Text in geheimen Code zu verschlüsseln. • Ihre Programme debuggen und Fehler aufspüren. Entdecken Sie mit diesem Buch spielerisch das Potenzial von Python – und programmieren Sie schon bald Ihre eigenen Spiele!

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 477

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



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

Al Sweigart

Eigene Spiele programmieren – Python lernen

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

Inhalt

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

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

Der Autor

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.

Die Fachgutachterin der amerikanischen Ausgabe

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.

Danksagung

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.

Einleitung

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.

Zielgruppe

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:

Anfänger ohne jegliche Vorkenntnisse, die sich selbst das Programmieren beibringen möchten

Kinder und Jugendliche, die durch das Schreiben von Spielen programmieren lernen möchten

Erwachsene und Lehrer, die anderen Programmieren beibringen möchten

Jegliche Personen, ob jung oder alt, die anhand einer professionellen Programmiersprache programmieren lernen wollen

Der Aufbau dieses Buches

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:

Kapitel 1

: Die interaktive Shell

erklärt, wie Sei die interaktive Shell von Python verwenden können, um Code zeilenweise auszuprobieren.

Kapitel 2

: Programme schreiben

erklärt, wie Sie im Dateieditor von Python vollständige Programme schreiben.

In

Kapitel 3

: Zahlen raten

programmieren Sie das erste Spiel in diesem Buch. Dabei muss der Spieler eine Geheimzahl raten und erhält jeweils den Hinweis, ob seine Vermutung zu hoch oder zu niedrig war.

In

Kapitel 4

: Ein Kalauerprogramm

schreiben Sie ein einfaches Programm, das dem Benutzer mehrere Flachwitze erzählt.

In

Kapitel 5

: Im Reich der Drachen

programmieren Sie ein Ratespiel, in dem der Spieler zwischen zwei Höhlen wählen muss: In einer der beiden wohnt ein freundlicher Drache, in der anderen ein hungriger.

Kapitel 6

: Der Debugger

erklärt, wie Sie Probleme in Ihrem Code mithilfe des Debuggers lösen.

Kapitel 7

: Galgenmännchen: Entwurf mit einem Flussdiagramm

beschreibt, wie Sie Flussdiagramme zur Planung anspruchsvollerer Programme einsetzen, hier für das in den folgenden Kapiteln beschriebene Galgenmännchen-Spiel.

In

Kapitel 8

: Galgenmännchen: Der Code

schreiben Sie das Galgenmännchen-Spiel anhand des Flussdiagramms aus

Kapitel 7

.

In

Kapitel 9

: Galgenmännchen: Erweiterungen

erweitern Sie das Galgenmännchen-Spiel, indem Sie den Python-Datentyp der Dictionarys verwenden.

In

Kapitel 10

: Tic-Tac-Toe

lernen Sie, wie Sie ein Tic-Tac-Toe-Spiel schreiben, bei dem eine künstliche Intelligenz gegen den menschlichen Benutzer antritt.

In

Kapitel 11

: Bagels

schreiben Sie das Denksportspiel Bagels, in dem der Spieler anhand von Hinweisen eine Geheimzahl erraten muss.

Kapitel 12

: Kartesische Koordinaten

erklärt das kartesische Koordinatensystem, das Sie in nachfolgenden Spielen verwenden werden.

In

Kapitel 13

: Sonar-Schatzsuche

schreiben Sie ein Spiel, in dem Sie das Meer nach verlorenen Schatztruhen absuchen.

In

Kapitel 14

: Die Caesar-Chiffre

schreiben Sie ein einfaches Verschlüsselungsprogramm, mit dem Sie Geheimnachrichten verschlüsseln und entschlüsseln können.

In

Kapitel 15

: Reversegam

programmieren Sie ein anspruchsvolles Reversiähnliches Spiel mit einer fast unschlagbaren künstlichen Intelligenz als Gegner.

Kapitel 16

: Reversegam: AI-Simulation

erweitert das Reversegam-Speil aus

Kapitel 15

, sodass nun verschiedene KIs gegeneinander antreten.

Kapitel 17

: Grafik einsetzen

führt das Python-Modul

pygame

ein und zeigt, wie Sie damit 2-D-Grafiken zeichnen können.

Kapitel 18

: Grafiken animieren

zeigt, wie Sie mit

pygame

Grafiken animieren.

In

Kapitel 19

: Kollisionserkennung

lernen Sie, wie Sie in 2-D-Spielen Zusammenstöße zwischen Objekten erkennen können.

In

Kapitel 20

: Sounds und Bilder verwenden

erweitern Sie Ihre einfachen

pygame

-Spiele um Klänge und Bilder.

Kapitel 21

: Dodger mit Ton und Grafik

wendet den Stoff aus den

Kapiteln 17

bis

20

für ein animiertes Spiel namens Dodger an.

Die Codebeispiele

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.

Zeilennummern und Einrückungen

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:

Hier dürfen Sie weder 9. noch das darauffolgende Leerzeichen eingeben, sondern nur Folgendes:

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:

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.

Lange Codezeilen

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.

Python herunterladen und installieren

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:

Wählen Sie

Install for All Users

und klicken Sie auf

Weiter

.

Bestätigen Sie die Installation im Ordner

C:\Python34

, indem Sie auf

Weiter

klicken.

Klicken Sie auf

Weiter

, um den Abschnitt

Customize Python

zu überspringen.

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 eine Warnung der Art »Python.mpkg kann nicht geöffnet werden, da es von einem nicht verifizierten Entwickler stammt« erhalten, klicken Sie bei gedrückter -Taste auf die Datei

Python.mpkg

und wählen

Öffnen

aus dem dann angezeigten Menü. Möglicherweise müssen Sie das Administratorpasswort für Ihren Computer eingeben.

Klicken Sie im Willkommensabschnitt auf

Continue

und dann auf

Agree

, um die Lizenzverarbeitung zu akzeptieren.

Wählen Sie

Macintosh HD

(bzw. den Namen Ihrer Festplatte) aus und klicken Sie auf

Install

.

Wenn Sie Ubuntu verwenden, könne Sie Python wie folgt aus dem Ubuntu Software Center heraus installieren:

Öffnen Sie das Ubuntu Software Center.

Geben Sie in das Suchfeld oben rechts in dem Fenster

Python

ein.

Wählen Sie

IDLE (Python 3.4 GUI 64 bit)

aus.

Klicken Sie auf

Install

. Möglicherweise müssen Sie das Administratorpasswort Computer eingeben, um die Installation abzuschließen.

Sollten die angegebenen Vorgehensweisen nicht funktionieren, finden Sie alternative Installationsanweisungen für Python 3.4 auf https://www.nostarch.com/inventwithpython/.

IDLE starten

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:

Unter Windows klicken Sie auf das Startmenü unten links, geben

IDLE

ein und wählen

IDLE (Python GUI)

.

Unter OS X öffnen Sie den Finder und klicken auf

Programme

. Doppelklicken Sie anschließend auf

Python 3.x

und dann auf das IDLE-Symbol.

Unter Ubuntu und anderen Linux-Distributionen öffnen Sie ein Terminal-Fenster und geben

idle3

ein. Es kann auch sein, dass Sie auf

Applications

am oberen Bildschirmrand und dann auf

Programming

und

IDLE3

klicken können.

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.

Abb. E–1Die interaktive Shell von IDLE

Online Hilfe finden

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 [email protected] an mich wenden (in englischer Sprache).

Bevor Sie Ihre Fragen stellen, sollten Sie aber Folgendes unternehmen:

Wenn Sie bei einem Programm aus diesem Buch, das Sie abgetippt haben, Fehlermeldungen erhalten, prüfen Sie, ob sich Tippfehler eingeschlichen haben. Das können Sie mit dem Vergleichswerkzeug (Diff Tool) machen, das auf

https://www.nostarch.com/inventwithpython#diff

zur Verfügung steht. Kopieren Sie Ihren Code in das Diff-Tool. Sollte es Unterschiede zwischen Ihrer Version des Codes und dem im Buch geben, werden sie Ihnen angezeigt.

Schauen Sie im Web nach, ob jemand bereits die gleiche Frage gestellt (und eine Antwort darauf erhalten) hat.

Je besser Sie Ihre Programmierfragen formulieren, umso besser können andere Ihnen helfen. Gehen Sie daher in solchen Fällen immer wie folgt vor:

Erklären Sie, was Sie zu tun versuchen, wenn der Fehler auftritt. Dadurch können potenzielle Helfer erkennen, ob Sie vielleicht völlig vom Wege abgekommen sind.

Kopieren Sie die gesamte Fehlermeldung und Ihren Code.

Geben Sie an, welches Betriebssystem und welche Version Sie benutzen.

Beschreiben Sie, was Sie bereits getan haben, um das Problem zu lösen. Dadurch versichern Sie anderen, dass Sie schon selbst Anstrengungen unternommen haben, um der Sache auf den Grund zu gehen.

Bleiben Sie höflich. Fordern Sie keine Hilfe und drängen Sie Ihre Helfer nicht, schnell zu antworten.

Nun sind Sie bereit zu lernen, wie Sie Ihre eigenen Computerspiele programmieren!

1

Die interaktive Shell

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.

Themen in diesem Kapitel

OperatorenInteger und FließkommazahlenWerteAusdrückeSyntaxfehlerWerte in Variablen speichern

Einfaches Rechnen

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.

Abb. 1–1Eingabe von 2 + 2 in die aktive Shell

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

Tab. 1–1Mathematische Operatoren

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 und Fließkommazahlen

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.

Ausdrücke

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.

Abb. 1–2Ausdrücke bestehen aus Werten und Operatoren

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).

Ausdrücke auswerten

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:

Teile des Ausdrucks, die in Klammern stehen, werden zuerst ausgewertet.

Multiplikation und Division erfolgen vor Addition und Subtraktion.

Die Auswertung erfolgt von links nach rechts.

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.

Syntaxfehler

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 bedeutet, dass Python den Befehl nicht versteht, da Sie ihn falsch eingegeben haben. Bei der Programmierung geht es nicht einfach darum, dem Computer Befehle zu erteilen; man muss auch schon genau wissen, wie man diese Befehle auf die richtige Weise gibt!

Machen Sie sich jedoch keine Sorgen über solche Fehler. Durch diese Art falscher Angaben können Sie den Computer nicht beschädigen. Geben Sie den Befehl einfach an der nächsten Eingabeaufforderung (>>>) korrekt in die Shell ein.

Werte in Variablen speichern

Wenn ein Ausdruck zu einem Wert ausgewertet wird, können Sie diesen Wert später nutzen, wenn Sie ihn in einer Variablen speichern. Eine solche Variable können Sie sich als eine Schachtel vorstellen, in der Sie den Wert ablegen.

Eine Zuweisungsanweisung speichert einen Wert in einer Variablen. Geben Sie dazu den Namen der Variablen ein, dann ein Gleichheitszeichen – den sogenannten Zuweisungsoperator – und schließlich den Wert, den Sie speichern wollen:

Abb. 1–3Variablen fungieren wie Schachteln, in denen Sie Werte aufbewahren können.

Wenn Sie drücken, scheint nichts zu passieren. In Python wissen Sie, dass ein Befehl erfolgreich ausgeführt wurde, wenn keine Fehlermeldung erscheint. Es wird einfach wieder die Eingabeaufforderung >>> angezeigt, sodass Sie den nächsten Befehl eingeben können.

Die Beispielvariablen in diesem Kapitel tragen nichtssagende Namen wie spam, eggs und bacon, doch für die Variablen in Ihren Programmen sollten Sie Namen verwenden, die die enthaltenen Daten beschreiben. Stellen Sie sich vor, Sie würden bei einem Umzug alle Kartons einfach mit Sachen beschriften. Sie würden nichts mehr wiederfinden!

Python erstellt die Variable, wenn sie zum ersten Mal in einer Zuweisungsanweisung verwendet wird. Um zu prüfen, ob sich ein Wert in der Variablen befindet, geben Sie den Variablennamen in die interaktive Shell ein:

Der Ausdruck spam wird zu dem Wert ausgewertet, der sich in der Variablen spam befindet, also 15.

Variablen können Sie auch in Ausdrücken verwenden. Geben Sie Folgendes in die interaktive Shell ein:

Hier haben Sie zunächst den Wert der Variablen spam auf 15 gesetzt, sodass die Eingabe spam + 5 dem Ausdruck 15 + 5 entspricht. Die Auswertung von spam + 5 läuft wie folgt ab:

Es ist nicht möglich, eine Variable schon vor der Zuweisungsanweisung zu verwenden, mit der sie erstellt wird. Sollten Sie das versuchen, so gibt Python die Fehlermeldung NameError aus, da eine Variable des angegebenen Namens noch nicht existiert. Der gleiche Fehler ergibt sich auch, wenn Sie den Variablennamen falsch schreiben:

Der Fehler tritt auf, da es nur eine Variable namens spam gibt, aber nicht spma.

Den Wert, der in einer Variablen gespeichert ist, können Sie mit einer weiteren Zuweisungsanweisung ändern. Probieren Sie das folgende Beispiel in der interaktiven Shell aus:

Abb. 1–4Der Wert15inspamwird durch den Wert3überschrieben.

Sie können den Wert in spam sogar dazu verwenden, spam selbst einen neuen Wert zuzuweisen:

In der ersten Anweisung dieses Beispiels speichern Sie den Wert 15 in spam. In der nächsten addieren Sie 5 zu dem Wert von spam und weisen den neuen Wert spam + 5, der 20 ergibt, der Variablen spam zu. Wenn Sie das dreimal tun, enthält spam schließlich den Wert 30.

Bis jetzt haben wir uns nur mit einer einzigen Variablen beschäftigt, doch Sie können in Ihren Programmen so viele Variablen verwenden, wie Sie benötigen. Als Beispiel wollen wir den beiden Variablen eggs und bacon unterschiedliche Werte zuweisen:

Die Variable bacon enthält jetzt den Wert 10, während sich in eggs der Wert 15 befindet. Jede Variable stellt eine eigene Schachtel mit einem eigenen Wert dar, wie Sie in Abbildung 1–5 sehen.

Abb. 1–5Unterschiedliche Werte in den Variablenbaconundeggs

Zusammenfassung

In diesem Kapitel haben Sie die Grundlagen zum Schreiben von Python-Programmbefehlen gelernt. Da Computer nicht denken können und nur bestimmte Befehle verstehen, müssen Sie Python genau sagen, was es tun soll.

Ausdrücke sind Werte (wie 2 oder 5), die durch Operatoren (wie + und -) verbunden sind. Python kann Ausdrücke auswerten, wobei sie auf einen einzigen Wert reduziert werden. Werte können Sie auch in Variablen speichern, sodass das Programm sich diese Werte merkt und später verwenden kann.

Es gibt noch mehr Operatoren und Werte in Python. Im nächsten Kapitel lernen Sie weitere Grundprinzipien kennen und schreiben Ihr erstes Programm. Dabei erfahren Sie, wie Sie mit Text in Ausdrücken umgehen. Python ist nicht auf Zahlen beschränkt – es kann weit mehr als ein Taschenrechner!

2

Programme schreiben

Sehen wir uns nun an, was Python alles mit Text anstellen kann. Praktisch alle Programme zeigen den Benutzern Text an, und die Benutzer geben über die Tastatur auch oft Text ein. In diesem Kapitel schreiben Sie Ihr erstes Programm, und dabei kommt beides vor. Sie lernen dabei, wie Sie Text in Variablen speichern können, wie Sie Texte kombinieren und wie Sie sie auf dem Bildschirm anzeigen. Das Programm, das Sie schreiben, zeigt die Begrüßung Hello world! an und fragt den Benutzer nach seinem Namen.

Themen in diesem Kapitel

StringsStringverkettungDatentypen (wie Strings oder Integer)Programme im Dateieditor schreibenProgramme in IDLE speichern und ausführenAusführungsflussKommentareDie Funktion print()Die Funktion input()Unterscheidung zwischen Groß- und Kleinschreibung

Stringwerte

Textwerte werden in Python als Strings bezeichnet. Sie können sie ähnlich verwenden wie Integer- und Fließkommawerte. Unter anderem können Sie Strings auch in Variablen speichern. Im Code steht am Anfang und am Ende eines Stringwerts jeweils ein einfaches Anführungszeichen. Geben Sie den folgenden Code in die interaktive Shell ein:

Die einfachen Anführungszeichen teilen Python mit, wo der String anfängt und wo er endet, aber sie gehören nicht zum eigentlichen Text des Stringwerts. Wenn Sie anschließend spam in die Shell eingeben, wird der Inhalt dieser Variablen angezeigt. Wie Sie bereits wissen, wertet Python zu dem Wert aus, der darin gespeichert ist, in diesem Fall also zu dem String 'hello':

Strings können beliebige Zeichen enthalten und beliebig lang sein, wie die folgenden Beispiele zeigen:

'hello'

'Hi there!'

'KITTENS'

'7 apples, 14 oranges, 3 lemons'

'Anything not pertaining to elephants is irrelephant.'

'A long time ago, in a galaxy far, far away...'

'O*&#wY%*&OCfsdYO*&gfC%YO*&%3yc8r2'

Stringverkettung

Ebenso wie Integer- und Fließkommawerte können Sie auch Stringwerte mit Operatoren zu Ausdrücken kombinieren. Wenn Sie zwei Strings mit dem Operator + verbinden, führen Sie eine sogenannte Stringverkettung durch. Geben Sie zur Veranschaulichung 'Hello' + 'World!' in die interaktive Shell ein:

>>> 'Hello' + 'World!'

'HelloWorld!'

Der Ausdruck wird zu einem einzigen Stringwert ausgewertet, nämlich 'HelloWorld!'. Der Ergebnisstring enthält kein Leerzeichen, da in keinem der beiden verketteten Strings ein Leerzeichen vorkam. Anders verhält es sich im folgenden Beispiel:

>>> 'Hello ' + 'World!'

'Hello World!'

Der Operator + wirkt sich auf Strings und Integerwerte unterschiedlich aus, da es sich dabei um verschiedene Datentypen handelt. Alle Werten haben einen Datentyp: der Wert 'Hello' den Datentyp String, der Wert 5 den Typ Integer. Anhand des Datentyps kann Python erkennen, was die Operatoren bei der Auswertung eines Ausdrucks tun sollen. So verkettet der Operator + Strings und addiert Integer- und Fließkommawerte.

Programme im Dateieditor von IDLE schreiben

Bis jetzt haben Sie immer nur einen Befehl nach dem anderen in die interaktive Shell von IDLE eingegeben. Um ein Programm zu schreiben, müssen Sie jedoch mehrere Befehle eingeben, die dann alle auf einen Rutsch ausgeführt werden. Das ist genau das, was Sie als Nächstes tun werden: Sie schreiben Ihr erstes Programm!

Neben dem Interpreter gibt es in IDLE noch den Dateieditor. Um ihn zu öffnen, klicken Sie oben in der interaktiven Shell auf das Menü File und wählen New File. Daraufhin erscheint ein leeres Fenster, in das Sie den Code Ihres Programms eingeben können (siehe Abb. 2–1).

Abb. 2–1Dateieditor (links) und interaktive Shell (rechts)

Die beiden Fenster sehen sich sehr ähnlich, allerdings wird in der interaktiven Shell die Eingabeaufforderung >>> angezeigt, im Dateieditor dagegen nicht.

Das Hello-World-Programm schreiben

Unter Programmierern herrscht die Tradition, dass das jeweils erste Programm den Text Hello world! auf dem Bildschirm ausgibt. Im Folgenden werden Sie nun Ihr Hello-World-Programm schreiben.

Die Zahlen, die am Anfang der Codezeilen stehen, dürfen Sie dabei nicht mit eingeben. Sie sind in diesem Buch nur abgedruckt, um auf einfache Weise auf einzelne Codezeilen verweisen zu können. In der unteren rechten Ecke des Dateieditors wird angezeigt, in welcher Codezeile sich der blinkende Cursor gerade befindet. In Abbildung 2–2 sehen Sie, dass er sich in Zeile 1 (senkrechte Position) und Spalte 0 (waagerechte Position) befindet.

Abb. 2–2In der unteren rechten Ecke des Dateieditors können Sie ablesen, in welcher Zeile sich der Cursor gerade befindet.

Geben Sie den folgenden Text in das neue Fenster des Dateieditors ein. Dies ist der Quellcode des Programms. Er enthält die Befehle, die Python befolgt, wenn Sie das Programm ausführen.

hello.py

IDLE stellt die verschiedenen Arten von Befehlen in unterschiedlichen Farben dar. Wenn Sie den Code fertig eingegeben haben, sieht das Fenster so aus wie in Abbildung 2–3.

Abb. 2–3Der Dateieditor nach der Eingabe des Codes

Vergewissern Sie sich, dass das IDLE-Fenster genau so aussieht.

Das Programm speichern

Nachdem Sie den Quellcode eingegeben haben, speichern Sie ihn, indem Sie auf File > Save As klicken oder + drücken. Abbildung 2–4 zeigt das Speichern-Dialogfeld, das daraufhin geöffnet wird. Geben Sie als Dateiname hello.py ein und klicken Sie auf Save.

Abb. 2–4Das Programm speichern

Speichern Sie Ihre Programme möglichst oft. Falls der Computer abstürzt oder Sie versehentlich IDLE beenden, verlieren Sie dann nicht so viel von Ihrer Arbeit.

Um das zuvor gespeicherte Programm zu laden, klicken Sie auf File > Open. Wählen Sie in dem daraufhin eingeblendeten Fenster die Datei hello.py aus und klicken Sie auf Open. Daraufhin wird das Programm hello.py im Dateieditor geöffnet.

Das Programm ausführen

Nun ist es an der Zeit, das Programm auszuführen. Klicken Sie dazu auf Run > Run Module oder drücken Sie im Dateieditor . Das Programm wird daraufhin in der interaktiven Shell ausgeführt.

Geben Sie Ihren Namen ein, wenn das Programm danach fragt. Diesen Vorgang sehen Sie in Abbildung 2–5.

Abb. 2–5Die interaktive Shellnachder Ausführung von hello.py

Wenn Sie Ihren Namen eingeben und die Eingabetasten drücken, begrüßt das Programm Sie namentlich! Herzlichen Glückwunsch! Sie haben gerade Ihr erstes Programm geschrieben und sind jetzt ein Computerprogrammierer. Drücken Sie erneut , um das Programm ein zweites Mal auszuführen, und geben Sie diesmal einen anderen Namen ein.

Wenn Sie eine Fehlermeldung erhalten, vergleichen Sie Ihren Code mit dem aus diesem Buch. Das können Sie ganz einfach mit dem Diff Tool erreichen, das Sie online auf https://www.nostarch.com/inventwithpython#diff finden. Kopieren Sie Ihren Code im Dateieditor, fügen Sie ihn auf der genannten Webseite ein und klicken Sie auf die Schaltfläche Compare. Das Tool zeigt jegliche Unterschiede zwischen Ihrem Code und dem im Buch an (siehe Abb. 2–6).

Sollten Sie eine NameError-Meldung wie die Folgende erhalten, dann haben Sie nicht Python 3 verwendet, sondern Python 2:

Um dieses Problem zu lösen, installieren Sie Python 3.4 und führen das Programm erneut aus (siehe den Abschnitt »Python herunterladen und installieren« in der Einleitung).

Abb. 2–6Das Diff Tool auf https://www.nostarch.com/inventwithpython#diff

So funktioniert das Hello-World-Programm

Jede Codezeile ist ein Befehl, den Python ausführt. Diese Befehle bilden das Programm, vergleichbar mit den einzelnen Schritten in einem Rezept. Python nimmt sich einen Befehl nach dem anderen vor, wobei es am Anfang des Programms beginnt und sich dann weiter vorarbeitet.

Im Folgenden sehen wir uns die einzelnen Codezeilen an, um herauszufinden, was sie jeweils bewirken. Dabei beginnen wir mit Zeile 1.

Kommentare

Die erste Zeile des Hello-World-Programms ist ein Kommentar:

1. # Dieses Programm sagt "Hello" und fragt nach dem Namen.

Jeglicher Text, der auf ein amerikanisches Nummernzeichen (#) folgt, wird als Kommentar aufgefasst. Das sind Bemerkungen des Programmierers darüber, was der Code bewirkt. Geschrieben werden sie nicht für Python, sondern für Personen, die den Code lesen und verstehen wollen. Bei der Ausführung eines Programms ignoriert Python solche Kommentare. Gewöhnlich stellen Programmierer einen Kommentar ganz an den Anfang des Codes, um den Zweck des Programms zu beschreiben. Der Kommentar in dem Hello-World-Programm erklärt, dass das Programm »Hello« sagt und den Benutzer nach dem Namen fragt.

Funktionen: Miniprogramme innerhalb von Programmen

Eine Funktion ist eine Art von Miniprogramm innerhalb eines Programms. Sie enthält mehrere Befehle, die Python ausführen soll. Das Gute an Funktionen ist, dass Sie nur wissen müssen, was sie tun, aber nicht, wie sie es tun. Im Lieferumfang von Python ist bereits eine Reihe von Funktionen enthalten, von denen wir in dem Hello-World-Programm print() und input() verwenden.

Ein Funktionsaufruf weist Python an, den Code der genannten Funktion auszuführen. Beispielsweise ruft das Hello-World-Programm die Funktion print() auf, die den zwischen den Klammern eingegebenen String auf dem Bildschirm ausgibt.

Die Funktion print()

Die Zeilen 2 und 3 des Hello-World-Programms enthalten Aufrufe von print():

2. print('Hello world!')

3. print('What is your name?')

Der Wert in den Klammern des Funktionsaufrufs wird als Argument bezeichnet. Das Argument des print()-Aufrufs in Zeile 2 ist also 'Hello world!', das des Aufrufs in Zeile 3 dagegen 'What is your name?'. Diese Argumente werden der Funktion übergeben.

Die Funktion input()

In Zeile 4 steht eine Zuweisungsanweisung, die den Variablennamen myName und den Funktionsaufruf input() enthält:

Beim Aufruf von input() wartet das Programm darauf, dass der Benutzer Text eingibt. Der Funktionsaufruf wird dann zu diesem Textstring ausgewertet. Funktionsaufrufe können überall dort in Ausdrücken verwendet werden, wo auch ein Wert stehen könnte.

Der Wert, zu dem der Funktionsaufruf ausgewertet wird, ist der sogenannte Rückgabewert. (Statt »der Wert, zu dem ein Funktionsaufruf ausgewertet wird« kann man auch »der Wert, den ein Funktionsaufruf zurückgibt« sagen). Der Rückgabewert von input() ist hier der vom Benutzer eingegebene String, nämlich der Name. Wenn der Benutzer Albert eingibt, wird der Funktionsaufruf input() zu dem String 'Albert' ausgewertet:

Dadurch wird der String 'Albert' in der Variablen myName gespeichert.

Ausdrücke in Funktionsaufrufen

Die letzte Zeile des Hello-World-Programms enthält einen weiteren Aufruf von print():

5. print('It is good to meet you, ' + myName)

Der Ausdruck 'It is good to meet you, ' + myName steht in den Klammern von print(). Da Argumente immer einzelne Werte sind, wertet Python zunächst diesen Ausdruck aus und übergibt dann den resultierenden Wert als Argument. Unter der Annahme, dass in myName der Wert 'Albert' gespeichert ist, läuft die Auswertung wie folgt ab:

Dadurch begrüßt das Programm den Benutzer mit Namen.

Das Ende des Programms

Nach der Ausführung der letzten Zeile endet das Programm. Die Ausführung wird beendet, und Python vergisst alle in den Variablen gespeicherten Werte, auch den String in myName. Wenn Sie das Programm erneut starten und einen anderen Namen eingeben, hält das Programm ihn für Ihren Namen:

Hello world!

What is your name?

Carolyn

It is good to meet you, Carolyn

Denken Sie immer daran, dass der Computer genau das tut, was Sie ihm befehlen. Computer befolgen stumpf jegliche Befehle, die Sie ihnen geben. Sie kümmern sich nicht darum, ob Sie Ihren richtigen Namen, den Namen einer anderen Person oder irgendetwas Albernes eingeben. Was auch immer Sie eingeben, der Computer behandelt es auf dieselbe Weise:

Hello world!

What is your name?

poop

It is good to meet you, poop

Variablennamen

Es lässt sich leichter nachvollziehen, wie Ihr Programm funktioniert, wenn Sie den Variablen beschreibende Namen geben. Wir hätten die Variable myName auch abrahamLincoln oder nAmE nennen können, ohne dass sich an der Ausführung durch Python irgendetwas geändert hätte, aber diese Namen sagen nichts darüber aus, was für Informationen in der Variablen gespeichert sind. Wie schon in Kapitel 1 erwähnt, wäre es alles andere als hilfreich, bei einem Umzug sämtliche Kartons mit Sachen zu beschriften. Bei den Beispielen zur interaktiven Shell haben wir Variablennamen wie spam, eggs und bacon verwendet, da die Namen in diesen Fällen keine Rolle spielen. Sämtliche Variablen in den Programmen in diesem Buch tragen jedoch beschreibende Namen, und so sollten Sie es in Ihren Programmen auch halten.

Bei Variablennamen wird zwischen Groß- und Kleinschreibung unterschieden, weshalb spam, SPAM, Spam und sPAM in Python vier verschiedene Variablen mit jeweils eigenen Werten sind. Es ist jedoch äußerst ungünstig, in einem Programm Variablen zu verwenden, deren Namen sich nur durch die Groß- und Kleinschreibung unterscheiden. Verwenden Sie stattdessen aussagekräftige Namen.

Variablennamen werden gewöhnlich in Kleinbuchstaben geschrieben. Wenn sie aus mehr als einem Wort bestehen, ist es sinnvoll, die Anfangsbuchstaben der einzelnen Wörter außer dem ersten groß zu schreiben. So lässt sich beispielsweise der Variablenname whatIHadForBreakfastThisMorning besser lesen als whatihadforbreakfastthismorning. Diese Form von Binnenmajuskeln wird auch als Camel-Case bezeichnet (da das Auf und Ab an Kamelhöcker erinnert) und macht den Code besser lesbar. Abgesehen davon bevorzugen Programmierer kürzere Variablennamen, etwa breakfast oder foodThisMorning statt whatIHadForBreakfastThisMorning, was den Code ebenfalls verständlicher macht. Dies sind sogenannte Konventionen – keine zwingenden, aber übliche Vorgehensweisen bei der Programmierung in Python.

Zusammenfassung

Mithilfe von Strings und Funktionen können Sie interaktive Programme schreiben, da Text das wichtigste Medium ist, über das Benutzer und Computer miteinander kommunizieren. Vom Benutzer eingegebenen Text rufen Sie mit der Funktion input() ab, und um Text auf dem Bildschirm anzuzeigen, verwenden Sie die Funktion print().

Strings sind einfach nur Werte eines neuen Datentyps. Alle Werte haben einen Datentyp, der unter anderem beeinflusst, wie der Operator + funktioniert.

Funktionen dienen dazu, komplizierte Befehle in Programmen auszuführen. Python wird mit vielen vorgefertigten Funktionen geliefert, die Sie in diesem Buch kennenlernen werden. Überall dort, wo in einem Ausdruck ein Wert stehen kann, lässt sich auch ein Funktionsaufruf verwenden.

Bis jetzt wurden bei der Ausführung die einzelnen Programmschritte einer nach dem anderen abgearbeitet. In Kapitel 3 erfahren Sie jedoch, wie Sie ein Programm noch auf andere Weise ausführen können als in einer Reihe vom Anfang bis zum Ende. Wenn Sie diese Technik beherrschen, sind Sie bereit, um Spiele zu entwickeln!

3

Zahlen raten

In diesem Kapitel schreiben Sie ein Zahlenratespiel (»Guess The Number«). Der Computer denkt sich eine Geheimzahl von 1 bis 20 aus und bittet den Benutzer, sie zu erraten. Nach jedem Versuch teilt der Computer dem Benutzer mit, ob die eingegebene Zahl zu hoch oder zu niedrig war. Der Benutzer gewinnt, wenn er die Zahl mit sechs Versuchen erraten kann.

Dieses Spiel ist zum Lernen sehr gut geeignet, da das Programm dafür sehr kurz ist, aber viele Programmierprinzipien abdeckt. So lernen Sie dabei, wie Sie Werte in einen anderen Datentyp umwandeln und wann Sie das tun müssen. Da es sich bei dem Programm um ein Spiel handelt, werden wir den Benutzer von nun an den Spieler nennen.

Ein Beispieldurchlauf des Zahlenratespiels

Das folgende Listing zeigt, was ein Spieler angezeigt bekommt, wenn er das Zahlenratespiel ausführt. Die Eingaben des Spielers sind dabei durch Fettdruck gekennzeichnet.

Hello! What is your name?

Albert

Well, Albert, I am thinking of a number between 1 and 20.

Take a guess.

10

Your guess is too high.

Take a guess.

2

Your guess is too low.

Take a guess.

4

Good job, Albert! You guessed my number in 3 guesses!

Der Quellcode für das Zahlenratespiel

Klicken Sie auf File > New Windows, um ein neues Dateieditorfenster zu öffnen. Geben Sie den folgenden Quellcode in das leere Fenster ein und speichern Sie ihn als guess.py. Führen Sie das Programm anschließend mit aus.

Achten Sie bei der Eingabe genau auf die Leerzeichen. Einige Zeilen müssen um vier oder acht Leerzeichen eingerückt werden.

Falls Sie eine Fehlermeldung erhalten, vergleichen Sie den eingegebenen Code mit dem Code aus dem Buch. Dazu können Sie das Diff Tool auf https://www.nostarch.com/inventwithpython#diff verwenden.

guess.py

Das Modul random importieren

Sehen wir uns zunächst die beiden ersten Zeilen des Programms an:

1. # Dies ist ein Zahlenratespiel.

2. import random

Die erste Zeile ist ein Kommentar, wie Sie ihn schon in Kapitel 2 kennengelernt haben. Wie Sie bereits wissen, ignoriert Python alles, was auf das Zeichen # folgt. Der Kommentar gibt lediglich an, wozu das Programm gut ist.

Bei der zweiten Zeile handelt es sich um eine import-Anweisung. Wie Sie schon gelernt haben, sind Anweisungen Befehle, die irgendeine Aktion durchführen, im Gegensatz zu Ausdrücken aber nicht zu einem Wert ausgewertet werden. Sie kennen bereits die Zuweisungsanweisung, die einen Wert in einer Variablen speichert.

Python wird mit vielen vorgefertigten Funktionen geliefert, von denen sich einige jedoch in separaten Programmen befinden, nämlich in sogenannten Modulen. Um diese Funktionen zu nutzen, müssen Sie das betreffende Modul mit einer import-Anweisung in Ihr Programm importieren.

Zeile 2 importiert das Modul random, damit das Programm die darin enthaltene Funktion randint() aufrufen kann. Diese Funktion erzeugt die Zufallszahl, die der Spieler raten soll.

Nach dem Import des Moduls erstellen Sie in Zeile 4 als Nächstes die neue Variable guessesTaken, sodass sie später in dem Programm verwendet werden kann:

Diese Variable enthält die Anzahl der Rateversuche, die der Spieler schon durchgeführt hat. Da der Spieler an dieser Stelle im Programm noch gar nichts geraten hat, speichern Sie zunächst den Integer 0 in dieser Variablen.

Die Zeilen 6 und 7 sind identisch mit den entsprechenden Zeilen aus dem Hello-World-Programm in Kapitel 2. Programmierer greifen oft auf Code aus anderen Programmen zurück, um sich selbst Arbeit zu ersparen.

Zeile 6 ruft die Funktion print() auf. Wie Sie bereits wissen, ist eine Funktion eine Art Miniprogramm innerhalb Ihres Programms. Wird diese Funktion aufgerufen, so wird dieses Miniprogramm ausgeführt. Der Code von print() zeigt das String-Argument, das Sie übergeben, auf dem Bildschirm an.

Zeile 7 ruft den vom Spieler eingegebenen Namen ab und speichert ihn in der Variablen myName