Python 3 - Einsteigen und Durchstarten

Heiko Kalista

Python 3 - Einsteigen und Durchstarten

2018

516 Seiten

Format: PDF

E-Book: €  25,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446456891

 

Inhalt

6

Vorwort

16

1 Grundlagen

20

1.1 Hältst Du das richtige Buch in den Händen?

20

1.2 Dieses Buch bricht mit einigen Konventionen!

21

1.3 Die Arbeit mit diesem Buch

22

1.4 Das Kapitel zu Minecraft

23

1.5 Das Begleitmaterial zum Buch

23

1.6 Anregungen? Kritik? Forum?

24

1.7 Die Geschichte von Python in 120 Wörtern

24

1.8 Was kann man mit Python machen (und was nicht)?

25

1.9 Interpreter vs. Compiler

26

1.10 Python 2.7 oder 3.7?

27

1.11 Die Entwicklungsumgebung PyCharm

28

1.11.1 Alternativen zu PyCharm

29

1.12 Python-Interpreter installieren

29

1.12.1 Python-Interpreter unter Windows installieren

30

1.12.2 Python-Interpreter unter macOS installieren

31

1.12.3 Python-Interpreter unter Linux installieren

31

1.12.4 PyCharm unter Windows installieren

32

1.12.5 PyCharm unter macOS installieren

32

1.12.6 PyCharm unter Linux installieren

33

1.12.7 PyCharm einrichten

34

1.13 Genug geredet, los gehts!

36

1.13.1 Das erste Programm eingeben

37

1.13.2 Ausführen des ersten Beispiels

39

1.13.3 Laden der Beispiele

39

1.13.4 Der Quelltext im Detail

41

1.13.5 Kommentare im Detail

42

1.14 PEP8 – um sie ewig zu binden

44

1.15 Python-Programme ohne Entwicklungsumgebung starten

46

1.15.1 Python-Programme unter Windows starten

46

1.15.2 Python-Programme unter Linux oder macOS starten

47

1.16 Python interaktiv

48

1.17 Aufgabenstellung

50

1.18 Kurz & knapp

50

2 Variablen

52

2.1 Was sind Variablen?

52

2.2 Statisch typisiert vs. dynamisch typisiert

53

2.3 Einige Details vorab – Variablen sind auch nur Namen

55

2.4 Richtlinien für Variablennamen

57

2.4.1 Von Kamelen, Schlangen und Pascal

57

2.4.2 Sinnvolle Variablennamen

58

2.5 Rechnen mit Variablen

59

2.5.1 Verkürzte Schreibweise bei Rechenoperationen

60

2.5.2 Gibt es noch weitere Datentypen?

61

2.5.3 Konvertierung von Datentypen

62

2.5.4 Besonderheiten bei der Konvertierung von Datentypen

63

2.6 Formatierte Ausgabe mit print()

64

2.7 Genauigkeit von Fließkommazahlen

66

2.7.1 Formatierte Ausgabe von Fließkommazahlen

67

2.8 Den ganzzahligen Rest einer Division bestimmen

68

2.9 Konstanten, Konventionen und Restriktionen

69

2.10 Fehlerquelltext

70

2.10.1 Was ist die Aufgabe des Programms?

71

2.10.2 Lösungsvorschlag

71

2.10.3 Die gemeinen Kleinigkeiten

73

2.11 Aufgabenstellung

74

2.11.1 Einige Tipps

74

2.11.2 Lösung zur Aufgabenstellung

75

2.12 Kurz & knapp

76

3 Schleifen und Bedingungen

78

3.1 Was sind Schleifen und Bedingungen?

78

3.2 Die if-Bedingung

79

3.2.1 Blöcke und Einrückungen

80

3.2.2 Arbeit sparen mit else

81

3.2.3 elif

83

3.3 Der Platzhalter pass

85

3.4 Blöcke im interaktiven Modus

86

3.5 Logische Operatoren

86

3.6 PyCharm – Korrekturvorschläge übernehmen

89

3.7 while-Schleifen

