Erhalten Sie Zugang zu diesem und mehr als 300000 Büchern ab EUR 5,99 monatlich.
Wenn Sie jemals Stunden damit verbracht haben, Dateien umzubenennen oder Hunderte von Tabelleneinträgen zu aktualisieren, dann wissen Sie, wie stumpfsinnig manche Tätigkeiten sein können. Wie wäre es, den Computer dazu zu bringen, diese Arbeiten zu übernehmen?
In diesem Buch lernen Sie, wie Sie mit Python Aufgaben in Sekundenschnelle erledigen können, die sonst viel Zeit in Anspruch nehmen würden. Programmiererfahrung brauchen Sie dazu nicht: Wenn Sie einmal die Grundlagen gemeistert haben, werden Sie Python-Programme schreiben, die automatisch alle möglichen praktischen Aufgaben für Sie abarbeiten:
- eine oder eine Vielzahl von Dateien nach Texten durchsuchen
- Dateien und Ordner erzeugen, aktualisieren, verschieben und umbenennen
- das Web durchsuchen und Inhalte herunterladen
- Excel-Dateien aktualisieren und formatieren
- PDF-Dateien teilen, zusammenfügen, mit Wasserzeichen versehen und verschlüsseln
- Erinnerungsmails und Textnachrichten verschicken
- Online-Formulare ausfüllen
Schritt-für-Schritt-Anleitungen führen Sie durch jedes Programm und Übungsaufgaben am Ende jedes Kapitels fordern Sie dazu auf, die Programme zu verbessern und Ihre Fähigkeiten auf ähnliche Problemstellungen zu richten.
Verschwenden Sie nicht Ihre Zeit mit Aufgaben, die auch ein gut dressierter Affe erledigen könnte. Bringen Sie Ihren Computer dazu, die langweilige Arbeit zu machen!
"The best part of programming is the triumph of seeing the machine do something useful. (This book) frames all of programming as these small triumphs; it makes the boring fun."
Hilary Mason
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 835
Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:
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
Praktische Programmierlösungen für Einsteiger
2., aktualisierte und erweiterte Auflage
Al Sweigart
Lektorat: Dr. Michael Barabas
Lektoratsassitenz: Anja Weimer
Fachgutachter/in: Ari Lacenski und Philip James
Übersetzung & Satz: G&U Language & Publishing Services GmbH, www.gundu.com
Copy-Editing: Ursula Zimpfer, Herrenberg
Herstellung: Stefanie Weidner
Umschlaggestaltung: Helmut Kraus, www.exclam.de
nach der Originalvorlage von No Starch Press
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-753-1
PDF 978-3-96088-956-4
ePub 978-3-96088-957-1
mobi 978-3-96088-958-8
2., aktualisierte und erweiterte Auflage 2020
Copyright © 2020 dpunkt.verlag GmbH
Wieblinger Weg 17
69123 Heidelberg
Copyright © 2020 by Al Sweigart. Title of English-language original: Automate the Boring Stuff with Python, 2th Edition: Practical Programming for Total Beginners, ISBN 978-1-59327-992-9, published by No Starch Press. German-language edition copyright © 2020 by dpunkt.verlag. All rights reserved.
Hinweis:
Dieses Buch wurde auf PEFC-zertifiziertem Papier aus nachhaltiger Waldwirtschaft gedruckt. Der Umwelt zuliebe verzichten wir zusätzlich auf die Einschweißfolie.
Schreiben Sie uns:
Falls Sie Anregungen, Wünsche und Kommentare haben, lassen Sie es uns wissen: [email protected].
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 noch Übersetzer 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
Der Fachgutachter
Danksagung
Einleitung
Für wen ist dieses Buch gedacht?
Programmierstil
Was ist Programmierung?
Was ist Python?
Programmierer müssen nicht viel Mathe können
Sie sind nie zu alt, um programmieren zu lernen
Programmierung ist kreativ
Der Aufbau dieses Buchs
Python herunterladen und installieren
Mu herunterladen und installieren
Mu starten
IDLE starten
Die interaktive Shell
Drittanbietermodule installieren
Hilfe finden
Sinnvolle Fragen stellen
Zusammenfassung
Teil 1Grundlagen der Python-Programmierung
1Grundlagen von Python
Ausdrücke in die interaktive Shell eingeben
Die Datentypen für ganze Zahlen, Fließkommazahlen und Strings
Stringverkettung und -wiederholung
Werte in Variablen speichern
Zuweisungsanweisungen
Variablennamen
Ihr erstes Programm
Analyse des Programms
Kommentare
Die Funktion print()
Die Funktion input()
Den Benutzernamen ausgeben
Die Funktion len()
Die Funktionen str(), int() und float()
Zusammenfassung
Wiederholungsfragen
2Flusssteuerung
Boolesche Werte
Vergleichsoperatoren
Boolesche Operatoren
Binäre boolesche Operatoren
Der Operator not
Kombinierte Verwendung von booleschen und Vergleichsoperatoren
Elemente zur Flusssteuerung
Bedingungen
Codeblöcke
Programmausführung
Flusssteuerungsanweisungen
If-Anweisungen
Else-Anweisungen
Elif-Anweisungen
While-Schleifen
Break-Anweisungen
Continue-Anweisungen
For-Schleifen und die Funktion range()
Module importieren
From-import-Anweisungen
Programme mit sys.exit() vorzeitig beenden
Ein kurzes Programm: Zahlen raten
Ein kurzes Programm: Stein, Schere, Papier
Zusammenfassung
Wiederholungsfragen
3Funktionen
Def-Anweisungen mit Parametern
Terminologie
Rückgabewerte und die Anweisung return
Der Wert None
Schlüsselwortargumente und print()
Der Aufrufstack
Lokaler und globaler Gültigkeitsbereich
Lokale Variablen können im globalen Gültigkeitsbereich nicht verwendet werden
Lokale Gültigkeitsbereiche können keine Variablen aus anderen lokalen Gültigkeitsbereichen verwenden
Globale Variablen können von einem lokalen Gültigkeitsbereich aus gelesen werden
Lokale und globale Variablen mit demselben Namen
Die Anweisung global
Ausnahmebehandlung
Ein kurzes Programm: Zickzackmuster
Zusammenfassung
Wiederholungsfragen
Übungsprojekte
Die Collatz-Folge
Eingabevalidierung
4Listen
Der Datentyp für Listen
Einzelne Elemente einer Liste mithilfe des Index abrufen
Negative Indizes
Teillisten mithilfe von Slices abrufen
Die Länge einer Liste mit len() abrufen
Werte in einer Liste mithilfe des Index ändern
Listenverkettung und -wiederholung
Elemente mit del aus einer Liste entfernen
Listen verwenden
Listen in for-Schleifen
Die Operatoren in und not in
Der Trick mit der Mehrfachzuweisung
Die Funktion enumerate() für Listen
Die Funktionen random.choice() und random.shuffle() für Listen
Erweiterte Zuweisungsoperatoren
Methoden
Elemente in einer Liste mit der Methode index() finden
Elemente mit den Methoden append() und insert() zu Listen hinzufügen
Elemente mit remove() aus Listen entfernen
Elemente in einer Liste mit sort() sortieren
Reihenfolge der Listeneinträge mit reverse() umkehren
Beispielprogramm: Magic 8 Ball mithilfe einer Liste
Sequenzielle Datentypen
Veränderbare und unveränderbare Datentypen
Der Datentyp für Tupel
Typen mit den Funktionen list() und tuple() umwandeln
Verweise
Identität und die Funktion id()
Verweise übergeben
Die Funktionen copy() und deepcopy() des Moduls copy
Ein kurzes Programm: Conways Spiel des Lebens
Zusammenfassung
Wiederholungsfragen
Übungsprojekte
Kommacode
Münzwurffolgen
Zeichenbildraster
5Dictionaries und Datenstrukturen
Der Datentyp für Dictionaries
Dictionaries und Listen im Vergleich
Die Methoden keys(), values() und items()
Das Vorhandensein eines Schlüssels oder Wertes im Dictionary ermitteln
Die Methode get()
Die Methode setdefault()
Saubere Ausgabe
Datenstrukturen zur Modellierung realer Objekte
Ein Tic-Tac-Toe-Brett
Verschachtelte Dictionaries und Listen
Zusammenfassung
Wiederholungsfragen
Übungsprojekte
Validierer für Schach-Dictionary
Inventar für ein Fantasyspiel
Eine Funktion zum Hinzufügen von Listeninhalten zum Inventar-Dictionary
6Stringbearbeitung
Umgang mit Strings
Stringliterale
Strings indizieren und Slices entnehmen
Die Operatoren in und not in für Strings
Strings in andere Strings einfügen
Nützliche Stringmethoden
Die Stringmethoden upper(), lower(), isupper() und islower()
Die isX-Stringmethoden
Die Stringmethoden startswith() und endswith()
Die Methoden join() und split()
Strings mit der Methode partition() aufteilen
Text mit rjust(), ljust() und center() ausrichten
Weißraum mit strip(), rstrip() und lstrip() entfernen
Die Funktionen ord() und chr() für numerische Zeichenwerte
Strings mit dem Modul pyperclip kopieren und einfügen
Projekt: Automatisierte Nachrichten mithilfe einer Mehrfach-Zwischenablage
Schritt 1: Programmdesign und Datenstrukturen
Schritt 2: Befehlszeilenargumente verarbeiten
Schritt 3: Die richtige Antwort kopieren
Projekt: Aufzählungspunkte zu einem Wiki-Markup hinzufügen
Schritt 1: Text von und zur Zwischenablage übertragen
Schritt 2: Textzeilen trennen und Sternchen hinzufügen
Schritt 3: Die veränderten Zeilen zusammenfügen
Ein kurzes Programm: Pig Latin
Zusammenfassung
Wiederholungsfragen
Übungsprojekt
Tabellenausgabe
Bots für Zombie Dice
Teil 2Aufgaben automatisieren
7Mustervergleich mit regulären Ausdrücken
Textmuster ohne reguläre Ausdrücke finden
Textmuster mithilfe regulärer Ausdrücke finden
Regex-Objekte erstellen
Vergleiche mit einem Regex-Objekt
Zusammenfassung: Mustervergleich mit regulären Ausdrücken
Weitere Möglichkeiten für den Mustervergleich mithilfe regulärer Ausdrücke
Gruppierung durch Klammern
Mithilfe der Pipe nach Übereinstimmungen mit mehreren Gruppen suchen
Optionale Übereinstimmung mit dem Fragezeichen
Mit dem Sternchen nach null oder mehr Übereinstimmungen suchen
Mit dem Pluszeichen nach einer oder mehr Übereinstimmungen suchen
Mit geschweiften Klammern nach einer genauen Zahl von Wiederholungen suchen
Gieriger und nicht gieriger Mustervergleich
Die Methode findall()
Zeichenklassen
Eigene Zeichenklassen bilden
Zirkumflex und Dollarzeichen
Das Jokerzeichen
Beliebige Übereinstimmungen mit Punkt-Stern finden
Zeilenumbrüche mit dem Punktsymbol finden
Übersicht über Regex-Symbole
Übereinstimmungen ohne Berücksichtigung der Groß- und Kleinschreibung
Strings mit der Methode sub() ersetzen
Umgang mit komplizierten regulären Ausdrücken
Die Variablen re.IGNORECASE, re.DOTALL und re.VERBOSE kombinieren
Projekt: Extraktionsprogramm für Telefonnummern und E-Mail-Adressen
Schritt 1: Einen regulären Ausdruck für Telefonnummern erstellen
Schritt 2: Einen regulären Ausdruck für E-Mail-Adressen erstellen
Schritt 3: Alle Überstimmungen im Inhalt der Zwischenablage finden
Schritt 4: Die gefundenen Übereinstimmungen zu einem String kombinieren
Das Programm ausführen
Ideen für ähnliche Programme
Zusammenfassung
Wiederholungsfragen
Übungsprojekte
Datumserkennung
Passwortstärke ermitteln
Regex-Version von strip()
8Eingabevalidierung
Das Modul PyInputPlus
Die Schlüsselwortargumente min, max, greaterThan und lessThan
Das Schlüsselwortargument blank
Die Schlüsselwortargumente limit, timeout und default
Die Schlüsselwortargumente allowRegexes und blockRegexes
Eine eigene Validierungsfunktion an inputCustom() übergeben
Projekt: Einen Trottel stundenlang beschäftigen
Projekt: Multiplikationstest
Zusammenfassung
Wiederholungsfragen
Übungsprojekte
Sandwichzubereiter
Ein eigenes Programm für den Multiplikationstest
9Dateien lesen und schreiben
Dateien und Dateipfade
Backslash unter Windows und Schrägstrich unter macOS und Linux
Pfade mit dem Operator / zusammenfügen
Das aktuelle Arbeitsverzeichnis
Das Benutzerverzeichnis
Absolute und relative Pfade
Neue Ordner mit os.makedirs() erstellen
Absolute und relative Pfade verwenden
Die Komponenten eines Dateipfads abrufen
Dateigrößen und Ordnerinhalte ermitteln
Eine Dateiliste mit Glob-Mustern bearbeiten
Die Gültigkeit von Pfaden prüfen
Dateien lesen und schreiben
Dateien mit der Funktion open() öffnen
Die Inhalte einer Datei lesen
Dateien schreiben
Variablen mit dem Modul shelve speichern
Variablen mit der Funktion pprint.pformat() speichern
Projekt: Zufallsgenerator für Tests
Schritt 1: Die Daten für den Test in einem Dictionary speichern
Schritt 2: Die Fragebogendatei erstellen und die Fragen mischen
Schritt 3: Die Auswahl der möglichen Antworten zusammenstellen
Schritt 4: Den Inhalt der Dateien für die Frage- und Lösungsbogen schreiben
Projekt: Aktualisierbare Mehrfach-Zwischenablage
Schritt 1: Kommentare und Vorbereitungen für die Shelf-Daten
Schritt 2: Den Inhalt der Zwischenablage unter einem Schlüsselwort speichern
Schritt 3: Schlüsselwörter auflisten und Inhalte laden
Zusammenfassung
Wiederholungsfragen
Übungsprojekte
Erweiterte Mehrfach-Zwischenablage
Lückentextspiel
Regex-Suche
10Dateien verwalten
Das Modul shutil
Dateien und Ordner kopieren
Dateien und Ordner verschieben und umbenennen
Dateien und Ordner unwiederbringlich löschen
Sicheres Löschen mit dem Modul send2trash
Einen Verzeichnisbaum durchlaufen
Dateien mit dem Modul zipfile komprimieren
ZIP-Dateien lesen
ZIP-Dateien entpacken
ZIP-Dateien erstellen und Inhalte hinzufügen
Projekt: Amerikanische Datumsangaben in Dateinamen in europäische Datumsangaben ändern
Projekt: Amerikanische Datumsangaben in Dateinamen in …
Schritt 1: Einen regulären Ausdruck für amerikanische Datumsangaben definieren
Schritt 2: Die einzelnen Teile der Datumsangabe in den Dateinamen ermitteln
Schritt 3: Die neuen Dateinamen zusammenstellen und die Dateien umbenennen
Vorschläge für ähnliche Programme
Projekt: Einen Ordner in einer ZIP-Datei sichern
Schritt 1: Den Namen der ZIP-Datei bestimmen
Schritt 2: Die neue ZIP-Datei erstellen
Schritt 3: Den Verzeichnisbaum durchlaufen und Inhalte zur ZIP-Datei hinzufügen
Vorschläge für ähnliche Programme
Zusammenfassung
Wiederholungsfragen
Übungsprojekte
Selektives Kopieren
Nicht mehr benötigte Dateien löschen
Lücken entfernen
11Debugging
Ausnahmen auslösen
Traceback als String abrufen
Zusicherungen (Assertions)
Zusicherungen in einem Ampelsimulator
Protokollierung
Das Modul logging verwenden
Kein Debugging mit print()
Protokolliergrade
Die Protokollierung deaktivieren
Protokollierung in eine Datei
Der Debugger von Mu
Continue
Step In
Step Over
Step Out
Stop
Debugging eines Additionsprogramms
Haltepunkte
Zusammenfassung
Wiederholungsfragen
Übungsprojekt
Münzwurfprogramm
12Web Scraping
Projekt: mapIt.py mit dem Modul webbrowser
Schritt 1: Die URL herausfinden
Schritt 2: Befehlszeilenargumente verarbeiten
Schritt 3: Den Inhalt der Zwischenablage verarbeiten und den Browser starten
Vorschläge für ähnliche Programme
Dateien mithilfe des Moduls requests aus dem Web herunterladen
Eine Webseite mit der Funktion requests.get() herunterladen
Auf Fehler prüfen
Heruntergeladene Dateien auf der Festplatte speichern
HTML
Quellen zu HTML
Ein kleiner Auffrischungskurs
Den HTML-Quellcode einer Webseite einsehen
Die Entwicklertools des Browsers öffnen
HTML-Elemente mithilfe der Entwicklertools finden
HTML mit dem Modul bs4 durchsuchen
Ein BeautifulSoup-Objekt aus dem HTML-Text erstellen
Elemente mit der Methode select() finden
Daten aus den Attributen eines Elements abrufen
Projekt: Alle Suchergebnisse öffnen
Schritt 1: Die Befehlszeilenargumente abrufen und die Suchergebnisseite anfordern
Schritt 2: Alle Ergebnisse finden
Schritt 3: Browsertabs für jedes Suchergebnis öffnen
Vorschläge für ähnliche Programme
Projekt: Alle XKCD-Comics herunterladen
Schritt 1: Den Aufbau des Programms festlegen
Schritt 2: Die Webseite herunterladen
Schritt 3: Das Bild des Comics finden und herunterladen
Schritt 4: Das Bild speichern und den vorherigen Comic suchen
Vorschläge für ähnliche Programme
Den Browser mit dem Modul selenium steuern
Einen seleniumgesteuerten Browser starten
Elemente auf der Seite finden
Auf Elemente klicken
Formulare ausfüllen und absenden
Die Betätigung von Sondertasten simulieren
Auf Browserschaltflächen klicken
Weitere Informationen über Selenium
Zusammenfassung
Wiederholungsfragen
Übungsprojekte
E-Mail-Programm für die Befehlszeile
Downloadprogramm für Fotowebsites
2048
Linküberprüfung
13Excel-Arbeitsblätter
Excel-Dokumente
Das Modul openpyxl installieren
Excel-Dokumente lesen
Excel-Dokumente mit OpenPyXL öffnen
Arbeitsblätter aus der Arbeitsmappe abrufen
Zellen eines Arbeitsblatts abrufen
Umrechnen zwischen Kennbuchstaben und Nummern
Zeilen und Spalten eines Arbeitsblatts abrufen
Arbeitsmappen, Arbeitsblätter und Zellen
Projekt: Daten in einer Arbeitsmappe lesen
Schritt 1: Die Daten der Arbeitsmappe lesen
Schritt 2: Die Datenstruktur füllen
Schritt 3: Die Ergebnisse in eine Datei schreiben
Vorschläge für ähnliche Programme
Excel-Dokumente schreiben
Excel-Dokumente erstellen und speichern
Arbeitsblätter erstellen und entfernen
Werte in Zellen schreiben
Projekt: Ein Arbeitsblatt aktualisieren
Schritt 1: Eine Datenstruktur mit den neuen Informationen einrichten
Schritt 2: Alle Zeilen prüfen und die falschen Preise korrigieren
Vorschläge für ähnliche Programme
Die Schrift in den Zellen gestalten
Font-Objekte
Formeln
Das Erscheinungsbild von Zeilen und Spalten festlegen
Zeilenhöhe und Spaltenbreite festlegen
Zellen verbinden und aufteilen
Bereiche fixieren
Diagramme
Zusammenfassung
Wiederholungsfragen
Übungsprojekte
Multiplikationstabellen erstellen
Leere Zeilen einfügen
Zellen transponieren
Textdateien in Arbeitsblätter umwandeln
Arbeitsblätter in Textdateien umwandeln
14Google Tabellen
EZSheets installieren und einrichten
Anmeldeinformationen und Tokendateien beziehen
Die Datei mit den Anmeldeinformationen widerrufen
Spreadsheet-Objekte
Tabellen erstellen, hochladen und auflisten
Tabellenattribute
Tabellen hoch- und herunterladen
Tabellen löschen
Sheet-Objekte
Daten lesen und schreiben
Tabellenblätter erstellen und löschen
Tabellenblätter kopieren
Grenzwerte für Google Tabellen
Zusammenfassung
Wiederholungsfragen
Übungsprojekte
Daten von Google Formulare herunterladen
Tabellen in andere Formate umwandeln
Fehler in einer Tabelle finden
15PDF- und Word-Dokumente
PDF-Dokumente
Text aus PDFs entnehmen
PDFs entschlüsseln
PDFs erstellen
Projekt: Ausgewählte Seiten aus mehreren PDFs kombinieren
Schritt 1: Alle PDF-Dateien finden
Schritt 2: Die einzelnen PDFs öffnen
Schritt 3: Die einzelnen Seiten hinzufügen
Schritt 4: Die Ergebnisse speichern
Vorschläge für ähnliche Programme
Word-Dokumente
Word-Dokumente lesen
Den kompletten Text einer .docx-Datei abrufen
Absätze und Run-Objekte formatieren
Word-Dokumente mit anderen als den Standardformaten erstellen
Run-Attribute
Word-Dokumente schreiben
Überschriften hinzufügen
Zeilenwechsel und Seitenumbrüche hinzufügen
Bilder einfügen
PDF-Dateien aus Word-Dokumenten erstellen
Zusammenfassung
Wiederholungsfragen
Übungsprojekte
PDF-Paranoia
Personalisierte Einladungen als Word-Dokument
Brute-Force-Passwortknacker für PDFs
16CSV-Dateien und JSON-Daten
Das Modul csv
Reader-Objekte
Daten in einer for-Schleife aus reader-Objekten lesen
Writer-Objekte
Die Schlüsselwortargumente delimiter und lineterminator
DictReader- und DictWriter-Objekte
Projekt: Kopfzeilen aus CSV-Dateien entfernen
Schritt 1: Alle CSV-Dateien durchlaufen
Schritt 2: Die CSV-Datei lesen
Schritt 3: Die CSV-Datei ohne die erste Zeile schreiben
Vorschläge für ähnliche Programme
JSON und APIs
Das Modul json
JSON-Daten mit der Funktion loads() laden
JSON-Daten mit der Funktion dumps() schreiben
Projekt: Die aktuellen Wetterdaten abrufen
Schritt 1: Den Standort aus dem Befehlszeilenargument entnehmen
Schritt 2: Die JSON-Daten herunterladen
Schritt 3: JSON-Daten laden und die Wettervorhersage ausgeben
Vorschläge für ähnliche Programme
Zusammenfassung
Wiederholungsfragen
Übungsprojekt
Excel-in-CSV-Konverter
17Zeit und Aufgabenplanung
Das Modul time
Die Funktion time.time()
Die Funktion time.sleep()
Zahlen runden
Projekt: Superstoppuhr
Schritt 1: Das Programm auf die Zeitmessung vorbereiten
Schritt 2: Intervalldauern messen und anzeigen
Vorschläge für ähnliche Programme
Das Modul datetime
Der Datentyp timedelta
Anhalten bis zu einem bestimmten Zeitpunkt
datetime-Objekte in Strings umwandeln
Strings in datetime-Objekte umwandeln
Die Zeitfunktionen von Python im Überblick
Multithreading
Argumente an die Zielfunktion eines Threads übergeben
Probleme der Nebenläufigkeit
Projekt: Multithread-Version des XKCD-Downloadprogramms
Schritt 1: Eine Funktion für den Download verwenden
Schritt 2: Threads erstellen und starten
Schritt 3: Auf das Ende aller Threads warten
Andere Programme von Python aus starten
Befehlszeilenargumente an Popen() übergeben
Taskplaner, launchd und cron
Websites mit Python aufrufen
Andere Python-Skripte ausführen
Dateien in ihren Standardanwendungen öffnen
Projekt: Ein einfaches Countdown-Programm
Schritt 1: Der Countdown
Schritt 2: Die Klangdatei abspielen
Vorschläge für ähnliche Programme
Zusammenfassung
Wiederholungsfragen
Übungsprojekte
Elegantere Stoppuhr
Webcomic-Downloadprogramm mit Zeitplanung
18E-Mails und Textnachrichten
E-Mails mit der Gmail-API senden und empfangen
Die Gmail-API aktivieren
E-Mails von einem Gmail-Konto senden
E-Mails in einem Gmail-Konto lesen
E-Mails in einem Gmail-Konto suchen
Anhänge von einem Gmail-Konto herunterladen
SMTP
E-Mails senden
Verbindung mit einem SMTP-Server aufnehmen
Die »Hallo«-Nachricht an den SMTP-Server senden
Die TLS-Verschlüsselung einleiten
Am SMTP-Server anmelden
Eine E-Mail senden
Die Verbindung zum SMTP-Server trennen
IMAP
E-Mails mit IMAP abrufen und löschen
Verbindung mit einem IMAP-Server aufnehmen
Am IMAP-Server anmelden
Nach E-Mails suchen
E-Mails abrufen und als gelesen markieren
E-Mail-Adressen aus einer Rohnachricht gewinnen
Den Rumpf aus einer Rohnachricht gewinnen
E-Mails löschen
Die Verbindung zum IMAP-Server trennen
Projekt: E-Mails über ausstehende Mitgliedsbeiträge senden
Schritt 1: Die Excel-Datei öffnen
Schritt 2: Alle säumigen Mitglieder finden
Schritt 3: Personalisierte E-Mail-Mahnungen senden
Textnachrichten über SMS-E-Mail-Gateways senden
Textnachrichten mit Twilio senden
Ein Twilio-Konto einrichten
Textnachrichten senden
Projekt: Das Modul »Just Text Me«
Zusammenfassung
Wiederholungsfragen
Übungsprojekte
Zufällige Zuweisung von Arbeiten
Regenschirmhinweis
Automatischer Entregistrierer
Den Computer per E-Mail steuern
19Bildbearbeitung
Grundlagen zur Bilddarstellung auf Computern
Farben und RGBA-Werte
Koordinaten und Rechtecktupel
Bildbearbeitung mit Pillow
Mit dem Datentyp Image arbeiten
Bilder beschneiden
Bilder kopieren und in andere Bilder einfügen
Die Bildgröße ändern
Bilder drehen und spiegeln
Einzelne Pixel ändern
Projekt: Ein Logo hinzufügen
Schritt 1: Das Logobild öffnen
Schritt 2: Alle Dateien durchlaufen und die Bilder öffnen
Schritt 3: Die Bildgröße ändern
Schritt 4: Logo hinzufügen und Änderungen speichern
Vorschläge für ähnliche Programme
Bilder zeichnen
Formen zeichnen
Text zeichnen
Zusammenfassung
Wiederholungsfragen
Übungsprojekte
Das Logoprogramm erweitern und verbessern
Fotoordner auf der Festplatte finden
Personalisierte Tischkarten
20GUI-Automatisierung
Das Modul PyAutoGUI installieren
Zugriff auf macOS erlauben
Kleine Probleme beheben
Die PyAutoGUI-Notfallsicherung
Beenden durch Abmelden
Den Mauszeiger steuern
Den Mauszeiger bewegen
Die Position des Mauszeigers abrufen
Mausinteraktionen
Klicken
Ziehen
Scrollen
Mausbewegungen planen
Auf dem Bildschirm arbeiten
Einen Screenshot aufnehmen
Einen Screenshot analysieren
Bilderkennung
Informationen über das Fenster abrufen
Das aktive Fenster abrufen
Andere Möglichkeiten zum Abrufen von Fenstern
Fenster bearbeiten
Die Tastatur steuern
Strings von der Tastatur senden
Tastennamen
Tasten drücken und loslassen
Tastenkombinationen
GUI-Automatisierungsskripte einrichten
Übersicht über die Funktionen von PyAutoGUI
Projekt: Formulare automatisch ausfüllen
Schritt 1: Den Ablauf herausfinden
Schritt 2: Die Koordinaten ermitteln
Schritt 3: Daten eingeben
Schritt 4: Auswahllisten und Optionsschalter
Schritt 5: Das Formular absenden und warten
Dialogfelder anzeigen
Zusammenfassung
Wiederholungsfragen
Übungsprojekte
Beschäftigung vortäuschen
Textfelder über Zwischenablage lesen
Instant-Messenger-Bot
Tutorial für einen Spiele-Bot
Anhang
A Drittanbietermodule installieren
Pip
Drittanbietermodule installieren
Module für Mu installieren
B Programme ausführen
Programme im Terminalfenster ausführen
Python-Programme unter Windows ausführen
Python-Programme unter macOS ausführen
Programme unter Ubuntu Linux ausführen
Python-Programme mit ausgeschalteten Zusicherungen ausführen
C Antworten auf die Wiederholungsfragen
Kapitel 1
Kapitel 2
Kapitel 3
Kapitel 4
Kapitel 5
Kapitel 6
Kapitel 7
Kapitel 8
Kapitel 9
Kapitel 10
Kapitel 11
Kapitel 12
Kapitel 13
Kapitel 14
Kapitel 15
Kapitel 16
Kapitel 17
Kapitel 18
Kapitel 19
Kapitel 20
Stichwortverzeichnis
Für meinen Neffen Jack
Al Sweigart ist Softwareentwickler und Fachbuchautor. Seine Lieblingsprogrammiersprache ist Python und er hat bereits mehrere Open-Source-Module dafür entwickelt. Seine anderen Bücher sind auf seiner Website http://www.inventwithpython.com/ unter einer Creative-Commons-Lizenz kostenlos erhältlich. Seine Katze wiegt 11 Pfund.
Philip James arbeitet schon mehr als zehn Jahre mit Python und tritt in der Python-Community häufig als Redner zu unterschiedlichen Themen von Unix-Grundlagen bis zu Social Media auf Open-Source-Basis auf. Er ist einer der Hauptbeteiligten am BeeWare-Projekt und lebt mit seiner Partnerin Nic und deren Katze River in der Bay Area von San Francisco.
Es ist irreführend, dass nur mein Name auf dem Umschlag steht, denn um dieses Buch schreiben zu können, habe ich die Hilfe vieler Menschen benötigt. Ich möchte meinem Herausgeber Bill Pollock, meinen Lektoren Laurel Chun, Leslie Shen, Greg Poulos, Jennifer Griffith-Delgado und Frances Saux sowie allen anderen Mitarbeitern bei No Starch Press für ihre unschätzbare Hilfe danken. Ein Dank geht auch an meine Fachgutachter Ari Lacenski und Philip James für ihre hervorragenden Vorschläge und Verbesserungen sowie für ihre Unterstützung.
Vielen Dank auch allen Mitgliedern der Python Software Foundation für ihre großartige Arbeit. Die Python-Community ist die beste, die ich in der IT-Branche gefunden habe.
Schließlich möchte ich noch meiner Familie, meinen Freunden und der Clique bei Shotwell’s danken, weil sie es mir nicht übel genommen haben, dass ich während des Schreibens an diesem Buch dauernd beschäftigt war. Dankeschön!
»Du hast gerade in zwei Stunden das erledigt, woran wir drei sonst zwei Tage lang sitzen!«
Mein Mitbewohner in den frühen 2000er-Jahren arbeitete bei einem Elektronikhändler, bei dem gelegentlich eine Tabelle mit Tausenden von Produktpreisen anderer Läden auftauchte. Drei Mitarbeiter druckten diese Tabelle dann auf einem dicken Stapel Papier aus und teilten diesen unter sich auf. Für jeden Produktpreis schlugen sie den Preis ihres eigenen Arbeitgebers nach und notierten alle Produkte, die die Konkurrenz billiger anbot. Damit waren sie gewöhnlich zwei Tage beschäftigt.
»Wenn ich die Originaldatei bekomme, kann ich ein Programm schreiben, das die Arbeit für euch erledigt«, schlug mein Mitbewohner ihnen vor, als er sah, wie sie inmitten eines Riesenhaufens Papier auf dem Fußboden hockten.
Nach ein paar Stunden hatte er ein kurzes Programm geschrieben, das die Preisliste der Konkurrenten aus der Datei auslas, die Produkte in der Datenbank des Elektronikladens nachschlug und einen Vermerk machte, wenn die Konkurrenz billiger war. Er war immer noch ein Anfänger in Sachen Programmierung und hatte den Großteil dieser Stunden damit zugebracht, die Dokumentation in einem Programmierbuch nachzuschlagen. Die Ausführung des fertigen Programms dauerte nur wenige Sekunden. An dem Tag gönnten sich mein Mitbewohner und seine Kollegen eine besonders lange Mittagspause.
Das zeigt das Potenzial der Programmierung. Ein Computer ist wie ein Schweizer Messer und lässt sich für zahllose Aufgaben einrichten. Viele Leute bringen Stunden mit Klicken und Tippen zu, um monotone Aufgaben auszuführen, ohne zu ahnen, dass der Computer diese Arbeit in wenigen Sekunden erledigen könnte, wenn er nur die richtigen Anweisungen dafür bekäme.
Software bildet die Grundlage vieler unserer Geräte, die wir für die Arbeit und in der Freizeit verwenden: Fast jeder nutzt soziale Netzwerke zur Kommunikation, die Telefone vieler Menschen enthalten Computer mit Internetzugriff und für die meisten Büroarbeiten ist Computerarbeit erforderlich. Daher ist die Nachfrage nach Personen, die programmieren können, sprunghaft angestiegen. Unzählige Bücher, interaktive Webtutorials und Schulungen für Entwickler werden mit dem Versprechen beworben, ehrgeizige Anfänger zu Softwareingenieuren zu machen, die sechsstellige Gehälter verlangen können.
Dieses Buch ist jedoch nicht für diese Leute gedacht, sondern für alle anderen.
Mit diesem Buch allein können Sie nicht zu einem professionellen Softwareentwickler werden, genauso wenig, wie ein paar Gitarrenstunden Sie zu einem Rockstar machen. Wenn Sie aber Büroangestellter, Administrator oder Akademiker sind oder auch nur zur Arbeit oder zum Vergnügen einen Computer benutzen, so werden Sie hier die Grundlagen der Programmierung kennenlernen, um einfache Aufgaben wie die folgenden zu automatisieren:
Tausende von Dateien verschieben und umbenennen und in Ordner sortieren
Onlineformulare ausfüllen, ohne Text eingeben zu müssen
Dateien von einer Website herunterladen oder Texte von dort kopieren, sobald dort neues Material bereitgestellt wird
Sich von Ihrem Computer per SMS benachrichtigen lassen
Excel-Arbeitsblätter bearbeiten und formatieren
Nach neuen E-Mails suchen und vorformulierte Antworten senden
Diese Aufgaben sind einfach, aber zeitraubend, und sie sind häufig so trivial oder so spezifisch, dass es keine fertige Software dafür gibt. Mit einigen Programmierkenntnissen können Sie Ihren Computer diese Aufgaben für Sie erledigen lassen.
Dieses Buch ist nicht als Nachschlagewerk gedacht, sondern als Anleitung für Anfänger. Der Programmierstil verstößt manchmal gegen die üblichen Richtlinien (beispielsweise werden in einigen Programmen globale Variablen verwendet), aber das ist ein Kompromiss, um das Lernen zu erleichtern. In diesem Buch lernen Sie, Wegwerfcode für einmalige Aufgaben zu schreiben, weshalb wir nicht viel Mühe auf Stil und Eleganz verwenden. Auch anspruchsvolle Programmierkonzepte wie Objektorientierung, Listenabstraktion und Generatoren werden hier aufgrund ihrer Kompliziertheit nicht behandelt. Altgediente Programmierer werden den Code sicherlich ändern wollen, um die Effizienz zu erhöhen, aber in diesem Buch geht es darum, Programme mit so wenig Aufwand wie möglich zum Laufen zu bekommen.
In Filmen und Fernsehserien werden Programmierer oft als Leute dargestellt, die rasend schnell auf einer Tastatur herumtippen, um kryptische Folgen von Nullen und Einsen auf leuchtenden Bildschirmen erscheinen zu lassen. In Wirklichkeit ist moderne Programmierung aber nicht so geheimnisvoll. Programmierung ist einfach die Eingabe von Anweisungen, die der Computer ausführen soll. Diese Anweisungen können dazu dienen, mit Zahlen zu rechnen, Text zu ändern, Informationen in Dateien nachzuschlagen oder über das Internet mit anderen Computern zu kommunizieren.
Alle Programme bestehen aus einfachen Anweisungen, die die Grundbausteine darstellen. Einige der gebräuchlichsten dieser Anweisungen besagen, auf Deutsch übersetzt, Folgendes:
»Mach dies; dann mach das.«
»Wenn diese Bedingung wahr ist, dann führe diese Aktion aus; anderenfalls jene Aktion.«
»Mach dies genau 27 Mal.«
»Mach dies, solange die Bedingung wahr ist.«
Diese Bausteine können Sie kombinieren, um auch kompliziertere Entscheidungen zu treffen. Im folgenden Beispiel sehen Sie die Programmieranweisungen – den Quellcode – für ein einfaches Programm in der Programmiersprache Python. Die Software Python führt die einzelnen Codezeilen vom Anfang bis zum Ende aus. (Manche Zeilen werden nur ausgeführt, wenn (if) eine Bedingung wahr ist (true); anderenfalls (else) führt Python eine andere Zeile aus.)
Auch wenn Sie noch nicht viel von Programmierung verstehen, können Sie vielleicht schon erraten, was der vorstehende Code bewirkt. Als Erstes wird die Datei SecretPasswordFile.txt geöffnet () und das geheime Passwort gelesen (). Danach wird der Benutzer aufgefordert, ein Passwort einzugeben (über die Tastatur) (). Die beiden Passwörter werden verglichen (), und wenn sie identisch sind, gibt das Programm auf dem Bildschirm die Meldung Access granted (»Zugriff gewährt«) aus (). Danach prüft das Programm, ob das Passwort 12345 lautet (). Wenn ja, gibt es dem Benutzer den dezenten Hinweis, dass dies nicht gerade die ideale Wahl für ein Passwort ist (). Sind die Passwörter nicht identisch, gibt das Programm Access denied (»Zugriff verweigert«) aus ().
Der Begriff Python bezeichnet die Programmiersprache Python (deren Syntaxregeln festlegen, was als gültiger Python-Code angesehen wird) und den Python-Interpreter, eine Software, die den (in der Sprache Python geschriebenen) Code liest und dessen Anweisungen ausführt. Den Python-Interpreter können Sie kostenlos von https://python.org/ herunterladen, wobei es Versionen für Linux, macOS und Windows gibt.
Der Name Python ist übrigens nicht von der Schlange abgeleitet, sondern von der surrealistischen britischen Komikergruppe Monty Python. Python-Programmierer werden liebevoll »Pythonistas« genannt, und Tutorials sowie die Dokumentation zu Python stecken voller Anspielungen sowohl auf Monty Python als auch auf Schlangen.
Wenn mir jemand erklärt, warum er Angst davor hat, Programmieren zu lernen, geht es meistens darum, dass er glaubt, dazu müsste man sehr gut in Mathematik sein. In Wirklichkeit ist zur Programmierung meistens nicht mehr Mathe als einfache Grundrechenarten erforderlich. Programmieren lässt sich in diesem Punkt sogar mit dem Lösen von Sudoku-Rätseln vergleichen. Dazu müssen Sie in jede Zeile, jede Spalte und jedes innere 3x3-Quadrat des 9x9-Feldes die Zahlen von 1 bis 9 einfügen, wobei bereits einige Zahlen vorgegeben sind. Aus diesen Zahlen leiten Sie die Lösung durch Deduktion und Logik ab. In der Aufgabe in Abb. E–1 kommt beispielsweise eine 5 sowohl in der ersten als auch in der zweiten Zeile vor. Daher muss die 5 im oberen rechten Quadrat in der dritten Zeile stehen. Da sich auch schon eine 5 in der letzten Spalte befindet, kann die 5 in der dritten Zeile nicht rechts neben der 6 stehen. Damit bleibt nur der Platz links von der 6 übrig. Jede Zeile, jede Spalte und jedes Quadrat, das Sie lösen, gibt Ihnen weitere Hinweise für den Rest des Rätsels. Mit jeder Gruppe der Zahlen von 1 bis 9, die Sie vervollständigen, nähern Sie sich der Lösung des gesamten Rätsels.
Abb. 2–1Ein Sudoku-Rätsel (links) und die Lösung (rechts). Beim Sudoku geht es zwar um Zahlen, doch ist dafür keine Mathematik erforderlich. (Bilder (c) Wikimedia Commons)
Nur weil es bei Sudoku um Zahlen geht, heißt das noch lange nicht, dass man gut in Mathe sein muss, um die Lösung auszuknobeln. Das Gleiche gilt auch fürs Programmieren. Wie beim Sudoku müssen Sie auch beim Programmieren das Problem in einzelne Schritte zerlegen. Beim Debuggen von Programmen (also beim Aufspüren und Beheben von Fehlern) müssen Sie geduldig beobachten, was das Programm macht, und die Ursachen von Fehlern herausfinden. Wie bei allen anderen Fähigkeiten werden Sie auch beim Programmieren umso besser, je mehr Erfahrung Sie haben.
Den zweithäufigsten Einwand, den ich im Zusammenhang mit Programmierung zu hören bekomme, ist, dass jemand glaubt, zu alt zu sein, um diese Tätigkeit noch zu erlernen. Im Internet musste ich schon viele Kommentare von Leuten lesen, die meinten, sie seien mit sage und schreibe 23 Jahren (!) schon zu alt dafür. Das ist ganz sicher nicht »zu alt«, um programmieren zu lernen. Viele Menschen eignen sich in viel höherem Alter neue Fähigkeiten an.
Man muss nicht als Kind anfangen, um ein fähiger Programmierer zu werden. Die Vorstellung von Programmierern als Wunderkindern ist aber nicht totzukriegen. Leider habe ich selbst zu der Legende beigetragen, weil ich erzählt habe, dass ich bereits in der Grundschule mit dem Programmieren angefangen habe.
Programmieren lässt sich heutzutage leichter lernen als in den 90ern, denn heute gibt es viel mehr Bücher, bessere Suchmaschinen und viel mehr Websites, auf denen Sie Antworten auf Ihre Fragen bekommen. Vor allem aber sind die Programmiersprachen selbst viel benutzerfreundlicher geworden. Daher können Sie sich heute alles, was ich zwischen Grundschule und High-School-Abschluss über Programmierung gelernt habe, an ungefähr einem Dutzend Wochenenden erarbeiten. Mein Vorsprung war in Wirklichkeit gar kein so großer Vorsprung.
Programmieren lernt man nur durch Übung. Wir werden nicht als Programmierer geboren, und noch nicht programmieren zu können, heißt nicht, dass man niemals ein Experte auf diesem Gebiet werden könnte.
Programmieren ist eine ebenso kreative Tätigkeit wie Malen, Schreiben, Stricken und das Bauen mit Lego-Steinen. Genauso wie das Malen auf einer leeren Leinwand ist die Entwicklung von Software zwar gewissen Einschränkungen unterworfen, bietet aber auch unendlich viele Möglichkeiten.
Der Unterschied zwischen Programmierung und anderen kreativen Tätigkeiten besteht darin, dass Sie beim Programmieren das gesamte erforderliche Rohmaterial in Ihrem Computer haben. Sie müssen keine Leinwand, keine Farbe, keinen Film, kein Garn, keine Lego-Steine oder elektronischen Bauteile kaufen. Ein zehn Jahre alter Computer ist mehr als leistungsfähig genug, um damit Programme zu schreiben. Ein fertiges Programm können Sie beliebig oft kopieren. Während ein gestrickter Pullover immer nur von einer einzigen Person auf einmal getragen werden kann, lässt sich ein nützliches Programm auf einfache Weise der ganzen Welt online zur Verfügung stellen.
Der erste Teil dieses Buchs behandelt die Grundlagen der Python-Programmierung. Im zweiten Teil sehen wir uns dann verschiedene Aufgaben an, die Sie automatisieren können. In jedem Kapitel des zweiten Teils gibt es Übungsprojekte. Die folgende Übersicht zeigt, was Sie in den einzelnen Kapiteln erwartet:
Teil I: Grundlagen der Python-Programmierung
Kapitel 1: Grundlagen von PythonHier werden Ausdrücke vorgestellt, die grundlegendste Art von Python-Anweisungen. Außerdem erfahren Sie, wie Sie die interaktive Shell von Python verwenden, um Code auszuprobieren.
Kapitel 2: FlusssteuerungIn diesem Kapitel erfahren Sie, wie Ihre Programme entscheiden können, welcher Code in einer bestimmten Situation ausgeführt werden soll. Dadurch können Sie auf unterschiedliche Bedingungen reagieren.
Kapitel 3: FunktionenDieses Kapitel zeigt Ihnen, wie Sie eigene Funktionen definieren, um Ihren Code in besser handhabbare Abschnitte zu gliedern.
Kapitel 4: ListenHier erhalten Sie eine Einführung in den Datentyp der Listen und erfahren, wie Sie damit Daten gliedern können.
Kapitel 5: Dictionaries und DatenstrukturenDieses Kapitel gibt eine Einführung in den Datentyp der Dictionaries und führt noch weitere Möglichkeiten auf, um Daten zu gliedern.
Kapitel 6: StringbearbeitungHier geht es um die Arbeit mit Textdaten (die in Python Strings genannt werden).
Teil II: Aufgaben automatisieren
Kapitel 7: Mustervergleich mit regulären AusdrückenHier erfahren Sie, wie Sie mit regulären Ausdrücken nach Textmustern suchen können.
Kapitel 8: EingabevalidierungHier wird erläutert, wie Ihr Programm die von Benutzern eingegebenen Informationen überprüfen kann, damit die Daten nicht in einer Form vorliegen, die im weiteren Verlauf des Programms Fehler verursachen kann.
Kapitel 9: Dateien lesen und schreibenDieses Kapitel erklärt, wie Ihre Programme den Inhalt von Textdateien lesen und selbst Informationen in Dateien auf der Festplatte speichern können.
Kapitel 10: Dateien verwaltenSie erfahren hier, wie Python große Mengen von Dateien kopieren, verschieben, umbenennen und löschen kann, und zwar viel schneller, als ein menschlicher Bearbeiter es tun könnte. Außerdem werden das Komprimieren und Entpacken von Dateien erklärt.
Kapitel 11: DebuggingHier werden die verschiedenen Instrumente vorgestellt, die in Python zur Verfügung stehen, um Fehler (Bugs) zu finden und zu beheben.
Kapitel 12: Web ScrapingDieses Kapitel zeigt Ihnen, wie Sie Programme schreiben, die automatisch Webseiten herunterladen und nach Informationen durchforsten. Dieser Vorgang wird Web Scraping genannt.
Kapitel 13: Excel-ArbeitsblätterHier geht es darum, wie Sie Excel-Arbeitsblätter programmgesteuert bearbeiten, sodass Sie das nicht manuell tun müssen. Das ist besonders praktisch, wenn die Anzahl der Dokumente, die Sie analysieren müssen, in die Hunderte oder gar in die Tausende geht.
Kapitel 14: Google TabellenIn diesem Kapitel erfahren Sie, wie Sie mit Python Daten in der häufig genutzten Online-Tabellenkalkulationsanwendung Google Tabellen lesen und bearbeiten.
Kapitel 15: PDF- und Word-DokumenteDieses Kapitel behandelt das programmgesteuerte Lesen von Word- und PDF-Dokumenten.
Kapitel 16: CSV-Dateien und JSON-DatenDie Erklärung der programmgesteuerten Bearbeitung von Dokumenten wird hier für CSV- und JSON-Dateien fortgesetzt.
Kapitel 17: Zeit und AufgabenplanungHier lernen Sie, wie Python Uhrzeiten und Kalenderdaten handhabt und wie Sie dafür sorgen, dass Ihr Computer Aufgaben zu einem bestimmten Zeitpunkt ausführt. Außerdem erfahren Sie, wie Sie von Python-Programmen aus andere Programme starten.
Kapitel 18: E-Mails und TextnachrichtenIn diesem Kapitel geht es darum, Programme zu schreiben, die an Ihrer Stelle E-Mails und Textnachrichten senden.
Kapitel 19: BildbearbeitungDieses Kapitel erklärt, wie Sie Bilder, z. B. JPEG- oder PNG-Dateien, in Ihren Programmen bearbeiten können.
Kapitel 20: GUI-AutomatisierungHier lernen Sie, wie Sie mit einem Programm die Maus und die Tastatur steuern, um Mausklicks und Tastenbetätigungen zu simulieren.
Anhang A: Drittanbietermodule installierenDieser Anhang zeigt, wie Sie Python mithilfe von nützlichen Modulen erweitern können.
Anhang B:Programme ausführenHier erfahren Sie, wie Sie Python-Programme unter Windows, macOS und Linux außerhalb des Codeeditors ausführen.
Anhang C:Antworten auf die WiederholungsfragenHier finden Sie die Lösungen sowie einige zusätzliche Erklärungen zu den Wiederholungsfragen, die am Ende jedes Kapitels stehen.
Python können Sie kostenlos für Windows, macOS und Linux von https://python.org/downloads/ herunterladen. Wenn Sie die neueste Version verwenden, die auf der Website angeboten wird, sollten alle Programme in diesem Buch funktionieren.
Achten Sie darauf, eine Version von Python 3 herunterzuladen (z. B. 3.8.0). Die Programme in diesem Buch sind für Python 3 geschrieben. Auf Python 2 funktionieren sie unter Umständen gar nicht oder zumindest nicht korrekt.
Auf der Downloadseite finden Sie Installer für die verschiedenen Betriebssysteme und dabei wiederum jeweils für 64- und für 32-Bit-Computer. Als Erstes müssen Sie daher herausfinden, welchen Installer Sie brauchen. Wenn Sie Ihren Computer 2007 oder später gekauft haben, handelt es sich sehr wahrscheinlich um ein 64-Bit-System, anderenfalls eher um einen 32-Bit-Rechner. Genau herausfinden können Sie das wie folgt:
Auf Windows wählen Sie
Start > Systemsteuerung > System
und schauen nach, ob als Systemtyp 64 Bit oder 32 Bit angegeben wird.
Auf macOS wählen Sie im Apfelmenü
Über diesen Mac > Weitere Informationen > Systembericht > Hardware
. Schauen Sie sich in der
Hardware-Übersicht
den Eintrag unter
Prozessortyp
an. Wenn dort
Intel Core Solo
oder
Intel Core Duo
steht, haben Sie einen 32-Bit-Rechner. Bei allen anderen Einträgen (auch
Intel Core 2 Duo
) handelt es sich um einen 64-Bit-Computer.
Auf Ubuntu Linux geben Sie in einem Terminalfenster den Befehl
uname -m
ein. Die Antwort
i686
bedeutet, dass Sie einen 32-Bit-Computer haben. Bei einem 64-Bit-Rechner lautet die Antwort
x86_64
.
Laden Sie auf Windows den Python-Installer (mit der Endung .msi) herunter und doppelklicken Sie darauf. Befolgen Sie die Anweisungen, die auf dem Bildschirm angezeigt werden. Der Vorgang läuft wie folgt ab:
Wählen Sie
Install for All Users
und dann
Weiter
.
Akzeptieren Sie in den nächsten Fenstern jeweils die Standardoptionen, indem Sie auf
Weiter
klicken.
Auf macOS laden Sie die passende .dmg-Datei für Ihre Version des Betriebssystems herunter und doppelklicken darauf. Befolgen Sie die Anweisungen, die auf dem Bildschirm angezeigt werden. Der Vorgang läuft wie folgt ab:
Wenn das DMG-Paket in einem neuen Fenster geöffnet wird, doppelklicken Sie auf die Datei
Python.mpkg
. Möglicherweise müssen Sie Ihr Administratorpasswort eingeben.
Akzeptieren Sie in den nächsten Fenstern jeweils die Standardoptionen, indem Sie auf
Weiter
klicken, und klicken Sie auf
Agree
, um die Lizenzbedingungen zu akzeptieren.
Klicken Sie im letzten Fenster auf
Install
.
Auf Ubuntu können Sie Python wie folgt im Terminal installieren:
Öffnen Sie ein Terminalfenster.
Geben Sie
sudo apt-get install python3
ein.
Geben Sie
sudo apt-get install idle3
ein.
Geben Sie
sudo apt-get install python3-pip
ein.
Der Python-Interpreter ist die Software, die Ihre Python-Programme ausführt. Die Eingabe der Programme dagegen erfolgt im Editor Mu ähnlich wie in einer Textverarbeitung. Mu können Sie von https://codewith.mu/ herunterladen.
Auf Windows und macOS laden Sie die Installerdatei für Ihr Betriebssystem herunter und führen sie aus, indem Sie darauf doppelklicken. Auf macOS wird dadurch ein Fenster geöffnet, in dem Sie das Mu-Symbol in den Ordner Programm ziehen müssen, um mit der Installation fortzufahren. Auf Ubuntu installieren Sie Mu als Python-Paket. Klicken Sie dazu auf der Downloadseite im Abschnitt Python Package auf die Schaltfläche Instructions.
Um Mu zu starten, gehen Sie wie folgt vor:
Auf Windows 7 und höher klicken Sie auf das Startsymbol in der linken unteren Ecke, geben
Mu
in das Suchfeld ein und wählen die Anwendung aus.
Auf macOS öffnen Sie ein Finder-Fenster, klicken auf
Programme
und dann auf
mu-editor
.
Auf Ubuntu wählen Sie
Anwendungen > Zubehör > Terminal
und geben dann
python3 -m mu
ein.
Wenn Sie Mu zum ersten Mal ausführen, erscheint das Fenster Select Mode mit den Optionen Adafruit CircuitPython, BBC micro:bit, Pygame Zero und Python 3. Wählen Sie hier Python 3. Bei Bedarf können Sie den Modus später wieder ändern. Klicken Sie dazu auf die Schaltfläche Mode oben im Editorfenster.
Um die in diesem Buch verwendeten Drittanbietermodule installieren zu können, brauchen Sie Mu in der Version 1.1.0. Sie steht zurzeit als Alpha-Release unter einem eigenen Link getrennt von den anderen Downloadlinks zur Verfügung.
In diesem Buch verwenden wir Mu als Editor und als interaktive Shell. Um Python-Code zu schreiben, können Sie jedoch auch beliebige andere Editoren verwenden. Zusammen mit Python wird die Software IDLE (Integrated Development and Learning Environment) installiert, die Sie ebenfalls als Editor verwenden können, wenn Sie Mu aus irgendeinem Grunde nicht installieren oder zum Laufen bekommen können. Um IDLE zu starten, gehen Sie wie folgt vor:
Auf Windows 7 und höher klicken Sie auf das Startsymbol in der linken unteren Ecke, geben
IDLE
in das Suchfeld ein und wählen
IDLE (Python GUI)
aus.
Auf macOS öffnen Sie ein Finder-Fenster, klicken auf
Programme
, dann auf
Python 3.8
und schließlich auf das IDLE-Symbol.
Auf Ubuntu wählen Sie
Anwendungen > Zubehör > Terminal
und geben dann
idle3
ein. (Möglicherweise können Sie auch oben auf dem Bildschirm auf
Anwendungen
klicken, dann
Programming
auswählen und auf
IDLE3
klicken.)
Wenn Sie Mu ausführen, sehen Sie normalerweise das Editorfenster. Sie können in Mu allerdings auch eine interaktive Shell öffnen, indem Sie auf die Schaltfläche REPL klicken. Eine Shell ist ein Programm, in das Sie Anweisungen für den Computer eingeben können, ähnlich wie im Terminal von macOS oder an der Eingabeaufforderung von Windows. In die interaktive Python-Shell geben Sie die Anweisungen ein, die der Python-Interpreter ausführen soll. Der Computer liest diese Anweisungen und setzt sie sofort um.
In Mu ist die interaktive Shell ein Bereich in der unteren Hälfte des Fensters. Dort wird folgender Text angezeigt:
Jupyter QtConsole 4.3.1
Python 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) [MSC v.1900 64 bit
(AMD64)]
Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
In [1]:
Wenn Sie IDLE verwenden, erscheint als erstes Fenster die interaktive Shell. Sie ist bis auf den folgenden Text größtenteils leer:
Python 3.8.0b1 (tags/v3.8.0b1:3b5deb0116, Jun 4 2019, 19:52:55) [MSC v.1916
64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Bei [1]: und >>> handelt es sich jeweils um die Eingabeaufforderung. In diesem Buch verwenden wir dafür das Zeichen >>>, da es gebräuchlicher ist. Auch im Terminal oder an der Windows-Eingabeaufforderung sehen Sie >>>. Die Eingabeaufforderung [1]: wurde für Jupyter Notebook erfunden, einen weiteren weitverbreiteten Python-Editor.
Zum Ausprobieren geben Sie an der Eingabeaufforderung der Shell Folgendes ein:
>>> print('Hello, world!')
Wenn Sie nun die Eingabetaste drücken, zeigt die interaktive Shell die Reaktion an:
>>> print('Hello, world!')
Hello, world!
Damit haben Sie Ihrem Computer gerade eine Anweisung erteilt, und er hat genau das getan, was Sie von ihm verlangt haben!
Für manche Zwecke muss ein Programm Module importieren. Einige davon sind im Lieferumfang von Python enthalten, aber andere – sogenannte Drittanbietermodule – wurden von Programmierern erstellt, die nicht zum Hauptentwicklerteam von Python gehören. In Anhang A finden Sie eine ausführliche Anleitung, um solche Module mit dem Programm pip (auf Windows) bzw. pip3 (auf macOS und Linux) zu installieren. Wenn Sie in diesem Buch angewiesen werden, ein bestimmtes Drittanbietermodul zu installieren, schlagen Sie in Anhang A nach.
Programmierer neigen dazu, im Internet nach Antworten auf ihre Fragen zu suchen. Das ist eine ganz andere Art des Lernens, als viele es gewohnt sind. Es gibt hier keinen persönlich anwesenden Lehrer, der Ihnen etwas beibringt und Ihre Fragen beantwortet. Was das Internet als Klassenzimmer auszeichnet, ist die Tatsache, dass es dort sehr viele Menschen gibt, die Ihre Fragen beantworten können. Höchstwahrscheinlich ist Ihre Frage auch schon längst beantwortet worden, sodass die Lösung lediglich darauf wartet, dass Sie sie finden. Wenn Sie eine Fehlermeldung erhalten oder Schwierigkeiten haben, den Code das machen zu lassen, was er soll, sind Sie nicht die erste Person, die sich diesem Problem gegenübersieht. Daher ist es viel einfacher, als Sie glauben, eine Lösung zu finden.
Um Ihnen ein Beispiel zu geben, provozieren wir absichtlich einen Fehler: Geben Sie in die interaktive Shell '42' + 3 ein. Machen Sie sich keine Gedanken darüber, was diese Anweisung bedeutet und was daran falsch sein soll, sondern achten Sie auf das Ergebnis:
>>> '42' + 3
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
'42' + 3
TypeError: Can't convert 'int' object to str implicitly
>>>
Da Python die Anweisung nicht versteht, erscheint hier eine Fehlermeldung (). Der als »Traceback« bezeichnete Teil der Fehlermeldung () gibt die Anweisung und die Nummer der Zeile an, mit der Python Schwierigkeiten hat. Wenn Sie eine Fehlermeldung erhalten, die Ihnen schleierhaft ist, suchen Sie online danach. In diesem Fall also würden Sie "TypeError: Can't convert 'int' object to str implicitly" (in Anführungszeichen) in eine Suchmaschine eingeben. Daraufhin sehen Sie haufenweise Links, in denen erklärt wird, was diese Fehlermeldung bedeutet und was die Ursache ist (siehe E–2).
Abb. 2–2Google-Ergebnisse zu einer Fehlermeldung können sehr hilfreich sein.
Sie werden dabei sehr oft bemerken, dass schon einmal jemand die gleiche Frage gestellt hat wie Sie und irgendeine hilfsbereite Person sie bereits beantwortet hat. Niemand kann alles über Programmierung wissen. Zur täglichen Arbeit eines Softwareentwicklers gehört auch die Suche nach Antworten auf technische Fragen.
Wenn Sie die Antworten auf Ihre Fragen nicht durch eine Onlinesuche finden können, versuchen Sie, Teilnehmer in Webforen wie Stack Overflow (https://stackoverflow.com/) oder dem Subreddit »Learn Programming« auf https://reddit.com/r/learnprogramming/ zu fragen. Beachten Sie aber, dass Sie Ihre Fragen geschickt stellen müssen, damit andere Ihnen helfen können. Lesen Sie auf jeden Fall den FAQ-Abschnitt der Website, um zu erfahren, wie Sie Fragen auf richtige Weise vorbringen.
Wenn Sie Fragen zur Programmierung stellen, sollten Sie Folgendes tun:
Erklären Sie nicht nur, was Sie getan haben, sondern auch, was Sie tun wollten. Dadurch können Helfer erkennen, ob Sie sich verrannt haben.
Geben Sie genau an, wann der Fehler auftritt. Zeigt er sich gleich zu Beginn des Programms oder erst nach einer bestimmten Aktion?
Kopieren Sie die
gesamte
Fehlermeldung und Ihren Code auf
https://pastebin.com/
oder
https://gist.github.com/
. Diese Websites erleichtern es, anderen Personen große Mengen an Code über das Web zur Verfügung zu stellen, ohne die Formatierung zu verlieren. Die URL zu dem dort veröffentlichten Code fügen Sie dann in Ihre E-Mail oder Ihren Forumspost ein. Als Beispiele können Sie sich Code von mir auf
https://pastebin.com/SzP2DbFx/
und
https://gist.github.com/asweigart/6912168/
ansehen.
Erklären Sie, was Sie bereits versucht haben, um das Problem zu lösen. Das zeigt den anderen, dass Sie selbst schon etwas Mühe darin investiert haben, die Lösung herauszufinden.
Geben Sie an, welche Version von Python Sie verwenden. (Es gibt einige entscheidende Unterschiede zwischen den Python-Interpretern der Versionen 2 und 3.) Nennen Sie auch die Version Ihres Betriebssystems.
Wenn ein Fehler nach einer Änderung am Code auftrat, erklären Sie, was Sie genau geändert haben.
Geben Sie an, ob der Fehler jedes Mal auftritt, wenn Sie das Programm ausführen, oder nur, nachdem Sie bestimmte Aktionen durchgeführt haben. Beschreiben Sie in letzterem Fall auch diese Aktionen.
Befolgen Sie immer die Online-Etikette. Schreiben Sie also Ihre Posts nicht komplett in Großbuchstaben und stellen Sie keine unsinnigen Forderungen an die Menschen, die Ihnen zu helfen versuchen.
Weitere Informationen darüber, wie Sie um Hilfe bei Programmierfragen bitten können, erhalten Sie in dem Blogpost auf https://autbor.com/help/. Eine Liste häufig gestellter Fragen über Programmierung finden Sie auf https://www.reddit.com/r/learnprogramming/wiki/faq/. Eine ähnliche Liste zu dem Thema, einen Job im Bereich der Softwareentwicklung zu bekommen, steht auf https://www.reddit.com/r/cscareerquestions/wiki/index/.
Ich helfe anderen gern dabei, Python kennenzulernen. So schreibe ich Programmiertutorials in meinem Blog auf https://inventwithpython.com/blog/. Sie können sich mit Ihren Fragen auch über [email protected] an mich wenden (in Englisch). Eine schnellere Antwort dürften Sie allerdings erhalten, wenn Sie Ihre Fragen auf https://reddit.com/r/inventwithpython/ stellen.
Für die meisten Menschen ist ein Computer eher ein Gerät als ein Werkzeug. Wenn Sie jedoch zu programmieren lernen, steht Ihnen eines der vielseitigsten Werkzeuge der modernen Welt zur Verfügung, und obendrein werden Sie auch noch Spaß dabei haben. Programmierung ist keine Gehirnchirurgie – Sie können sich auch als Anfänger daran versuchen und gefahrlos Fehler machen.
Für dieses Buch müssen Sie keinerlei Programmierkenntnisse mitbringen. Es kann aber sein, dass Sie Fragen haben, die über den behandelten Stoff hinausgehen. Die richtigen Fragen zu stellen und zu wissen, wo Sie Antworten finden können, ist für Programmierer von unschätzbarem Wert.
Fangen wir an!
Die Programmiersprache Python bietet eine breite Palette von syntaktischen Konstruktionen, Standardbibliotheksfunktionen und Möglichkeiten zur interaktiven Entwicklung. Zum Glück brauchen Sie sich um das meiste davon nicht zu kümmern, sondern müssen nur so viel lernen, dass Sie damit praktische kleine Programme schreiben können.
Allerdings müssen Sie, bevor Sie irgendetwas tun können, zunächst einige Grundlagen der Programmierung erlernen. Wie ein Zauberlehrling werden Sie vielleicht denken, dass einige dieser Grundlagen ziemlich undurchsichtig sind und dass es viel Mühe macht, sie sich anzueignen, aber diese Kenntnisse und etwas Übung werden Sie in die Lage versetzen, Ihren Computer wie einen Zauberstab zu nutzen und damit unglaublich erscheinende Dinge zu tun.
In einigen Beispielen in diesem Kapitel werden Sie dazu aufgefordert, etwas in die interaktive Shell, auch REPL (Read-Evaluate-Print Loop, also etwa »Lesen-Auswerten-Ausgeben-Schleife«) genannt, einzugeben. Damit können Sie eine Python-Anweisung nach der anderen ausführen und die Ergebnisse unmittelbar einsehen. Die Verwendung dieser Shell eignet sich hervorragend, um zu lernen, was die grundlegenden Python-Anweisungen bewirken. Nutzen Sie sie daher, während Sie das Buch durcharbeiten. Auf diese Weise können Sie sich den Stoff besser merken, als wenn Sie ihn nur lesen würden.
Um die interaktive Shell auszuführen, können Sie den Editor Mu starten, den Sie beim Durcharbeiten der Installationsanleitungen im Vorwort heruntergeladen haben. Auf Windows öffnen Sie dazu das Startmenü, geben Mu ein und starten die gleichnamige Anwendung. Auf macOS öffnen Sie den Ordner Programme und doppelklicken darin auf Mu. Klicken Sie auf die Schaltfläche New und speichern Sie die leere Datei als blank.py. Wenn Sie diese leere Datei ausführen, indem Sie auf Run klicken oder drücken, wird die interaktive Shell als neuer Bereich am unteren Rand des Mu-Fensters geöffnet. Dort sehen Sie die Eingabeaufforderung >>> der Shell.
Geben Sie dort 2 + 2 ein, um Python eine einfache Berechnung ausführen zu lassen. Das Mu-Fenster zeigt jetzt Folgendes an:
>>> 2 + 2
4
>>>
In Python wird etwas wie 2 + 2 als Ausdruck bezeichnet. Dies ist die einfachste Form von Programmieranweisungen in dieser Sprache. Ausdrücke setzen sich aus Werten (wie 2) und Operatoren (wie +) zusammen. Sie können stets ausgewertet, also auf einen einzigen Wert reduziert werden. Daher können Sie an allen Stellen im Python-Code, an denen ein Wert stehen soll, auch einen Ausdruck verwenden.
Im vorstehenden Beispiel wurde 2 + 2 zu dem Wert 4 ausgewertet. Ein einzelner Wert ohne Operatoren wird ebenfalls als Ausdruck angesehen, wird aber nur zu sich selbst ausgewertet:
>>> 2
2
Wenn ein Programm Code enthält, den der Computer nicht versteht, stürzt es ab, woraufhin Python eine Fehlermeldung anzeigt. Ihren Computer können Sie dadurch jedoch nicht beschädigen. Daher brauchen Sie auch keine Angst vor Fehlern zu haben. Bei einem Absturz hält das Programm nur unerwartet an.
Wenn Sie mehr über eine bestimmte Fehlermeldung wissen wollen, können Sie online nach dem genauen Text suchen. Auf www.dpunkt.de/python_automatisieren_2/ finden Sie außerdem eine Liste häufig auftretender Python-Fehlermeldungen und ihrer Bedeutungen.
Es gibt eine Menge verschiedener Operatoren, die Sie in Python-Ausdrücken verwenden können. Tabelle 1–1 führt die arithmetischen Operatoren auf.
Operator
Operation
Beispiel
Ergebnis
**
Exponent
2 ** 3
8
%
Modulo/Rest
22 % 8
6
//
Integerdivision/abgerundeter Quotient
22 // 8
2
/
Division
22 / 8
2.75
*
Multiplikation
3 * 5
15
-
Subtraktion
5 - 2
3
+
Addition
2 + 2
4
Tab. 1–1Arithmetische Operatoren, geordnet vom höchsten zum niedrigsten Rang
Die Auswertungsreihenfolge oder Rangfolge der arithmetischen Operatoren in Python entspricht ihrer gewöhnlichen Rangfolge in der Mathematik: Als Erstes wird der Operator ** ausgewertet, dann die Operatoren *, /, // und % von links nach rechts, und schließlich die Operatoren + und - (ebenfalls von links nach rechts). Um die Auswertungsreihenfolge zu ändern, können Sie bei Bedarf Klammern setzen. Der Weißraum zwischen den Operatoren und Werten spielt in Python keine Rolle (außer bei den Einrückungen am Zeilenanfang). Ein Abstand von einem Leerzeichen ist jedoch üblich. Zur Übung geben Sie die folgenden Ausdrücke in die interaktive Shell ein:
>>> 2 + 3 * 6
20
>>> (2 + 3) * 6
30
>>> 48565878 * 578453
28093077826734
>>> 2 ** 8
256
>>> 23 / 7
3.2857142857142856
>>> 23 // 7
3
>>> 23 % 7
2
>>> 2 + 2
4
>>> (5 - 1) * ((7 + 1) / (3 - 1))
16.0
Die Ausdrücke müssen Sie jeweils selbst eingeben, aber Python nimmt Ihnen die Arbeit ab, sie auf einen einzelnen Wert zu reduzieren. Wie die folgende Grafik zeigt, wertet es dabei die einzelnen Teile eines Ausdrucks nacheinander aus, bis ein einziger Wert übrig ist:
Die Regeln, nach denen Operatoren und Werte zu Ausdrücken zusammengestellt werden, bilden einen grundlegenden Bestandteil der Programmiersprache Python, vergleichbar mit den Grammatikregeln einer natürlichen Sprache. Betrachten Sie das folgende Beispiel:
Dies ist ein grammatikalisch korrekter deutscher Satz.
Dies grammatikalisch ist Satz kein deutscher korrekter.
Der zweite Satz lässt sich nur schwer verstehen (»parsen«, wie es bei einer Programmiersprache heißt), da er nicht den Regeln der deutschen Grammatik folgt. Genauso ist es, wenn Sie eine schlecht formulierte Python-Anweisung eingeben. Python versteht sie nicht und zeigt die Fehlermeldung SyntaxError an, wie die folgenden Beispiele zeigen:
>>> 5 +
File "<stdin>", line 1
5 +
^
SyntaxError: invalid syntax
>>> 42 + 5 + * 2
File "<stdin>", line 1
42 + 5 + * 2
^
SyntaxError: invalid syntax
Um herauszufinden, ob eine Anweisung funktioniert oder nicht, können Sie sie einfach in die interaktive Shell eingeben. Keine Angst, dadurch können Sie nichts kaputt machen. Schlimmstenfalls zeigt Python eine Fehlermeldung an. Für professionelle Softwareentwickler gehören Fehlermeldungen zum Alltag.
Ein Datentyp ist eine Kategorie für Werte, wobei jeder Wert zu genau einem Datentyp gehört. Die gebräuchlichsten Datentypen in Python finden Sie in Tabelle 1–2. Werte wie -2 und -30 sind beispielsweise Integerwerte. Dieser Datentyp (int) steht für ganze Zahlen. Zahlen mit Dezimalpunkt, z. B. 3.14, sind dagegen Fließkommazahlen und weisen den Typ float auf. Beachten Sie, dass ein Wert wie 42 ein Integer ist, 42.0 dagegen eine Fließkommazahl.
Datentyp
Beispiele
Integer
-2, -1, 0, 1, 2, 3, 4, 5
Fließkommazahlen
-1.25, -1.0, -0.5, 0.0, 0.5, 1.0, 1.25
Strings
'a', 'aa', 'aaa', 'Hello!', '11 cats'
Tab. 1–2Häufig verwendete Datentypen
In Python-Programmen können auch Textwerte vorkommen, sogenannte Strings (str). Schließen Sie Strings immer in einfache Anführungszeichen ein (z. B. 'Hello' oder 'Goodbye cruel world!'), damit Python weiß, wo der String anfängt und wo er endet. Sie können sogar einen String erstellen, der gar keine Zeichen enthält, nämlich den leeren String''. In Kapitel 4 werden Strings ausführlicher behandelt.
Wenn Sie die Fehlermeldung SyntaxError: EOL while scanning string literal erhalten, haben Sie wahrscheinlich wie im folgenden Beispiel das schließende einfache Anführungszeichen am Ende eines Strings vergessen:
>>> 'Hello world!
SyntaxError: EOL while scanning string literal
Die Bedeutung eines Operators kann sich in Abhängigkeit von den Datentypen der Werte ändern, die rechts und links von ihm stehen. Beispielsweise fungiert + zwischen zwei Integer- oder Fließkommawerten als Additionsoperator, zwischen zwei Strings aber als Stringverkettungsoperator. Probieren Sie Folgendes in der interaktiven Shell aus:
>>> 'Alice' + 'Bob'
'AliceBob'
Dieser Ausdruck wird zu einem einzigen neuen String ausgewertet, der den Text der beiden Originalstrings enthält. Wenn Sie jedoch versuchen, den Operator + zwischen einem String und einem Integerwert einzusetzen, weiß Python nicht, wie es damit umgehen soll, und gibt eine Fehlermeldung aus:
>>> 'Alice' + 42
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
'Alice' + 42
TypeError: can only concatenate str (not "int") to str
Die Fehlermeldung can only concatenate str (not "int") to str bedeutet, dass Python glaubt, Sie wollten einen Integer mit dem String 'Alice' verketten. Dazu aber müssten Sie den Integerwert ausdrücklich in einen String umwandeln, da Python dies nicht automatisch tun kann. (Die Umwandlung von Datentypen werden wir im Abschnitt »Analyse des Programms« weiter hinten in diesem Kapitel erklären und uns dabei mit den Funktionen str(), int() und float() beschäftigen.)
Zwischen zwei Integer- oder Fließkommawerten dient * als Multiplikationsoperator, doch zwischen einem String und einem Integerwert wird er zum Stringwiederholungsoperator. Um das auszuprobieren, geben Sie in die interaktive Shell Folgendes ein:
>>> 'Alice' * 5
'AliceAliceAliceAliceAlice'
Der Ausdruck wird zu einem einzigen String ausgewertet, der den ursprünglichen String so oft enthält, wie der Integerwert angibt. Die Stringwiederholung ist zwar ein nützlicher Trick, wird aber längst nicht so häufig angewendet wie die Stringverkettung.
Den Operator * können Sie nur zwischen zwei numerischen Werten (zur Multiplikation) oder zwischen einem String- und einem Integerwert einsetzen (zur Stringwiederholung). In allen anderen Fällen zeigt Python eine Fehlermeldung an:
>>> 'Alice' * 'Bob'
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
'Alice' * 'Bob'
TypeError: can't multiply sequence by non-int of type 'str'
>>> 'Alice' * 5.0
Traceback (most recent call last):
File "<pyshell#33>", line 1, in <module>
'Alice' * 5.0
TypeError: can't multiply sequence by non-int of type 'float'
Es ist sinnvoll, dass Python solche Ausdrücke nicht auswertet. Schließlich ist es nicht möglich, zwei Wörter miteinander zu multiplizieren, und es dürfte auch ziemlich schwierig sein, einen willkürlichen String eine gebrochene Anzahl von Malen zu wiederholen.
Eine Variable können Sie sich wie eine Kiste im Arbeitsspeicher des Computers vorstellen, in der einzelne Werte abgelegt werden. Wenn Sie das Ergebnis eines ausgewerteten Ausdrucks an einer späteren Stelle in Ihrem Programm noch brauchen, können Sie es in einer Variablen festhalten.
Sie können sich eine Variable als eine beschriftete Kiste vorstellen, in der der Wert abgelegt wird (siehe Abb. 1–1).
Geben Sie beispielsweise Folgendes in die interaktive Shell ein:
Eine Variable wird initialisiert (erstellt), wenn zum ersten Mal ein Wert in ihr gespeichert wird (). Danach können Sie sie zusammen mit anderen Variablen und Werten in Ausdrücken verwenden (). Wenn Sie der Variablen einen neuen Wert zuweisen (), geht der alte Wert verloren. Daher wird spam am Ende dieses Beispiels nicht mehr zu 40 ausgewertet, sondern zu 42. Die Variable ist also überschrieben worden. Versuchen Sie in der interaktiven Shell wie folgt einen String zu überschreiben:
Wie die Kiste in Abb. 1–2 enthält die Variable spam in diesem Beispiel den Wert Hello, bis er durch Goodbye ersetzt wird.
Abb. 1–2Wird einer Variablen ein neuer Wert zugewiesen, so wird der alte Wert vergessen.
Ein guter Variablenname beschreibt die enthaltenen Daten. Stellen Sie sich vor, Sie ziehen um und beschriften alle Kartons mit »Sachen«. Dann würden Sie Ihre Sachen nie wiederfinden! In diesem Buch und in einem Großteil der Python-Dokumentation werden allgemeine Variablennamen wie spam, eggs und bacon verwendet (in Anlehnung an den Spam-Sketch von Monty Python), aber in Ihren eigenen Programmen sollten Sie beschreibende Namen verwenden, um den Code leichter lesbar zu machen.
Sie können Variablen in Python fast beliebig benennen, allerdings gibt es einige Einschränkungen. Tabelle 1–3 führt Beispiele für gültige Variablennamen auf. Sie müssen die folgenden drei Regeln erfüllen:
Der Name muss ein einzelnes Wort sein, darf also keine Leerzeichen enthalten.
Der Name darf nur aus Buchstaben, Ziffern und dem Unterstrich bestehen.
Der Name darf nicht mit einer Zahl beginnen.
Gültige Variablennamen
Ungültige Variablennamen
current_balance
current-balance (Bindestriche sind nicht zulässig)
currentBalance
current balance (Leerzeichen sind nicht zulässig)
account4
4account (der Name darf nicht mit einer Zahl beginnen)
_42
42 (der Name darf nicht mit einer Zahl beginnen)
TOTAL_SUM
TOTAL_$UM (Sonderzeichen wie $ sind nicht zulässig)
hello
'hello' (Sonderzeichen wie ' sind nicht zulässig)
Tab. 1–3Gültige und ungültige Variablennamen
Bei Variablennamen wird zwischen Groß- und Kleinschreibung unterschieden, sodass spam, SPAM, Spam und sPaM vier verschiedene Variablen bezeichnen. Zwar ist Spam ein zulässiger Variablenname, aber verabredungsgemäß sollten Variablennamen in Python mit einem Kleinbuchstaben beginnen.
In diesem Buch wird für Variablennamen die CamelCase-Schreibweise verwendet, also die Schreibung mit Binnenmajuskel statt mit einem Unterstrich. Variablennamen sehen also aus wie lookLikeThis und nicht wie look_like_this. Erfahrene Programmierer mögen einwenden, dass die offizielle Python-Stilrichtlinie PEP 8 Unterstriche verlangt. Ich bevorzuge allerdings die CamelCase-Schreibweise und möchte dazu auf den Abschnitt »Sinnlose Übereinstimmung ist die Plage kleiner Geister« aus PEP 8 verweisen:
»Übereinstimmung mit der Stilrichtlinie ist wichtig. Am wichtigsten ist es jedoch zu wissen, wann man diese Übereinstimmung aufgeben muss. Für manche Fälle ist die Stilrichtlinie einfach ungeeignet. Urteilen Sie dann selbst nach bestem Wissen und Gewissen.«
In der interaktiven Shell können Sie einzelne Python-Anweisungen nacheinander ausführen, aber um ein vollständiges Python-Programm zu schreiben, müssen Sie die Anweisungen in den Dateieditor eingeben. Er ähnelt Texteditoren wie dem Windows-Editor oder TextMate, verfügt aber zusätzlich über einige Sonderfunktionen für die Eingabe von Quellcode. Um in Mu eine neue Datei anzulegen, klicken Sie in der obersten Zeile auf New.
In dem Fenster, das jetzt erscheint, sehen Sie einen Cursor, der auf Ihre Eingaben wartet. Dieses Fenster unterscheidet sich jedoch von der interaktiven Shell, in der Python-Anweisungen ausgeführt werden, sobald Sie die Eingabetaste drücken. Im Dateieditor können Sie viele Anweisungen eingeben, die Datei speichern und dann das Programm ausführen. Anhand der folgenden Merkmale können Sie erkennen, in welchem der beiden Fenster Sie sich gerade befinden:
Das Fenster der interaktiven Shell zeigt die Eingabeaufforderung
>>>
an.
Im Dateieditorfenster gibt es die Eingabeaufforderung
>>>
nicht.
Nun ist es an der Zeit, Ihr erstes Programm zu schreiben! Geben Sie im Fenster des Dateieditors Folgendes ein:
Nachdem Sie den Quellcode eingegeben haben, speichern Sie ihn, damit Sie ihn nicht jedes Mal neu eingeben müssen, wenn Sie Mu starten. Klicken Sie auf Save, geben Sie im Feld File Name den Namen hello.py ein und klicken Sie auf Save.
Während Sie ein Programm eingeben, sollten Sie es zwischendurch immer mal wieder speichern. Sollte Ihr Computer abstürzen oder sollten Sie versehentlich Mu beenden, verlieren Sie dann keinen Code. Als Tastaturkürzel zum Speichern einer Datei drücken Sie + auf Windows und Linux bzw. + auf macOS.
Nachdem Sie das Programm gespeichert haben, führen Sie es aus. Drücken Sie dazu . Das Programm läuft jetzt im Fenster der interaktiven Shell. Beachten Sie aber, dass Sie im Editorfenster drücken müssen, nicht im Shell-Fenster. Geben Sie Ihren Namen ein, wenn das Programm Sie danach fragt. Die Programmausgabe im Fenster der interaktiven Shell sieht wie folgt aus:
Wenn keine Programmzeilen zum Ausführen mehr übrig sind, wird das Programm beendet.
Um den Dateieditor zu schließen, klicken Sie einfach auf das X in der rechten oberen Ecke. Wenn Sie ein gespeichertes Programm laden wollen, wählen Sie im Menü File > Open