90

3.7.1 Eine Schleife mit break vorzeitig beenden

91

3.7.2 continue in while-Schleifen

93

3.7.3 while-else

94

3.8 for-Schleifen

95

3.8.1 Eine einfache Zählschleife

96

3.8.2 Ein Wort zu Schleifenvariablen

97

3.8.3 Die Funktion range() im Detail

98

3.8.4 break und continue in for-Schleifen

99

3.8.5 Sonderfall Unterstrich: die Wegwerfvariable

100

3.9 Ein kurzer Abstecher: Exceptions

101

3.10 Fehlerquelltext

102

3.10.1 Was ist die Aufgabe des Programms?

103

3.10.2 Lösung zum Fehlerquelltext

104

3.11 Aufgabenstellung

105

3.11.1 Einige Tipps

106

3.11.2 Lösungsvorschlag

107

3.12 Ein umfangreicheres Beispiel: Zahlenraten

108

3.12.1 Die Hauptschleife

111

3.12.2 Ein neues Spiel starten

111

3.12.3 Abfrage des Schwierigkeitsgrades und Beenden des Spiels

112

3.13 Kurz & knapp

112

4 Funktionen

116

4.1 Was sind Funktionen?

116

4.2 Eine einfache Funktion definieren

116

4.3 Parameter, Argumente und Rückgabewert

118

4.4 Weitere Möglichkeiten, Funktionen aufzurufen

120

4.5 Globale und lokale Variablen

122

4.5.1 Ein bisschen mehr Verwirrung, bitte!

124

4.5.2 Das Schlüsselwort global

125

4.5.3 Auch Parameter sind lokal

127

4.5.4 Ein Wort zu globalen Variablen

128

4.5.5 Von Schatten und Hauptprogrammen

128

4.6 Standardwerte für Parameter

132

4.7 Schlüsselwortparameter

133

4.8 Wann sollten Funktionen zum Einsatz kommen?

135

4.9 Aufgabenstellung

136

4.9.1 Lösung zur Aufgabenstellung

137

4.10 Vorgehensweise bei größeren Projekten

140

4.11 Rekursion

141

4.12 Fehlerquelltext

142

4.12.1 Was ist die Aufgabe des Programms?

143

4.12.2 Lösung zum Fehlerquelltext

144

4.13 Kurz & knapp

146

5 Klassen

150

5.1 Was ist Objektorientierung?

150

5.2 Eine einfache Klasse definieren

151

5.2.1 Aufbau einer Klasse

152

5.2.2 Erzeugen von Objekten

153

5.2.3 Verwenden der Objekte

154

5.3 Kontrollierter Zugriff auf Attribute: Properties

155

5.3.1 Getter

155

5.3.2 Setter

158

5.3.3 Wann sollten Attribute und wann Properties verwendet werden?

159

5.3.4 Nachträgliches Umstellen auf Properties

160

5.4 Dynamische Attribute

161

5.5 Klassenattribute

164

5.5.1 Stolpersteine bei Klassenattributen

166

5.6 Statische Methoden

168

5.7 Zwischenstand: Braucht man das wirklich?

170

5.8 Aufgabenstellung

171

5.8.1 Einige Tipps

172

5.8.2 Lösungsvorschlag

173

5.9 Das Gleiche ist nicht dasselbe

175

5.9.1 Für Fortgeschrittene: Parameterübergabe im Detail

178

5.10 None

180

5.11 Vererbung

182

5.11.1 Ein einfaches Beispiel

183

5.11.2 Überschreiben von Methoden

185

5.12 Wie das Smartphone erfunden wurde – oder: Mehrfachvererbung

190

5.13 Für Fortgeschrittene: Binden von Methoden

193

5.13.1 Ein Blick hinter die Kulissen

193

5.13.2 Klassen um eigene Funktionen erweitern

195

5.13.3 Statische Methoden und instanzbezogene Bindung

197

5.14 Überschreiben der Methode __str__()

201

5.15 Und wo ist der Fehlerquelltext?

202

5.16 Kurz & knapp

202

6 Container

208

6.1 Was sind Container?

208

6.1.1 Eine Anmerkung, bevor es losgeht

208

6.2 Listen

209

6.2.1 Listen erzeugen und auf Elemente zugreifen

209

6.2.2 Listen dynamisch erzeugen

210

6.2.3 Elemente löschen oder ersetzen

212

6.2.4 Aufgabenstellung

215

6.2.4.1 Einige Tipps

216

6.2.4.2 Lösung zur Aufgabenstellung

216

6.2.5 Sortieren von Listen

217

6.2.5.1 Eigene Sortierfunktionen

219

6.2.5.2 Eine weitere Möglichkeit der Sortierung: sorted

221

6.2.5.3 Für Fortgeschrittene: lambda – anonyme Funktionen

222

6.2.6 Listen verknüpfen

225

6.2.7 Nicht nur für Fortgeschrittene: tiefes und flaches Kopieren

226

6.3 Tupel

228

6.3.1 Unterschiede zu Listen

228

6.3.2 Vorsicht: Instanzen in Tupeln können geändert werden

230

6.3.3 Mehrere Rückgabewerte mit Tupeln

231

6.3.4 Für Fortgeschrittene: namedtuple

233

6.4 Strings

235

6.4.1 Für Fortgeschrittene: Darum sind Strings unveränderlich

236

6.4.2 Slicing

238

6.4.3 Arbeiten mit Strings

240

6.4.4 Strings verbinden

240

6.4.5 Zerlegen und wieder zusammensetzen: split und join

242

6.4.6 Strings „aufbereiten“

244

6.4.7 Ändern der Groß- und Kleinschreibung

246

6.4.8 Strings durchsuchen

247

6.4.9 Aufgabenstellung

249

6.4.9.1 Einige Tipps

250

6.4.9.2 Lösungsvorschlag

250

6.4.10 Ersetzungen durchführen

252

6.5 Dictionaries

254

6.5.1 Grundlagen von Dictionaries

254

6.5.2 Vorsicht beim Zugriff!

255

6.5.3 Dictionaries durchlaufen und verändern

257

6.5.4 Elemente aus einem Dictionary entfernen

259

6.6 Fehlerquelltext

261

6.6.1 Was ist die Aufgabe des Programms?

261

6.6.2 Lösung zum Fehlerquelltext

262

6.7 Sets und Frozensets

264

6.7.1 Einfache Sets/Frozensets erzeugen

264

6.7.2 Sets: Elemente hinzufügen und entfernen

266

6.7.3 Mengenoperationen

267

6.8 Kurz & knapp

271

7 Exceptions

280

7.1 Was sind Exceptions?

280

7.2 Fehler? Die passieren mir doch nicht!

280

7.3 Die Mechanik von Exceptions

282

7.4 Abfangen unterschiedlicher Exceptions

284

7.5 Alle Exceptions fangen

286

7.6 Eigene Exceptions

288

7.7 else und finally

291

7.8 Einige allgemeine Tipps

294

7.9 Kurz & knapp

298

8 Module und Pakete

302

8.1 Module

302

8.1.1 Grundlagen

303

8.1.2 Dokumentation von Modulen

305

8.1.3 Umbenennen eines Namensraums

307

8.1.4 Selektives Importieren

308

8.1.5 Namensräume haben ihren Sinn

309

8.1.6 Batteries included!

309

8.1.7 Reihenfolge beim Importieren

310

8.1.8 Eigene Module in mehreren Projekten nutzen

311

8.1.9 Tipps für das Schreiben von Modulen

311

8.1.10 Automatische Ausführung beim Import verhindern

313

8.2 Pakete

314

8.2.1 Importieren von Modulen aus Paketen

315

8.2.2 Reguläre Pakete

316

8.2.3 Namespace Packages

317

8.2.4 Unterscheidung der Paketarten

318

8.3 Kurz & knapp

319

9 Dateien und Dateisystem

322

9.1 Lesen und Schreiben von Dateien

322

9.1.1 Eine einfache Textdatei auslesen

323

9.1.2 Fehler beim Öffnen von Dateien

324

9.1.3 Eine Datei schrittweise auslesen

325

9.1.4 Zeilenweises Auslesen von Textdateien

327

9.1.5 Textdateien schreiben

328

9.1.6 Übersicht möglicher Modi der Funktion open()

330

9.1.7 Aufgabenstellung

331

9.2 Dateien und Dateisystem

331

9.2.1 Verzeichnisse

332

9.2.2 Pfade und Prüfung auf deren Existenz

333

9.2.3 Pfade und Plattformunabhängigkeit

335

9.2.4 Verzeichnisse und Dateien erzeugen und löschen

336

9.2.5 Verzeichnisstrukturen erzeugen und löschen

339

9.2.6 Umbenennen von Verzeichnissen und Dateien

341

9.2.7 Kopieren und Verschieben

343

9.3 Kurz & knapp

345

10 GUI-Programmierung mit tkinter

350

10.1 Warum gerade tkinter?

350

10.2 Die Layout-Manager

351

10.2.1 Absolute Positionierung

351

10.2.2 Der pack-Manager

352

10.2.3 Der grid-Manager

357

10.2.4 Welcher Manager soll es sein?

359

10.3 Flexible Fenstergröße

360

10.4 Konfiguration von Widgets

363

10.5 Steuerelemente im Detail

365

10.5.1 Buttons

365

10.5.2 Kontrollvariablen

367

10.5.3 Eingabefelder

368

10.5.4 Textboxen

369

10.5.5 Checkboxen

373

10.5.6 Radiobuttons

375

10.5.7 Aufgabenstellung

376

10.5.8 Lösungsvorschlag

377

10.5.9 Listboxen

378

10.5.10 Listbox mit Scrollbalken

381

10.6 Fehlerquelltext

382

10.6.1 Was ist die Aufgabe des Programms?

382

10.6.2 Lösung zum Fehlerquelltext

383

10.7 Dialogfenster

385

10.8 Menüs

388

10.8.1 Einfache Menüs

388

10.8.2 Untermenüs

389

10.9 Kurz & knapp

391

11 Debugging

396

11.1 Was ist ein Debugger?

397

11.2 Eine einfache Fehlersuche

397

11.2.1 Haltepunkte setzen und entfernen

398

11.2.2 Das Programm durchlaufen und Werte betrachten

399

11.2.3 Geht es auch ohne Haltepunkte?

402

11.2.4 Interaktive Fehlersuche mit der Python-Konsole

403

11.3 Debuggen von Funktionen und Methoden

405

11.3.1 In Funktionen springen

406

11.3.2 Abschnitte überspringen und Funktionen verlassen

407

11.3.3 Clever springen

408

11.4 Watches

409

11.5 Haltepunkte im Detail

411

11.5.1 Ein Beispiel zum Experimentieren

411

11.5.2 Verwalten von Haltepunkten

412

11.5.3 Unterbrechen oder nicht?

416

11.5.4 Bedingte Haltepunkte

416

11.5.5 Protokollierung

417

11.5.6 Temporäre Haltepunkte

418

11.5.7 Verkettete Haltepunkte

419

11.5.8 Haltepunkte für Exceptions

419

11.5.9 Kombination der Optionen

420

11.6 Einsatz in der Praxis

421

12 Versionsverwaltung mit Git

422

12.1 Der vermeintlich leichte Weg

422

12.2 Wie funktionieren Versionskontrollsysteme?

423

12.2.1 Verallgemeinerte Arbeitsweise

423

12.2.2 Zentrale und verteilte Versionskontrolle

424

12.3 Was ist Git?

424

12.4 Interessiert mich nicht, ich arbeite alleine!

426

12.5 Vorbereitungen

426

12.5.1 Git unter Windows installieren

426

12.5.2 Git unter macOS installieren

427

12.5.3 Git unter Linux installieren

428

12.5.4 GitHub

428

12.6 Los geht’s – Git lokal verwenden

429

12.6.1 Ein bestehendes Projekt unter Versionskontrolle stellen

429

12.6.2 Dateien hinzufügen

431

12.6.3 Commit/Einchecken

432

12.6.4 Änderungen vornehmen und überprüfen

433

12.6.5 Änderungen rückgängig machen

435

12.6.6 Betrachten der Historie

436

12.6.7 Zu älteren Versionen zurückkehren – Möglichkeit 1

438

12.6.8 Dateien ignorieren

439

12.7 Zusammenarbeit über ein Remote Repository

440

12.7.1 Projekt auf GitHub veröffentlichen

441

12.7.2 Ein Repository klonen

441

12.7.3 Änderungen pushen

443

12.7.4 Pull

443

12.7.5 Wer hat’s erfunden?

444

12.7.6 Automatisches Merging

444

12.7.7 Mergen und Konflikte beheben

445

12.8 Branching

449

12.8.1 Um was geht es?

449

12.8.2 Einen Branch erzeugen und damit arbeiten

450

12.8.3 Zwischen Branches wechseln

452

12.8.4 Branches mergen

452

12.8.5 Branches pushen

454

12.8.6 Fetch

454

12.8.7 Zu älteren Versionen zurückkehren – Möglichkeit 2

455

12.9 Weitere nützliche Features

455

12.9.1 Stashing – Änderungen temporär speichern

456

12.9.2 Commits korrigieren

458

12.9.3 Tagging

458

12.10 Noch ein paar Tipps

459

12.10.1 Zwei einfache Branching-Modelle

459

12.10.2 Atomare Commits

460

12.10.3 Test-Repository griffbereit halten

461

12.10.4 Andere Git-Clients

461

12.11 Kurz & knapp

462

13 Minecraft auf dem Raspberry Pi

466

13.1 Um was geht es in diesem Kapitel?

466

13.1.1 Der Raspberry Pi – ein kleines Kraftpaket

466

13.1.2 Minecraft Pi

467

13.1.3 Was wird benötigt?

468

13.2 Der Sprung ins kalte Wasser

469

13.3 Die Entwicklungsumgebungen

469

13.4 Den Raspberry Pi einrichten

470

13.4.1 Erstellen der SD-Karte

470

13.4.2 Einstellen des Tastaturlayouts

471

13.4.3 Minecraft starten

471

13.4.4 Die Steuerung

471

13.5 Der erste Testlauf

473

13.5.1 Arbeiten mit IDLE

473

13.5.2 Arbeiten mit Thonny

475

13.6 Das Begleitmaterial

476

13.7 Die Minecraft Python API

476

13.7.1 Quellen und weitere Informationen:

477

13.7.2 Eine Übersicht der Minecraft API

477

13.7.3 Die Klasse Minecraft

477

13.7.4 Die Klasse CmdCamera

480

13.7.5 Die Klasse CmdPlayer

481

13.7.6 Die Klasse CmdEntity

481

13.7.7 Die Klasse Block

482

13.7.7.1 Eine Übersicht der wichtigsten Blöcke

482

13.7.8 Noch einmal alles zusammen

483

13.8 Beispiele zu Schleifen und Bedingungen

485

13.8.1 Blocktypen ausprobieren

485

13.8.2 Spielfigur automatisch durch die Welt bewegen

487

13.8.3 Eine Treppe bauen

488

13.8.4 Eine Pyramide bauen

489

13.9 Beispiele zu Funktionen

491

13.9.1 Swimmingpools bauen

491

13.9.2 Moderne Kunst?

493

13.10 Beispiele zu Klassen

496

13.10.1 Blöcke regnen lassen

496

13.10.2 Blinklichter

499

13.11 Beispiele zu Containern

502

13.11.1 Lichterkette

502

13.11.2 Mengenoperationen

504

13.12 Ein Beispiel zu Modulen und Paketen

506

13.13 exit() – wie geht es weiter?

509

Index

510

 

© 2009-2018 ciando GmbH