Wissen, wie’s geht. Leseprobe Dieses bewährte Einsteigerbuch in 5. Auflage führt Sie Schritt für Schritt in Python ein und erklärt Ihnen alle Grundlagen. Viele Übungsaufgaben und Beispielanwendungen helfen Ihnen dabei, das Gelernte in der Praxis anzuwenden. Überzeugen Sie sich selbst in dieser Leseprobe und entwickeln Sie ein Computerspiel mit Python. »Kurs: Ein Computerspiel programmieren« Inhaltsverzeichnis Index Der Autor Leseprobe weiterempfehlen Thomas Theis Einstieg in Python Ideal für Programmiereinsteiger 495 Seiten, broschiert, 5. Auflage, Juni 2017 24,90 Euro, ISBN 978-3-8362-4525-8 www.rheinwerk-verlag.de/4374 Kapitel 3 Programmierkurs 3 Der folgende Programmierkurs mit ausführlichen Erläuterungen führt Sie schrittweise in die Programmierung mit Python ein. Begleitet wird der Kurs von einem Programmierprojekt, das die vielen Teilaspekte zu einem Ganzen verknüpft. 3.1 Ein Spiel programmieren Damit Sie die Programmiersprache Python auf unterhaltsame Weise kennenlernen, werden Sie im Folgenden ein Spiel programmieren. Es wird im Verlauf des Buchs kontinuierlich erweitert und verbessert. 3.1.1 Der Ablauf des Spiels Nach Aufruf des Programms wird dem Benutzer eine Kopfrechenaufgabe gestellt. Er gibt das von ihm ermittelte Ergebnis ein, und das Programm bewertet seine Eingabe. Kopfrechnen Die Aufgabe: 9 + 26 Bitte eine Zahl eingeben: 34 34 ist falsch Bitte eine Zahl eingeben: 35 35 ist richtig Ergebnis: 35 Anzahl Versuche: 2 Das Spiel wird in mehreren Einzelschritten erstellt. Zunächst entsteht eine ganz einfache Version. Mit zunehmenden Programmierkenntnissen entwickeln Sie immer komplexere Versionen. Die im jeweiligen Abschnitt erlernten Programmierfähigkeiten setzen Sie unmittelbar zur Verbesserung des Spielablaufs ein. Das Spiel wächst In späteren Abschnitten des Buchs entstehen weitere Versionen des Spiels. Es begleitet Sie auf diese Weise durch das gesamte Buch. Unter anderem wird es um die folgenden Möglichkeiten erweitert: Versionen 35 3 3.2 Programmierkurs 왘 Es werden mehrere Aufgaben gestellt. 왘 Die benötigte Zeit wird gemessen. 왘 Der Name des Spielers und die benötigte Zeit werden als Highscore-Liste dauerhaft in einer Datei oder einer Datenbank gespeichert. 왘 Die Highscore-Liste wird mit neuen Ergebnissen aktualisiert und auf dem Bildschirm dargestellt. Variablen und Operatoren In den beiden Variablen a und b wird jeweils ein Wert gespeichert. Die beiden Werte werden addiert, das Ergebnis wird der Variablen c zugewiesen. Die Aufgabenstellung wird ausgegeben, anschließend das Ergebnis. Der Benutzer des Programms hat noch keine Möglichkeit, in den Ablauf einzugreifen. 왘 Es gibt eine Version auf einer grafischen Benutzeroberfläche. 3.2.2 Eingabe einer Zeichenkette 왘 Es gibt eine Version, die das Spielen im Internet ermöglicht. In diesem Abschnitt wird die Funktion input() zur Eingabe einer Zeichenkette durch den Benutzer eingeführt. Ein kleines Beispiel: 3.2 Variablen und Operatoren Zur Speicherung von Werten werden Variablen benötigt. Operatoren dienen zur Ausführung von Berechnungen. Verarbeitung, Ausgabe 3 input() # Eingabe einer Zeichenkette print("Bitte einen Text eingeben") x = input() print("Ihre Eingabe:", x) Listing 3.2 Datei eingabe_text.py 3.2.1 Berechnung und Zuweisung Die Ausgabe könnte wie folgt aussehen: Im folgenden Programm wird eine einfache Berechnung mithilfe eines Operators durchgeführt. Das Ergebnis der Berechnung wird mit dem Gleichheitszeichen einer Variablen zugewiesen. Es erfolgt eine Ausgabe. Diese Schritte kennen Sie bereits aus Abschnitt 2.1.5. Bitte einen Text eingeben Python ist toll Ihre Eingabe: Python ist toll # Werte a = 5 b = 3 Der Benutzer gibt einen kleinen Satz ein. Dieser Satz wird in der Variablen x gespeichert und anschließend ausgegeben. 3.2.3 Eingabe einer Zahl # Berechnung c = a + b # Ausgabe print("Die Aufgabe:", a, "+", b) print("Das Ergebnis:", c) Listing 3.1 Datei zuweisung.py Die Ausgabe des Programms lautet: Die Aufgabe: 5 + 3 Das Ergebnis: 8 36 Im weiteren Verlauf des Spiels ist es notwendig, die Eingabe des Benutzers als Zahl weiterzuverwenden. Dazu muss die Zeichenkette, die die Funktion input() liefert, in eine Zahl umgewandelt werden. Umwandlung Zur Umwandlung gibt es unter anderem die folgenden Funktionen: 왘 Die eingebaute Funktion int() wandelt eine Zeichenkette in eine ganze Zahl um; eventuell vorhandene Nachkommastellen werden abgeschnitten. int() 왘 Die eingebaute Funktion float() wandelt eine Zeichenkette in eine Zahl mit Nachkommastellen um. float() 37 3 3.2 Programmierkurs Abbruch 왘 Falls die Zeichenkette für float() keine gültige Zahl enthält, kommt es zu einem Programmabbruch. Bei int() muss es sich sogar um eine gültige ganze Zahl handeln. In Abschnitt 3.6, »Fehler und Ausnahmen«, lernen Sie, wie Sie Programmabbrüche abfangen. Ein Beispiel: # Eingabe einer Zahl print("Bitte eine ganze Zahl eingeben") x = input() print("Ihre Eingabe:", x) # Umwandlung in ganze Zahl xganz = int(x) print("Als ganze Zahl:", xganz) # Mit Berechnung xdoppel = xganz * 2 print("Das Doppelte:", xdoppel) Listing 3.3 Datei eingabe_zahl.py Variablen und Operatoren print("Die Aufgabe:", a, "+", b) # Eingabe print("Bitte eine Zahl eingeben:") z = input() 3 # Eingabe in Zahl umwandeln zahl = int(z) # Ausgabe print("Ihre Eingabe:", z) print("Das Ergebnis:", c) Listing 3.4 Datei spiel_eingabe.py Eine mögliche Ausgabe des Programms: Die Aufgabe: 5 + 3 Bitte eine Zahl eingeben: 9 Ihre Eingabe: 9 Das Ergebnis: 8 Die Ausgabe könnte wie folgt aussehen: Bitte eine ganze Zahl eingeben 6 Ihre Eingabe: 6 Als ganze Zahl: 6 Das Doppelte: 12 Übung u_eingabe_inch Der Benutzer gibt eine Zeichenkette ein. Diese Zeichenkette wird mithilfe der eingebauten Funktion int() in eine ganze Zahl umgewandelt. Die Zahl und das Doppelte der Zahl werden ausgegeben. Schreiben Sie ein Programm zur Eingabe und Umrechnung von beliebigen Inch-Werten in Zentimeter. Speichern Sie das Programm in der Datei u_ eingabe_inch.py. Rufen Sie das Programm auf und testen Sie es. Die Ausgabe kann zum Beispiel wie folgt aussehen: 3.2.4 Spiel, Version mit Eingabe Bitte geben Sie den Inch-Wert ein: 3.5 3.5 Inch sind 8.89 cm Das Spiel, in dem der Benutzer eine oder mehrere Kopfrechenaufgaben lösen soll, erhält eine Eingabe. Es wird wie folgt geändert: # a b c 38 Das Programm gibt die Aufforderung Bitte eine Zahl eingeben: aus und hält an. Die Eingabe des Benutzers wird in der Variablen z gespeichert. Die Zeichenkette z wird mithilfe der Funktion int() in eine ganze Zahl verwandelt. Werte und Berechnung = 5 = 3 = a + b Inch in Zentimeter Übung u_eingabe_gehalt Schreiben Sie ein Programm zur Berechnung des monatlich zu zahlenden Steuerbetrags. Der Anwender wird dazu aufgefordert, sein monatliches Steuer berechnen 39 3 3.3 Programmierkurs Bruttogehalt einzugeben. Anschließend werden 18 % dieses Betrags berechnet und ausgegeben. Nutzen Sie die Datei u_eingabe_gehalt.py. Die Ausgabe kann zum Beispiel wie folgt aussehen: Geben Sie Ihr Bruttogehalt in Euro ein: 2500 Es ergibt sich ein Steuerbetrag von 450.0 Euro 3.2.5 Zufallszahlen Natürlich wird nicht immer die gleiche Kopfrechenaufgabe gestellt. In Python steht ein Zufallszahlengenerator zur Verfügung. Er erzeugt zufällige Zahlen, die wir zur Bildung der Aufgabenstellung nutzen. Modul importieren Die Funktionen des Zufallszahlengenerators befinden sich in einem zusätzlichen Modul, das zunächst importiert werden muss. Das Programm wird wie folgt verändert: # Modul random importieren import random # Zufallsgenerator initialisieren random.seed() # Zufallswerte und Berechnung a = random.randint(1,10) b = random.randint(1,10) c = a + b print("Die Aufgabe:", a, "+", b) # Eingabe print("Bitte eine Zahl eingeben:") z = input() zahl = int(z) # Ausgabe print("Ihre Eingabe:", z) print("Das Ergebnis:", c) Verzweigungen Eine mögliche Ausgabe des Programms, abhängig von den gelieferten zufälligen Werten, sieht wie folgt aus: Die Aufgabe: 8 + 3 Bitte eine Zahl eingeben: 7 Ihre Eingabe: 7 Das Ergebnis: 11 3 Zusätzliche Module können Sie mithilfe der Anweisung import in das Programm einbinden. Die Funktionen dieser Module können Sie anschließend in der Schreibweise Modulname.Funktionsname aufrufen. import Der Aufruf der Funktion seed() des Moduls random führt dazu, dass der Zufallszahlengenerator mit der aktuellen Systemzeit initialisiert wird. Anderenfalls könnte es passieren, dass anstelle einer zufälligen Auswahl immer wieder die gleichen Zahlen geliefert würden. seed() Die Funktion randint() des Moduls random liefert eine ganze Zufallszahl im angegebenen Bereich. Im vorliegenden Fall ist dies also eine zufällige Zahl von 1 bis 10. randint() Die Funktionen des Moduls random können für die zufälligen Werte eines Spiels genutzt werden. Falls Sie zufällige Werte zum Zwecke der Verschlüsselung oder aus Gründen der Sicherheit benötigen, sollten Sie die Funktionen des Moduls secrets nutzen, das es seit Python 3.6 gibt. secrets 3.3 Verzweigungen In den bisherigen Programmen werden alle Anweisungen der Reihe nach ausgeführt. Zur Steuerung des Programmablaufs werden allerdings häufig Verzweigungen benötigt. Innerhalb des Programms wird anhand einer Bedingung entschieden, welcher Zweig des Programms ausgeführt wird. Programmablauf 3.3.1 Vergleichsoperatoren Bedingungen werden mithilfe von Vergleichsoperatoren formuliert. Tabelle 3.1 listet die Vergleichsoperatoren mit ihrer Bedeutung auf. Kleiner, größer, gleich Listing 3.5 Datei spiel_zufallszahl.py 40 41 3 3.3 Programmierkurs Operator Bedeutung > größer als < kleiner als >= größer als oder gleich <= kleiner als oder gleich == gleich != ungleich Tabelle 3.1 Vergleichsoperatoren 3.3.2 Einfache Verzweigung if-else Im folgenden Beispiel wird untersucht, ob eine Zahl positiv ist. Ist dies der Fall, wird Diese Zahl ist positiv ausgegeben, anderenfalls lautet die Ausgabe Diese Zahl ist 0 oder negativ. Es wird also nur eine der beiden Anweisungen ausgeführt. x = 12 print("x:", x) if x > 0: print("Diese Zahl ist positiv") else: print("Diese Zahl ist 0 oder negativ") Listing 3.6 Datei verzweigung_einfach.py Die Ausgabe des Programms lautet: x: 12 Diese Zahl ist positiv In der ersten Zeile erhält die Variable x den Wert 12. 42 if, Doppelpunkt In der zweiten Zeile wird mithilfe von if eine Verzweigung eingeleitet. Danach wird eine Bedingung formuliert (hier x > 0), die entweder wahr oder falsch ergibt. Anschließend kommt ein Doppelpunkt. Einrücken Es folgen eine oder mehrere Anweisungen, die nur ausgeführt werden, falls die Bedingung wahr ergibt. Die Anweisungen müssen innerhalb des sogenannten if-Zweigs mithilfe der (ê)-Taste eingerückt werden, damit Verzweigungen Python die Zugehörigkeit zur Verzweigung erkennen kann. Gleichzeitig macht die Einrückung das Programm übersichtlicher. In der vierten Zeile wird mithilfe der Anweisung else der alternative Teil der Verzweigung eingeleitet. Es folgt wiederum ein Doppelpunkt. else, Doppelpunkt Dann folgen eine oder mehrere Anweisungen, die nur ausgeführt werden, falls die Bedingung falsch ergibt. Auch diese Anweisungen müssen eingerückt werden. 3.3.3 Spiel, Version mit Bewertung der Eingabe Das Spiel, in dem der Benutzer eine oder mehrere Kopfrechenaufgaben lösen soll, wird um eine Bewertung der Eingabe erweitert. Mithilfe einer einfachen Verzweigung wird untersucht, ob sie richtig oder falsch war. Das Programm verändert sich wie folgt: Eingabe prüfen # Zufallsgenerator import random random.seed() # Werte und Berechnung a = random.randint(1,10) b = random.randint(1,10) c = a + b print("Die Aufgabe:", a, "+", b) # Eingabe print("Bitte eine Zahl eingeben:") z = input() zahl = int(z) # Verzweigung if zahl == c: print(zahl, "ist richtig") else: print(zahl, "ist falsch") print("Ergebnis: ", c) Listing 3.7 Datei spiel_verzweigung.py 43 3 3 3.3 Programmierkurs Eine mögliche Ausgabe des Programms wäre: Die Aufgabe: 2 + 8 Bitte eine Zahl eingeben: 11 11 ist falsch Ergebnis: 10 Die Eingabe wird in eine Zahl umgewandelt. Entspricht diese Zahl dem Ergebnis der Rechnung, wird ist richtig ausgegeben. Entspricht die Zahl nicht dem Ergebnis, so wird ist falsch ausgegeben, und das korrekte Ergebnis wird genannt. Übung u_verzweigung_einfach Das Programm zur Berechnung des Steuerbetrags wird verändert. Der Anwender soll dazu aufgefordert werden, sein monatliches Bruttogehalt einzugeben. Liegt das Gehalt über 2.500 €, sind 22 % Steuern zu zahlen, ansonsten 18 %. Nutzen Sie die Datei u_verzweigung_einfach.py. Es ist nur eine Eingabe erforderlich. Innerhalb des Programms soll anhand des Gehalts entschieden werden, welcher Steuersatz zur Anwendung kommt. Die Ausgabe kann zum Beispiel wie folgt aussehen: Geben Sie Ihr Bruttogehalt in Euro ein: 3000 Es ergibt sich ein Steuerbetrag von 660.0 Euro oder sie kann so aussehen: Geben Sie Ihr Bruttogehalt in Euro ein: 2000 Es ergibt sich ein Steuerbetrag von 360.0 Euro Verzweigungen elif x < 0: print("x ist negativ") else: print("x ist gleich 0") 3 Listing 3.8 Datei verzweigung_mehrfach.py Die Ausgabe des Programms: x: –5 x ist negativ Die Verzweigung wird mithilfe von if eingeleitet. Falls x positiv ist, werden die nachfolgenden, eingerückten Anweisungen ausgeführt. if Nach elif wird eine weitere Bedingung formuliert. Sie wird nur untersucht, falls die erste Bedingung (nach dem if) nicht zutrifft. Falls x negativ ist, werden die nachfolgenden, eingerückten Anweisungen ausgeführt. elif Die Anweisungen nach dem else werden nur durchgeführt, falls keine der beiden vorherigen Bedingungen zutraf (nach dem if und nach dem elif). In diesem Fall bedeutet das, dass x gleich 0 ist, da es nicht positiv und nicht negativ ist. else Hinweis Innerhalb einer Verzweigung können mehrere elif-Anweisungen vorkommen. Sie werden der Reihe nach untersucht, bis das Programm zu einer Bedingung kommt, die zutrifft. Die weiteren elif-Anweisungen oder eine else-Anweisung werden in diesem Fall nicht mehr beachtet. Übung u_verzweigung_mehrfach 3.3.4 Mehrfache Verzweigung Mehrere Möglichkeiten if-elif-else 44 In vielen Anwendungsfällen gibt es mehr als zwei Möglichkeiten, zwischen denen zu entscheiden ist. Dazu wird eine mehrfache Verzweigung benötigt. Im folgenden Beispiel wird untersucht, ob eine Zahl positiv, negativ oder gleich 0 ist. Es wird eine entsprechende Meldung ausgegeben: x = -5 print("x:", x) if x > 0: print("x ist positiv") Das Programm zur Berechnung des Steuerbetrags soll weiter verändert werden (Datei u_verzweigung_mehrfach.py). Der Anwender soll sein monatliches Bruttogehalt eingeben. Anschließend wird sein Steuerbetrag nach der folgenden Steuertabelle berechnet: Gehalt Steuersatz mehr als 4.000 € 26 % 2.500 bis 4.000 € 22 % weniger als 2.500 € 18 % 45 3 3.3 Programmierkurs 3.3.5 Logische Operatoren Ein Beispiel: Logische Verknüpfung Mithilfe der logischen Operatoren and, or und not können mehrere Bedingungen miteinander verknüpft werden. and 왘 Eine Bedingung, die aus einer oder mehreren Einzelbedingungen besteht, die jeweils mit dem Operator and (= und) verknüpft sind, ergibt wahr, wenn jede der Einzelbedingungen wahr ergibt. or 왘 Eine Bedingung, die aus einer oder mehreren Einzelbedingungen besteht, die mit dem Operator or (= oder) verknüpft sind, ergibt wahr, wenn mindestens eine der Einzelbedingungen wahr ergibt. x = 12 y = 15 z = 20 print("x:", x) print("y:", y) print("z:", z) not 왘 Der Operator not (= nicht) kehrt den Wahrheitswert einer Bedingung um, das heißt, eine falsche Bedingung wird wahr, eine wahre Bedingung wird falsch. Der Zusammenhang wird auch in Tabelle 3.2 bis Tabelle 3.4 gezeigt. # Bedingung 2 if y>x or y>z: print("y ist nicht die kleinste Zahl") Bedingung 2 Ergebnis wahr wahr wahr wahr falsch falsch falsch wahr falsch Listing 3.9 Datei operator_logisch.py falsch falsch falsch Die Ausgabe des Programms: Bedingung 1 Bedingung 2 Ergebnis wahr wahr wahr wahr falsch wahr falsch wahr wahr falsch falsch falsch Tabelle 3.3 Auswirkung des logischen Operators »or« Bedingung Ergebnis wahr falsch falsch wahr 3 # Bedingung 1 if x<y and x<z: print("x ist die kleinste Zahl") Bedingung 1 Tabelle 3.2 Auswirkung des logischen Operators »and« Verzweigungen # Bedingung 3 if not y<x: print("y ist nicht kleiner als x") x: 12 y: 15 z: 20 x ist die kleinste Zahl y ist nicht die kleinste Zahl y ist nicht kleiner als x Bedingung 1 ergibt wahr, wenn x kleiner als y und kleiner als z ist. Dies trifft bei den gegebenen Anfangswerten zu. Bedingung 2 ergibt wahr, wenn y größer als x oder y größer als z ist. Die erste Bedingung trifft zu, also ist die gesamte Bedingung wahr: y ist nicht die kleinste der drei Zahlen. Bedingung 3 ist wahr, wenn y nicht kleiner als x ist. Dies trifft hier zu. Zu allen Verzweigungen kann es natürlich auch einen else-Zweig geben. Mehrere Entscheidungen Tabelle 3.4 Auswirkung des logischen Operators »not« 46 47 3 3.3 Programmierkurs 3.3.7 Spiel, Version mit genauer Bewertung der Eingabe Übung u_operator Das Programm zur Berechnung des monatlich zu zahlenden Steuerbetrags soll wiederum verändert werden (Datei u_operator.py). Die Steuertabelle sieht nun wie folgt aus: 왘 anhand logischer Operatoren Steuersatz > 4.000 € ledig 26 % > 4.000 € verheiratet 22 % Das Programm wird wie folgt verändert: <= 4.000 € ledig 22 % <= 4.000 € verheiratet 18 % # Zufallsgenerator import random random.seed() Bedingungen können auch mehrere Vergleichsoperatoren enthalten. Manche Verzweigungen sind auf diese Weise verständlicher. Es folgt ein Beispiel: # Bedingung 1 if x < y < z: print("y liegt zwischen x und z") Listing 3.10 Datei operator_vergleich.py Die Ausgabe des Programms: x: 12 y: 15 z: 20 y liegt zwischen x und z Die Bedingung x < y < z entspricht dem Ausdruck x < y and y < z. In der Kurzform ist sie allerdings besser lesbar. 3 왘 mithilfe einer mehrfachen Verzweigung Familienstand x = 12 y = 15 z = 20 print("x:", x) print("y:", y) print("z:", z) 48 Nun kann die Eingabe des Benutzers in dem Kopfrechenspiel auf verschiedene Art und Weise genauer bewertet werden: Gehalt 3.3.6 Mehrere Vergleichsoperatoren Kurzform Verzweigungen 왘 anhand von Bedingungen mit mehreren Vergleichsoperatoren # Werte und Berechnung a = random.randint(1,10) b = random.randint(1,10) c = a + b print("Die Aufgabe:", a, "+", b) # Eingabe print("Bitte eine Zahl eingeben:") z = input() zahl = int(z) # Mehrfache Verzweigung, logische Operatoren # Bedingungen mit mehreren Vergleichsoperatoren if zahl == c: print(zahl, "ist richtig") elif zahl < 0 or zahl > 100: print(zahl, "ist ganz falsch") elif c-1 <= zahl <= c+1: print(zahl, "ist ganz nahe dran") else: print(zahl, "ist falsch") # Ende print("Ergebnis: ", c) Listing 3.11 Datei spiel_operator.py 49 3 3.4 Programmierkurs Eine mögliche Ausgabe des Programms wäre: Die Aufgabe: 2 + 1 Bitte eine Zahl eingeben: 4 4 ist ganz nahe dran Ergebnis: 3 or Insgesamt werden vier Möglichkeiten angeboten: über if, zweimal elif und else. Ist die Eingabe kleiner als 0 oder größer als 100, so ist sie ganz falsch. Dies wird mithilfe des logischen Operators or gelöst. Mehrere Vergleichsoperatoren Unterscheidet sich die eingegebene Zahl vom richtigen Ergebnis nur um den Wert 1, ist die Eingabe ganz nahe dran. Dies wird mit einer Bedingung ermittelt, die mehrere Vergleichsoperatoren enthält. 3.3.8 Rangfolge der Operatoren In vielen Ausdrücken treten mehrere Operatoren auf. Bisher sind dies Rechenoperatoren, Vergleichsoperatoren und logische Operatoren. Die einzelnen Teilschritte folgen der sogenannten Rangfolge der Operatoren. Die Teilschritte, bei denen höherrangige Operatoren beteiligt sind, werden zuerst ausgeführt. Höchster Rang oben Tabelle 3.5 gibt die Rangfolge der bisher verwendeten Operatoren in Python an, beginnend mit den Operatoren, die den höchsten Rang haben. Gleichrangige Operatoren stehen jeweils in einer Zeile. Teilschritte, in denen mehrere Operatoren gleichen Ranges stehen, werden von links nach rechts ausgeführt. Operator Bedeutung and logisches Und or logisches Oder 3.4 Schleifen Neben der Verzweigung gibt es eine weitere wichtige Struktur zur Steuerung von Programmen: die Schleife. Mithilfe einer Schleife ermöglichen Sie die wiederholte Ausführung eines Programmschritts. Es muss zwischen zwei Typen von Schleifen unterschieden werden: der for-Schleife und der while-Schleife. Der jeweilige Anwendungsbereich der beiden Typen wird durch folgende Merkmale definiert: Wiederholung 왘 Eine for-Schleife wird verwendet, wenn ein Programmschritt für eine regelmäßige, zum Zeitpunkt der Anwendung bekannte Folge von Werten wiederholt ausgeführt werden soll. for 왘 Eine while-Schleife wird verwendet, wenn sich erst durch Eingaben des Anwenders ergibt, ob ein Programmschritt ausgeführt werden soll und wie oft er wiederholt wird. while Eine for-Schleife wird auch als Zählschleife bezeichnet, eine while-Schleife als bedingungsgesteuerte Schleife. 3.4.1 for-Schleife Bedeutung Die Anwendung der for-Schleife verdeutlicht das folgende Beispiel: +- positives Vorzeichen einer Zahl, negatives Vorzeichen einer Zahl for i in 2, 7.5, -22: print("Zahl:", i, ", Quadrat:", i*i) * / % // Multiplikation, Division, Modulo, Ganzzahldivision Listing 3.12 Datei schleife_for.py +- Addition, Subtraktion < <= > >= == != kleiner, kleiner oder gleich, größer, größer oder gleich, gleich, ungleich logische Verneinung 3 Tabelle 3.5 Rangfolge der bisher genutzten Operatoren (Forts.) Operator not Schleifen Folgende Ausgabe wird erzeugt: Zahl: 2 , Quadrat: 4 Zahl: 7.5 , Quadrat: 56.25 Zahl: –22 , Quadrat: 484 Tabelle 3.5 Rangfolge der bisher genutzten Operatoren 50 51 3 3.4 Programmierkurs Abfolge von Zahlen Die erste Zeile ist wie folgt zu lesen: Führe die nachfolgenden eingerückten Anweisungen für jede Zahl in der Abfolge 2, 7.5 und –22 aus. Nenne diese Zahl in diesen Anweisungen i. Nach der Zahlenfolge muss, ebenso wie bei if-else, ein Doppelpunkt notiert werden. Anstelle von i können Sie auch eine andere Variable als Schleifenvariable nutzen. Die Zahlen werden zusammen mit einem kurzen Informationstext ausgegeben bzw. quadriert und ausgegeben. Hinweis Eine solche Abfolge von Objekten, die zum Beispiel in einer for-Schleife durchlaufen werden kann, nennt man auch iterierbares Objekt oder kurz Iterable. Diese Iterables werden uns in Python noch häufig begegnen. Den Vorgang des Durchlaufens nennt man auch Iterieren. 3.4.2 Schleifenabbruch mit »break« break Die Anweisung break bietet eine weitere Möglichkeit zur Steuerung von Schleifen. Sie führt zu einem unmittelbaren Abbruch einer Schleife. Sie wird sinnvollerweise mit einer Bedingung verbunden und häufig bei Sonderfällen eingesetzt. Ein Beispiel: for i in 12, -4, 20, 7: if i*i > 200: break print("Zahl:", i, ", Quadrat:", i*i) print("Ende") Listing 3.13 Datei schleife_break.py Diese Ausgabe wird erzeugt: Zahl: 12 , Quadrat: 144 Zahl: –4 , Quadrat: 16 Ende Schleife verlassen 52 Die Schleife wird unmittelbar verlassen, wenn das Quadrat der aktuellen Zahl größer als 200 ist. Die Ausgabe innerhalb der Schleife erfolgt auch nicht mehr. Das Programm wird nach der Schleife fortgesetzt. Schleifen 3.4.3 Geschachtelte Kontrollstrukturen Wie das vorherige Programm verdeutlicht, können Kontrollstrukturen (also Verzweigungen und Schleifen) auch geschachtelt werden. Dies bedeutet, dass eine Kontrollstruktur eine weitere Kontrollstruktur enthält. Diese kann ihrerseits wiederum eine Kontrollstruktur enthalten usw. Ein weiteres Beispiel: 3 for x in -2, -1, 0, 1, 2: if x > 0: print(x, "positiv") else: if x < 0: print(x, "negativ") else: print(x, "gleich 0") Listing 3.14 Datei schachtelung.py Es wird diese Ausgabe erzeugt: –2 negativ –1 negativ 0 gleich 0 1 positiv 2 positiv Zur Erläuterung: 왘 Die äußerste Kontrollstruktur ist eine for-Schleife. Alle einfach eingerückten Anweisungen werden – gemäß der Schleifensteuerung – mehrmals ausgeführt. Äußeres for 왘 Mit der äußeren if-Anweisung wird die erste Verzweigung eingeleitet. Ist x größer als 0, wird die folgende zweifach eingerückte Anweisung ausgeführt. Ist x nicht größer als 0, wird die innere if-Anweisung hinter der äußeren else-Anweisung untersucht. Äußeres if 왘 Trifft die Bedingung der inneren if-Anweisung zu, werden die folgenden dreifach eingerückten Anweisungen ausgeführt. Trifft sie nicht zu, werden die dreifach eingerückten Anweisungen ausgeführt, die der inneren else-Anweisung folgen. Inneres if Zu beachten sind besonders die mehrfachen Einrückungen, damit die Tiefe der Kontrollstruktur von Python richtig erkannt werden kann. Mehrfach einrücken 53 3 3.4 Programmierkurs Nach einem Doppelpunkt hinter dem Kopf einer Kontrollstruktur wird in der Entwicklungsumgebung IDLE automatisch mit einem Tabulatorsprung eingerückt. Dieser Sprung erzeugt standardmäßig vier Leerzeichen, dadurch werden die Kontrollstrukturen für den Entwickler klar erkennbar. Mindestens ein Leerzeichen Falls Sie mit einem anderen Editor arbeiten, müssen Sie darauf achten, dass um mindestens ein Leerzeichen eingerückt wird, damit Python die Kontrollstruktur erkennt. Sinnvoller ist eine Einrückung um zwei oder mehr Leerzeichen, damit die Struktur auch für den Entwickler gut erkennbar ist. 3.4.4 Spiel, Version mit for-Schleife und Abbruch Vier Versuche Die for-Schleife wird nun dazu genutzt, die Eingabe und die Bewertung des Kopfrechenspiels insgesamt viermal zu durchlaufen. Der Benutzer hat somit vier Versuche, das richtige Ergebnis zu ermitteln. Die Anweisung break dient zum Abbruch der Schleife, sobald der Benutzer das richtige Ergebnis eingegeben hat. # Zufallsgenerator import random random.seed() # Werte und Berechnung a = random.randint(1,10) b = random.randint(1,10) c = a + b print("Die Aufgabe:", a, "+", b) # Schleife mit for for i in 1, 2, 3, 4: # Eingabe print("Bitte eine Zahl eingeben:") z = input() zahl = int(z) # Verzweigung if zahl == c: print(zahl, "ist richtig") # Abbruch der Schleife break 54 Schleifen else: print(zahl, "ist falsch") # Ende print("Ergebnis: ", c) 3 Listing 3.15 Datei spiel_for.py Folgende Ausgabe wird erzeugt: Die Aufgabe: 7 + 9 Bitte eine Zahl eingeben: 12 12 ist falsch Bitte eine Zahl eingeben: 16 16 ist richtig Ergebnis: 16 Die Aufgabe wird einmal ermittelt und gestellt. Der Benutzer wird maximal viermal dazu aufgefordert, ein Ergebnis einzugeben. Jede seiner Eingaben wird bewertet. Ist bereits einer der ersten drei Versuche richtig, wird die Schleife vorzeitig abgebrochen. Maximal viermal 3.4.5 for-Schleife mit »range()« Meist werden Schleifen für regelmäßige Abfolgen von Zahlen genutzt. Dabei erweist sich der Einsatz der Funktion range() als sehr nützlich. Ein Beispiel: range() for i in range(3,11,2): print("Zahl:", i, "Quadrat:", i*i) Listing 3.16 Datei range_drei.py Es wird diese Ausgabe erzeugt: Zahl: 3 Quadrat: 9 Zahl: 5 Quadrat: 25 Zahl: 7 Quadrat: 49 Zahl: 9 Quadrat: 81 55 3 3.4 Programmierkurs Ganze Zahlen Der englische Begriff range bedeutet »Bereich«. Innerhalb der Klammern hinter range können bis zu drei ganze Zahlen, durch Kommata getrennt, eingetragen werden: Beginn 왘 Die erste ganze Zahl (hier 3) gibt den Beginn des Bereichs an, für den die folgenden Anweisungen ausgeführt werden. Ende 왘 Die zweite ganze Zahl (hier 11) kennzeichnet das Ende des Bereichs. Es ist die erste Zahl, für die die Anweisungen nicht mehr ausgeführt werden. Schrittweite 왘 Die dritte ganze Zahl (hier 2) gibt die Schrittweite für die Schleife an. Die Zahlen, für die die Anweisungen ausgeführt werden, stehen zueinander also jeweils im Abstand von +2. Der Aufruf der Funktion range() mit den Zahlen 3, 11 und 2 ergibt somit die Abfolge: 3, 5, 7, 9. Schrittweite 1 Zahl: 0 Zahl: 1 Zahl: 2 Bei der Funktion range() können eine oder mehrere der drei Zahlen auch negativ sein. Achten Sie auf sinnvolle Zahlenkombinationen. Die Angabe range(3,-11,2) ist nicht sinnvoll, da man von der Zahl +3 in Schritten von +2 nicht zur Zahl –11 gelangt. Python fängt solche Schleifen ab und lässt sie nicht ausführen. Dasselbe gilt für die Zahlenkombination range(3,11,-2). for i in range(5,9): print("Zahl:", i) # 1. Version for x in range(18,22): print(x/10) print() Zahl: 5 Zahl: 6 Zahl: 7 Zahl: 8 Wird die Funktion range() sogar nur mit einer Zahl aufgerufen, so wird diese Zahl einfach als die obere Grenze angesehen. Als untere Grenze gilt 0. Außerdem wird wiederum eine Schrittweite von 1 angenommen. Ein Beispiel: for i in range(3): print("Zahl:", i) 3 Hinweis Für den regelmäßigen Ablauf von Zahlen mit Nachkommastellen muss die Schleifenvariable passend umgerechnet werden. Ein Beispiel: Es wird folgende Ausgabe erzeugt: Beginn bei 0 Die Ausgabe: Wird die Funktion range() nur mit zwei Zahlen aufgerufen, so wird eine Schrittweite von 1 angenommen. Ein Beispiel: Listing 3.17 Datei range_zwei.py Schleifen Sinnvolle Kombinationen Keine ganze Zahl # 2. Version x = 1.8 for i in range(4): print(x) x = x + 0.1 Listing 3.19 Datei range_nachkomma.py Die Ausgabe lautet: 1.8 1.9 2.0 2.1 Listing 3.18 Datei range_eins.py 1.8 1.9000000000000001 2.0 2.1 56 57 3 3.4 Programmierkurs Es werden jeweils die Zahlen von 1,8 bis 2,1 in Schritten von 0,1 erzeugt. 3.4.6 Spiel, Version mit »range()« 왘 In der ersten Version werden die ganzen Zahlen von 18 bis 21 erzeugt und anschließend durch 10 geteilt. Im Kopfrechenspiel wird die Schleife zur Wiederholung der Eingabe nun mithilfe von range() gebildet. Gleichzeitig haben Sie damit einen Zähler, der die laufende Nummer des Versuchs enthält. Sie können ihn verwenden, um dem Benutzer die Anzahl der Versuche mitzuteilen. 왘 In der zweiten Version wird mit dem ersten Wert begonnen und innerhalb der Schleife jeweils um 0,1 erhöht. Dabei müssen Sie vorher errechnen, wie häufig die Schleife durchlaufen werden muss. Übung u_range Schleife erkennen Ermitteln Sie durch Überlegen (nicht durch einen einfachen Aufruf) die Ausgabe des folgenden Programms (Datei u_range.py). print("Schleife 1") for i in 2, 3, 6.5, –7: print(i) print("Schleife 2") for i in range(3,11,3): print(i) print("Schleife 3") for i in range(-3,14,4): print(i) print("Schleife 4") for i in range(3,-11,-3): print(i) Übung u_range_inch Schreiben Sie ein Programm, das die folgende Ausgabe erzeugt (Datei u_ range_inch.py). 15 Inch = 38.1 cm 20 Inch = 50.8 cm 25 Inch = 63.5 cm 30 Inch = 76.2 cm 35 Inch = 88.9 cm 40 Inch = 101.6 cm Es handelt sich um eine regelmäßige Liste von Inch-Werten, für die der jeweilige Zentimeter-Wert durch Umrechnung mit dem Faktor 2,54 ermittelt wird. Es ist keine Eingabe durch den Anwender notwendig. 58 Schleifen Mit Zähler 3 # Zufallsgenerator import random random.seed() # Werte und Berechnung a = random.randint(1,10) b = random.randint(1,10) c = a + b print("Die Aufgabe:", a, "+", b) # Schleife mit range for versuch in range(1,10): # Eingabe print("Bitte eine Zahl eingeben:") z = input() zahl = int(z) # Verzweigung if zahl == c: print(zahl, "ist richtig") # Abbruch der Schleife break else: print(zahl, "ist falsch") # Anzahl ausgeben print("Ergebnis: ", c) print("Anzahl Versuche:", versuch) Listing 3.20 Datei spiel_range.py Die Ausgabe lautet: Die Aufgabe: 10 + 5 Bitte eine Zahl eingeben: 59 3 3.4 Programmierkurs 13 13 ist falsch Bitte eine Zahl eingeben: 15 15 ist richtig Ergebnis: 15 Anzahl Versuche: 2 Zähler Der Benutzer hat maximal neun Versuche: range(1,10). Die Variable versuch dient als Zähler für die Versuche. Nach Eingabe der richtigen Lösung (oder nach vollständigem Durchlauf der Schleife) wird dem Benutzer die Anzahl der Versuche mitgeteilt. 3.4.7 while-Schleife Bedingte Schleife Die while-Schleife dient zur Steuerung einer Wiederholung mithilfe einer Bedingung. Im folgenden Programm werden zufällige Zahlen addiert und ausgegeben. Solange die Summe der Zahlen kleiner als 30 ist, wird der Vorgang wiederholt. Ist die Summe gleich oder größer als 30, wird das Programm beendet. # Zufallsgenerator import random random.seed() Zahl: 5 Zwischensumme: 16 Zahl: 8 Zwischensumme: 24 Zahl: 7 Zwischensumme: 31 Ende Die while-Anweisung leitet die Schleife ein. Die wörtliche Übersetzung der Zeile lautet: solange die Summe kleiner als 30 ist. Dies bezieht sich auf die nachfolgenden eingerückten Anweisungen. Einrücken Nach dem Wort while folgt (wie bei einer if-Anweisung) eine Bedingung, die mithilfe von Vergleichsoperatoren erstellt wird. Auch hier dürfen Sie den Doppelpunkt am Ende der Zeile nicht vergessen, ähnlich wie bei ifelse und for. Doppelpunkt Es wird eine zufällige Zahl ermittelt und zur bisherigen Summe addiert. Die neue Summe errechnet sich also aus der alten Summe plus der eingegebenen Zahl. Die neue Summe wird ausgegeben. Summierung Die Anweisung zur Ausgabe des Texts »Ende« wird erst erreicht, wenn die Summe den Wert 30 erreicht oder überschritten hat. Ende der Schleife 3.4.8 Spiel, Version mit while-Schleife und Zähler # Initialisierung summe = 0 # while-Schleife while summe < 30: zzahl = random.randint(1,8) summe = summe + zzahl print("Zahl:", zzahl, "Zwischensumme:", summe) # Zufallsgenerator import random random.seed() Listing 3.21 Datei schleife_while.py 3 Zunächst wird die Variable für die Summe der Zahlen auf 0 gesetzt. Die while-Schleife wird nun auch im Kopfrechenspiel zur Wiederholung der Eingabe genutzt. Der Benutzer hat beliebig viele Versuche, die Aufgabe zu lösen. Die Variable versuch, die als Zähler für die Versuche dient, muss separat gesteuert werden. Sie ist nicht mehr automatisch eine Schleifenvariable. print("Ende") Schleifen Solange Eingabe falsch # Werte und Berechnung a = random.randint(1,10) b = random.randint(1,10) c = a + b print("Die Aufgabe:", a, "+", b) Eine mögliche Ausgabe des Programms sähe wie folgt aus: Zahl: 3 Zwischensumme: 3 Zahl: 8 Zwischensumme: 11 60 # Schleife initialisieren zahl = c + 1 61 3 3.5 Programmierkurs # Anzahl initialisieren versuch = 0 # Schleife mit while while zahl != c: # Anzahl Versuche versuch = versuch + 1 # Eingabe mit Umwandlung print("Bitte eine Zahl eingeben:") z = input() zahl = int(z) # Verzweigung if zahl == c: print(zahl, "ist richtig") else: print(zahl, "ist falsch") # Anzahl ausgeben print("Ergebnis: ", c) print("Anzahl Versuche:", versuch) Listing 3.22 Datei spiel_while.py Die Ausgabe hat sich nicht geändert. Anzahl der Versuche Der Benutzer hat beliebig viele Versuche. Die while-Schleife läuft, solange die richtige Lösung nicht ermittelt wird. Die Variable zahl wird mit einem Wert vorbesetzt, der dafür sorgt, dass die while-Schleife mindestens einmal läuft. Die Variable versuch wird mit 0 vorbesetzt und dient als laufende Nummer. Nach Eingabe der richtigen Lösung wird dem Benutzer die Anzahl der Versuche mitgeteilt. Übung u_while Ende mit 0 62 Schreiben Sie ein Programm (Datei u_while.py), das den Anwender wiederholt dazu auffordert, einen Wert in Inch einzugeben. Der eingegebene Wert soll anschließend in Zentimeter umgerechnet und ausgegeben werden. Das Programm soll nach der Eingabe des Werts 0 beendet werden. Entwicklung eines Programms Bei einer while-Schleife wird immer angegeben, gemäß welcher Bedingung wiederholt werden soll, und nicht, gemäß welcher Bedingung beendet werden soll. Daher müssen Sie in diesem Programm formulieren: Solange die Eingabe ungleich 0 ist. 3 3.5 Entwicklung eines Programms Bei der Entwicklung Ihrer eigenen Programme sollten Sie Schritt für Schritt vorgehen. Stellen Sie zuerst einige Überlegungen dazu an, wie das gesamte Programm aufgebaut sein sollte, und zwar auf Papier. Aus welchen Teilen sollte es nacheinander bestehen? Versuchen Sie anschließend nicht, das gesamte Programm mit all seinen komplexen Bestandteilen auf einmal zu schreiben! Dies ist der größte Fehler, den Einsteiger (und manchmal auch Fortgeschrittene) machen können. Teile eines Programms Schreiben Sie zunächst eine einfache Version des ersten Programmteils. Anschließend testen Sie sie. Erst nach einem erfolgreichen Test fügen Sie den folgenden Programmteil hinzu. Nach jeder Änderung testen Sie wiederum. Sollte sich ein Fehler zeigen, wissen Sie, dass er aufgrund der letzten Änderung aufgetreten ist. Nach dem letzten Hinzufügen haben Sie eine einfache Version Ihres gesamten Programms erstellt. Einfache Version Nun ändern Sie einen Teil Ihres Programms in eine komplexere Version ab. Auf diese Weise machen Sie Ihr Programm Schritt für Schritt komplexer, bis Sie schließlich das gesamte Programm so erstellt haben, wie es Ihren anfänglichen Überlegungen auf Papier entspricht. Komplexe Version Manchmal ergibt sich während der praktischen Programmierung noch die eine oder andere Änderung gegenüber Ihrem Entwurf. Das ist kein Problem, solange sich nicht der gesamte Aufbau ändert. Sollte dies allerdings der Fall sein, kehren Sie noch einmal kurz zum Papier zurück und überdenken den Aufbau. Das bedeutet nicht, dass Sie die bisherigen Programmzeilen löschen müssen, sondern möglicherweise nur ein wenig ändern und anders anordnen. Änderungen Schreiben Sie Ihre Programme übersichtlich. Falls Sie gerade überlegen, wie Sie drei, vier bestimmte Schritte Ihres Programms auf einmal machen können: Machen Sie daraus einfach einzelne Anweisungen, die der Reihe nach ausgeführt werden. Dies vereinfacht eine eventuelle Fehlersuche. Einzelne Schritte 63 3 3.6 Programmierkurs Wenn Sie (oder eine andere Person) Ihr Programm später einmal ändern oder erweitern möchten, gelingt der Einstieg in den Aufbau des Programms wesentlich schneller. Kontrolle Sie können die Funktion print() zur Kontrolle von Werten und zur Suche von logischen Fehlern einsetzen. Zusätzlich können Sie einzelne Zeilen Ihres Programms als Kommentar kennzeichnen, um festzustellen, welcher Teil des Programms fehlerfrei läuft und welcher Teil demnach fehlerbehaftet ist. 3.6 Fehler und Ausnahmen Fehler Macht der Anwender nach einer Eingabeaufforderung eine falsche Eingabe (gibt er zum Beispiel keine Zahl, sondern einen Text ein), wird das Programm mit einer Fehlermeldung beendet. Bisher gehe ich vereinfacht davon aus, dass der Anwender korrekte Eingaben vornimmt. In diesem Abschnitt beschreibe ich, wie Sie Fehler vermeiden oder abfangen. Fehler und Ausnahmen Gibt der Anwender eine Zahl (zum Beispiel 12) ein, läuft das Programm fehlerfrei bis zum Ende und erzeugt die folgende Ausgabe: Richtige Eingabe Bitte geben Sie eine ganze Zahl ein 12 Sie haben die ganze Zahl 12 richtig eingegeben Ende des Programms Macht der Anwender jedoch eine falsche Eingabe (zum Beispiel 3a), bricht das Programm vorzeitig ab und erzeugt die folgende Ausgabe: 3 Falsche Eingabe Bitte geben Sie eine ganze Zahl ein 3a Traceback (most recent call last): File "C:\Python36\Beispiele\fehler_basis.py", line 6, in <module> zahl = int(z) ValueError: invalid literal for int() with base 10: '3a' Diese Informationen weisen auf die Stelle im Programm hin, an der der Fehler bemerkt wird (Datei fehler_basis.py, Zeile 6). Außerdem wird die Art des Fehlers mitgeteilt (ValueError). Fehlerstelle 3.6.1 Basisprogramm Abbruch möglich Durch das Abfangen von falschen Eingaben wird die Benutzung eines Programms für den Anwender deutlich komfortabler. Im folgenden Programm soll eine ganze Zahl eingegeben werden. Da der Benutzer dieses Programm durch die Eingabe von Text oder Sonderzeichen zum Abbruch bringen kann, wird es immer weiter verbessert. 3.6.2 Fehler abfangen Zunächst soll eine Fehleingabe abgefangen werden, um einen Abbruch des Programms zu vermeiden. Zu diesem Zweck müssen Sie die Stelle herausfinden, an der eine Fehleingabe auftreten kann. Hier müssen Sie das Programm verbessern. Verbessern # Eingabe print("Bitte geben Sie eine ganze Zahl ein") z = input() Das Programm soll zukünftig an dieser Stelle alle Arten von Fehlern abfangen, die Python automatisch erkennen kann. Dies erreichen Sie in einem ersten Schritt durch die folgende Änderung: Fehler abfangen # Umwandlung zahl = int(z) # Eingabe print("Bitte geben Sie eine ganze Zahl ein") z = input() # Ausgabe print("Sie haben die ganze Zahl", zahl, "richtig eingegeben") print("Ende des Programms") Listing 3.23 Datei fehler_basis.py 64 # Versuch der Umwandlung try: zahl = int(z) print("Sie haben die ganze Zahl", zahl, "richtig eingegeben") 65 3 3.6 Programmierkurs # Fehler bei Umwandlung except: print("Sie haben die ganze Zahl nicht richtig eingegeben") print("Ende des Programms") Listing 3.24 Datei fehler_abfangen.py Kein Abbruch mehr Wenn der Anwender eine richtige ganze Zahl eingibt, läuft das Programm wie bisher. Bei einer falschen Eingabe erscheint nun eine entsprechende Meldung. Das Programm bricht jedoch nicht ab, sondern läuft bis zum Ende. Bitte geben Sie eine ganze Zahl ein 3a Sie haben die ganze Zahl nicht richtig eingegeben Ende des Programms try Die Anweisung try leitet eine Ausnahmebehandlung ein. Ähnlich wie bei der if-Anweisung gibt es verschiedene Zweige, die das Programm durchlaufen kann. Das Programm versucht (englisch: try), die Anweisungen durchzuführen, die eingerückt nach try stehen. Falls die Eingabe erfolgreich ist, wird der except-Zweig nicht ausgeführt, ähnlich wie beim elseZweig der if-Anweisung. except Ist die Eingabe dagegen nicht erfolgreich und handelt es sich um einen Fehler, wird der Fehler oder die Ausnahme (englisch: exception) mit der Anweisung except abgefangen. In diesem Fall werden alle eingerückten Anweisungen im except-Zweig durchgeführt. Das Programm läuft ohne Abbruch zu Ende, da der Fehler zwar auftritt, aber abgefangen wird. Nach try und except muss jeweils ein Doppelpunkt gesetzt werden, wie bei if-else, for oder while. Hinweise Kritische Zeile 66 Nur die kritische Zeile wird in die Ausnahmebehandlung eingebettet. Sie sollten sich also Gedanken darüber machen, welche Stellen Ihres Programms fehlerträchtig sind. Eine Eingabeaufforderung ist solch eine kritische Stelle. Andere Fehlermöglichkeiten sind zum Beispiel die Bearbeitung einer Datei (die möglicherweise nicht existiert) oder die Ausgabe an einen Drucker (der vielleicht nicht eingeschaltet ist). Fehler und Ausnahmen 3.6.3 Eingabe wiederholen In einem zweiten Schritt wird dafür gesorgt, dass der Anwender nach einer falschen Eingabe eine erneute Eingabe machen kann. Der gesamte Eingabevorgang mit Ausnahmebehandlung wird so lange wiederholt, bis sie erfolgreich war. Betrachten Sie das folgende Programm: Erneute Eingabe 3 # Initialisierung der while-Schleife fehler = 1 # Schleife bei falscher Eingabe while fehler == 1: # Eingabe print("Bitte geben Sie eine ganze Zahl ein") z = input() # Versuch der Umwandlung try: zahl = int(z) print("Sie haben die ganze Zahl", zahl, "richtig eingegeben") fehler = 0 # Fehler bei Umwandlung except: print("Sie haben die ganze Zahl nicht" " richtig eingegeben") print("Ende des Programms") Listing 3.25 Datei fehler_eingabe_neu.py Hinweis Beachten Sie die doppelte Einrückung: einmal nach while und noch einmal nach try-except. Nachfolgend wird eine mögliche Eingabe gezeigt – zunächst mit einem Fehler, anschließend fehlerfrei: Bitte geben Sie eine ganze Zahl ein 3a Sie haben die ganze Zahl nicht richtig eingegeben 67 3 3.6 Programmierkurs Bitte geben Sie eine ganze Zahl ein 12 Sie haben die ganze Zahl 12 richtig eingegeben Ende des Programms Eingabe wiederholen Die Variable fehler ist notwendig, um die Eingabe gegebenenfalls wiederholen zu können. Sie wird zunächst auf den Wert 1 gesetzt. Es wird eine while-Schleife formuliert, in der der Eingabevorgang mit der Ausnahmebehandlung eingebettet ist. Die Schleife wird wiederholt, solange die Variable fehler den Wert 1 hat. Eingabe erfolgreich? Ist die Eingabe erfolgreich, wird die Variable fehler auf 0 gesetzt. Das führt dazu, dass die Schleife beendet wird und das Programm regulär fortfahren kann. Ist die Eingabe nicht erfolgreich, hat fehler nach wie vor den Wert 1: Der Eingabevorgang wird wiederholt. Fehler und Ausnahmen Die Ausgabe dieses Programms ist: Zahl: 1 Quadrat: 1 Zahl: 2 Quadrat: 4 Zahl: 3 Zahl: 4 Zahl: 5 Zahl: 6 Quadrat: 36 Die Schleife durchläuft alle Zahlen von 1 bis 6. Alle diese Zahlen werden auch ausgegeben. Liegt die aktuelle Zahl zwischen 3 und 5, wird der Rest der Schleife übergangen und unmittelbar der nächste Schleifendurchlauf begonnen. Anderenfalls wird das Quadrat der Zahl ausgegeben. 3 Rest übergehen Übung u_fehler Verbessern Sie das Programm zur Eingabe und Umrechnung eines beliebigen Inch-Werts in Zentimeter. Eingabefehler des Anwenders sollen abgefangen werden. Das Programm soll den Anwender so lange zur Eingabe auffordern, bis sie erfolgreich war (Datei u_ fehler.py). 3.6.4 Exkurs: Schleifenfortsetzung mit »continue« break continue An dieser Stelle möchte ich auf ein Thema zurückkommen, das bereits in Abschnitt 3.4, »Schleifen«, behandelt wurde. Sie kennen aus diesem Abschnitt die Anweisung break, die zum unmittelbaren Abbruch einer Schleife führt. Die Anweisung continue dient zum unmittelbaren Abbruch des aktuellen Durchlaufs einer Schleife. Die Schleife wird anschließend mit dem nächsten Durchlauf fortgesetzt. Betrachten Sie hierzu das folgende Programm: for i in range (1,7): print("Zahl:", i) if 3 <= i <= 5: continue print("Quadrat:", i*i) Listing 3.26 Datei schleife_continue.py 68 3.6.5 Spiel, Version mit Ausnahmebehandlung Die Ausnahmebehandlung und die Anweisung continue werden nun auch im Kopfrechenspiel eingesetzt. Damit kann ein Eingabefehler abgefangen und das Programm regulär fortgesetzt werden. Fehler abfangen # Zufallsgenerator import random random.seed() # Werte und Berechnung a = random.randint(1,10) b = random.randint(1,10) c = a + b print("Die Aufgabe:", a, "+", b) # Schleife und Anzahl initialisieren zahl = c + 1 versuch = 0 # Schleife mit while while zahl != c: # Anzahl Versuche versuch = versuch + 1 69 3 3.7 Programmierkurs # Eingabe print("Bitte eine ganze Zahl eingeben:") z = input() Funktionen und Module entsprechende Meldung. Der Rest der Schleife wird übergangen, und die nächste Eingabe wird unmittelbar angefordert. 3 # Versuch einer Umwandlung try: zahl = int(z) except: # Falls Umwandlung nicht erfolgreich print("Sie haben keine ganze Zahl eingegeben") # Schleife unmittelbar fortsetzen continue # Verzweigung if zahl == c: print(zahl, "ist richtig") else: print(zahl, "ist falsch") # Anzahl Versuche print("Ergebnis: ", c) print("Anzahl Versuche:", versuch) Listing 3.27 Datei spiel_ausnahme.py Es wird die folgende Ausgabe erzeugt: Die Aufgabe: 8 + 3 Bitte eine ganze Zahl eingeben: 12 12 ist falsch Bitte eine ganze Zahl eingeben: 11a Sie haben keine ganze Zahl eingegeben Bitte eine ganze Zahl eingeben: 11 11 ist richtig Ergebnis: 11 Anzahl Versuche: 3 Falsche Eingabe 70 Die Umwandlung der Eingabe steht in einem try-except-Block. Falls die Umwandlung aufgrund einer falschen Eingabe nicht gelingt, erscheint eine 3.7 Funktionen und Module Die Modularisierung, also die Zerlegung eines Programms in selbst geschriebene Funktionen, bietet besonders bei größeren Programmen unübersehbare Vorteile: Modularisierung 왘 Programmteile, die mehrmals benötigt werden, müssen nur einmal definiert werden. Mehrfach verwenden 왘 Nützliche Programmteile können in mehreren Programmen verwendet werden. 왘 Umfangreiche Programme können in übersichtliche Teile zerlegt werden. Übersichtlicher 왘 Pflege und Wartung von Programmen werden erleichtert. 왘 Der Programmcode ist für den Programmierer selbst (zu einem späteren Zeitpunkt) und für andere Programmierer leichter zu verstehen. Verständlicher Neben den selbst geschriebenen Funktionen gibt es in Python, wie in jeder anderen Programmiersprache auch, zahlreiche vordefinierte Funktionen, die dem Entwickler viel Arbeit abnehmen können. Diese Funktionen sind entweder fest eingebaut oder über die Einbindung spezieller Module verfügbar. Vordefinierte Funktionen Als Beispiel für eine fest eingebaute Funktion wird bereits input() eingesetzt. Jede Funktion hat eine spezielle Aufgabe. So hält beispielsweise die Funktion input() das Programm an und nimmt eine Eingabe entgegen. Aufgabe einer Funktion Wie viele (aber nicht alle) Funktionen hat input() einen sogenannten Rückgabewert, liefert also ein Ergebnis an die Stelle des Programms zurück, von der sie aufgerufen wird: die eingegebene Zeichenkette. Rückgabewert Es folgen zwei Hinweise für fortgeschrittene Leser, die bereits mit einer anderen Programmiersprache gearbeitet haben: 왘 Funktionen können in Python nicht überladen werden. Falls Sie eine Funktion mehrfach definieren, gegebenenfalls mit unterschiedlichen Parametern, so gilt nur die jeweils letzte Definition. Nicht überladen 왘 Seit Python 3.5 können Sie angeben, welchen Datentyp der Rückgabewert einer Funktion haben soll. Allerdings haben diese Typhinweise Typhinweise 71 3 3.7 Programmierkurs (englisch: type hints), auch Annotationen genannt, bisher nur provisorischen Charakter. Ihre Regeln können sich noch ändern und sind nicht bindend. Daher werden sie in diesem Buch nicht weiter erläutert. 3.7.1 Einfache Funktionen Immer gleich Einfache Funktionen führen bei Aufruf stets die gleiche Aktion aus. Im folgenden Beispiel führt jeder Aufruf der Funktion stern() dazu, dass eine optische Trennung auf dem Bildschirm ausgegeben wird: # Definition der Funktion def stern(): print("-----------------") print("*** Trennung ****") print("-----------------") # Hauptprogramm x = 12 y = 5 stern() print("x =", x, ", y =", y) stern() print("x + y =", x + y) stern() print("x - y =", x - y) stern() # 1. Aufruf # 2. Aufruf # 3. Aufruf # 4. Aufruf Listing 3.28 Datei funktion_einfach.py Funktionen und Module x–y=7 ---------------------*** Trennung **** ---------------------- 3 Im oberen Teil des Programms wird die Funktion stern() definiert. Nach der Anweisung def folgt der Name der Funktion (hier stern), anschließend folgen runde Klammern und der bereits bekannte Doppelpunkt. Innerhalb der Klammern könnten Werte an die Funktion übergeben werden. Dazu mehr in Abschnitt 3.7.2 und in Abschnitt 3.7.3. Die nachfolgenden eingerückten Anweisungen werden jedes Mal durchgeführt, wenn die Funktion aufgerufen wird. Definition mit def Eine Funktion wird zunächst nur definiert und nicht durchgeführt. Sie steht sozusagen zum späteren Gebrauch bereit. Im unteren Teil der Datei beginnt das eigentliche Programm. Es werden einige Rechenoperationen mit zwei Variablen durchgeführt. Mithilfe der Funktion stern() werden die Ausgabezeilen optisch voneinander getrennt. Sie wird insgesamt viermal aufgerufen. Nach Bearbeitung der Funktion fährt das Programm jedes Mal mit der Anweisung fort, die dem Aufruf der Funktion folgt. Aufruf Eine Funktion wird aufgerufen, indem Sie ihren Namen, gefolgt von runden Klammern, notieren. Falls Sie Informationen an die Funktion übergeben möchten, notieren Sie sie innerhalb der runden Klammern. Klammern Den Namen einer Funktion können Sie weitgehend frei wählen – es gelten die gleichen Regeln wie bei den Namen von Variablen, siehe auch Abschnitt 2.1.5: Der Name kann aus den Buchstaben a bis z, A bis Z, aus Ziffern und dem Zeichen _ (Unterstrich) bestehen. Er darf nicht mit einer Ziffer beginnen und keinem reservierten Wort in Python entsprechen. Name Folgende Ausgabe wird erzeugt: ---------------------*** Trennung **** ---------------------x = 12 , y = 5 ---------------------*** Trennung **** ---------------------x + y = 17 ---------------------*** Trennung **** ---------------------- 72 3.7.2 Funktionen mit einem Parameter Bei einem Aufruf können auch Informationen an Funktionen übermittelt werden, sogenannte Parameter. Diese Informationen können innerhalb der Funktion ausgewertet werden und führen gegebenenfalls bei jedem Aufruf zu unterschiedlichen Ergebnissen. Ein Beispiel: Parameter # Definition der Funktion def quadrat(x): q = x*x print("Zahl:", x, "Quadrat:", q) 73 3 3.7 Programmierkurs # Hauptprogramm quadrat(4.5) a = 3 quadrat(a) quadrat(2*a) Listing 3.29 Datei parameter.py Die Ausgabe lautet: Zahl: 4.5 Quadrat: 20.25 Zahl: 3 Quadrat: 9 Zahl: 6 Quadrat: 36 Wertübermittlung Die Definition der Funktion quadrat() enthält eine Variable innerhalb der Klammern. Beim Aufruf wird ein Wert an die Funktion übermittelt und dieser Variablen zugewiesen. Hier sind das die folgenden Werte: 왘 Die Zahl 4,5 – die Variable x erhält in der Funktion den Wert 4.5. 3.7.3 Funktionen mit mehreren Parametern Eine Funktion kann noch vielseitiger werden, wenn Sie ihr mehrere Parameter übermitteln. Dabei ist auf die übereinstimmende Anzahl und die richtige Reihenfolge der Parameter zu achten. Ein Beispiel: Listing 3.30 Datei parameter_mehrere.py Die Ausgabe lautet: 왘 Das Ergebnis einer Berechnung – die Variable x erhält in der Funktion den aktuellen Wert von 2 * a, also 6. Es werden genau drei Parameter erwartet, bei beiden Aufrufen werden auch drei Werte übermittelt. Wie Sie am Ergebnis erkennen, ist die Reihenfolge der Parameter wichtig. Übung u_parameter Es soll wiederum der Steuerbetrag für verschiedene Bruttogehälter berechnet werden (Datei u_parameter.py). Liegt das Gehalt über 2.500 €, sind 22 % Steuern zu zahlen, ansonsten 18 %. Die Berechnung und die Ausgabe des Steuerbetrags sollen diesmal innerhalb einer Funktion mit dem Namen steuer() stattfinden. Die Funktion soll für die folgenden Gehälter aufgerufen werden: 1.800 €, 2.200 €, 2.500 €, 2.900 €. 3 # Hauptprogramm berechnung(2,3,5) berechnung(5,2,3) Ergebnis: 25 Ergebnis: 21 Die Funktion erwartet genau einen Wert. Sie darf also nicht ohne einen Wert oder mit mehr als einem Wert aufgerufen werden, sonst bricht das Programm mit einer Fehlermeldung ab. Anzahl, Reihenfolge # Definition der Funktion def berechnung(x,y,z): ergebnis = (x+y) * z print("Ergebnis:", ergebnis) 왘 Die Variable a – die Variable x erhält in der Funktion den aktuellen Wert von a, nämlich 3. Hinweis Anzahl der Werte Funktionen und Module Reihenfolge 왘 Beim ersten Aufruf erhält x den Wert 2, y den Wert 3 und z den Wert 5. Dies ergibt die Rechnung: (2 + 3) * 5 = 25. 왘 Beim zweiten Aufruf werden dieselben Zahlen übergeben, aber in anderer Reihenfolge. Es ergibt sich die Rechnung: (5 + 2) * 3 = 21. 3.7.4 Funktionen mit Rückgabewert Funktionen werden häufig zur Berechnung von Ergebnissen eingesetzt. Zu diesem Zweck können Funktionen ihre Ergebnisse als sogenannte Rückgabewerte zurückliefern. Ergebnis Im Unterschied zu vielen anderen Programmiersprachen können Funktionen in Python mehr als einen Rückgabewert liefern. In diesem Abschnitt werden aber zunächst nur Funktionen betrachtet werden, die genau einen Rückgabewert zur Verfügung stellen. Rückgabewert Im folgenden Beispiel wird eine Funktion, die einen Rückgabewert liefert, auf verschiedene Arten vom Hauptprogramm aus aufgerufen. 74 75 3 3.7 Programmierkurs # Definition der Funktion def mittelwert(x,y): ergebnis = (x+y) / 2 return ergebnis # Hauptprogramm c = mittelwert(3, 9) print("Mittelwert:", c) x = 5 print("Mittelwert:", mittelwert(x,4)) Listing 3.31 Datei rueckgabewert.py Diese Ausgabe wird erzeugt: print("Die Aufgabe:", a, "+", b) return erg # Kommentar def kommentar(eingabezahl, ergebnis): if eingabezahl == ergebnis: print(eingabezahl, "ist richtig") else: print(eingabezahl, "ist falsch") # Aufgabe c = aufgabe() return Innerhalb der Funktion wird zunächst das Ergebnis berechnet. Es wird anschließend mithilfe der Anweisung return an die aufrufende Stelle zurückgeliefert. Die Anweisung return beendet außerdem unmittelbar den Ablauf der Funktion. # Schleife und Anzahl initialisieren zahl = c + 1 versuch = 0 Rückgabe speichern Beim ersten Aufruf wird der Rückgabewert in der Variablen c zwischengespeichert. Er kann im weiteren Verlauf des Programms an beliebiger Stelle verwendet werden. Rückgabe ausgeben Beim zweiten Aufruf geschehen zwei Dinge gleichzeitig: Die Funktion mittelwert() wird aufgerufen und liefert ein Ergebnis. Außerdem wird dieses Ergebnis unmittelbar ausgegeben. # Schleife mit while while zahl != c: # Anzahl Versuche versuch = versuch + 1 Mit Funktionen Das Programm mit dem Kopfrechenspiel umfasst nun zwei Funktionen; die erste Funktion dient zur Ermittlung der Aufgabe, die zweite zur Bewertung der Eingabe: # Aufgabe def aufgabe(): a = random.randint(1,10) b = random.randint(1,10) erg = a + b 76 3 # Zufallsgenerator import random random.seed() Mittelwert: 6.0 Mittelwert: 4.5 3.7.5 Spiel, Version mit Funktionen Funktionen und Module # Eingabe print("Bitte eine Zahl eingeben:") z = input() # Versuch einer Umwandlung try: zahl = int(z) except: # Falls Umwandlung nicht erfolgreich print("Sie haben keine Zahl eingegeben") # Schleife unmittelbar fortsetzen continue # Kommentar kommentar(zahl,c) 77 3 3.8 Das fertige Spiel Programmierkurs # Anzahl Versuche print("Ergebnis: ", c) print("Anzahl Versuche:", versuch) Die einzelnen Abschnitte des Programms sind nummeriert. Diese Nummern finden sich in der Erläuterung wieder. In späteren Kapiteln kommen weitere Ergänzungen hinzu. Es folgt das Programm: Listing 3.32 Datei spiel_funktion.py # 1: Zufallsgenerator import random random.seed() Die Ausgabe hat sich nicht geändert. aufgabe() kommentar() In der Funktion aufgabe() werden die beiden Zufallszahlen ermittelt, und die Aufgabe wird auf dem Bildschirm ausgegeben. Außerdem wird das Ergebnis der Aufgabe als Rückgabewert an das Hauptprogramm zurückgeliefert. Der Funktion kommentar() werden zwei Zahlen als Parameter übermittelt: die Lösung des Anwenders und das richtige Ergebnis. Innerhalb der Funktion wird die eingegebene Lösung untersucht, und ein entsprechender Kommentar wird ausgegeben. Die Funktion hat keinen Rückgabewert. Übung u_rueckgabewert Schreiben Sie das Programm aus Übung u_parameter um. Der Steuerbetrag soll innerhalb der Funktion steuer() berechnet und an das Hauptprogramm zurückgeliefert werden. Die Ausgabe des Werts soll im Hauptprogramm stattfinden (Datei u_rueckgabewert.py). 3 # 2: Anzahl Aufgaben anzahl = -1 while anzahl<0 or anzahl>10: try: print("Wie viele Aufgaben (1 bis 10):") anzahl = int(input()) except: continue # 3: Anzahl richtige Ergebnisse richtig = 0 # 4: Schleife mit "anzahl" Aufgaben for aufgabe in range(1,anzahl+1): # 5: Operatorauswahl opzahl = random.randint(1,4) 3.8 Das fertige Spiel Erweiterungen Zum Abschluss des Programmierkurses erweitern wir das Kopfrechenspiel noch etwas – dabei nutzen wir die Programmiermittel, die Ihnen inzwischen zur Verfügung stehen. Die Erweiterungen: 왘 Es werden bis zu zehn Aufgaben nacheinander gestellt. Der Benutzer kann dabei die Anzahl selbst bestimmen. 왘 Zusätzlich zur Addition kommen die weiteren Grundrechenarten zum Einsatz: Subtraktion, Multiplikation und Division. 왘 Die Bereiche, aus denen die zufälligen Zahlen gewählt werden, hängen von der Rechenart ab. Bei der Multiplikation wird zum Beispiel mit kleineren Zahlen gerechnet als bei der Addition. 왘 Der Benutzer hat maximal drei Versuche pro Aufgabe. 왘 Die Anzahl der richtig gelösten Aufgaben wird ermittelt. 78 # 6: Operandenauswahl if(opzahl == 1): a = random.randint(-10,30) b = random.randint(-10,30) op = "+" c = a + b elif(opzahl == 2): a = random.randint(1,30) b = random.randint(1,30) op = "-" c = a - b elif(opzahl == 3): a = random.randint(1,10) b = random.randint(1,10) 79 3 3.8 Das fertige Spiel Programmierkurs op = "*" c = a * b # 7: Sonderfall Division elif(opzahl == 4): c = random.randint(1,10) b = random.randint(1,10) op = "/" a = c * b # 8: Aufgabenstellung print("Aufgabe", aufgabe, "von", anzahl, ":", a, op, b) # 9: Schleife mit 3 Versuchen for versuch in range(1,4): # 10: Eingabe try: print("Bitte eine Zahl eingeben:") zahl = int(input()) except: # Falls Umwandlung nicht erfolgreich print("Sie haben keine Zahl eingegeben") # Schleife unmittelbar fortsetzen continue # 11: Kommentar if zahl == c: print(zahl, "ist richtig") richtig = richtig + 1 break else: print(zahl, "ist falsch") # 12: Richtiges Ergebnis der Aufgabe print("Ergebnis: ", c) # 13: Anzahl richtige Ergebnisse print("Richtig:", richtig, "von", anzahl) Es wird die folgende Ausgabe erzeugt: Wie viele Aufgaben (1 bis 10): 2 Aufgabe 1 von 2 : 26 + 18 Bitte eine Zahl eingeben: 44 44 ist richtig Ergebnis: 44 Aufgabe 2 von 2 : 27 – 2 Bitte eine Zahl eingeben: 24 24 ist falsch Bitte eine Zahl eingeben: 23 23 ist falsch Bitte eine Zahl eingeben: 22 22 ist falsch Ergebnis: 25 Richtig: 1 von 2 3 Nach der Initialisierung des Zufallsgenerators (1) wird die gewünschte Anzahl der Aufgaben eingelesen (2). Da der Benutzer einen Fehler bei der Eingabe machen könnte, findet eine Ausnahmebehandlung statt. Fehler abfangen Der Rückgabewert der Funktion input() wird unmittelbar als Parameter der Funktion int() genutzt. So werden zwei Schritte auf einmal erledigt. Eingabe, Umwandlung Der Zähler für die Anzahl der richtig gelösten Aufgaben (richtig) wird auf 0 gestellt (3). Es wird eine äußere for-Schleife mit der gewünschten Anzahl gestartet (4). Der Operator wird per Zufallsgenerator ermittelt (5). Für jeden Operator gibt es andere Bereiche, aus denen die Zahlen ausgewählt werden (6). Der Operator selbst und das Ergebnis werden gespeichert. Zufälliger Operator Eine Besonderheit ist bei der Division zu beachten (7): Es sollen nur ganze Zahlen vorkommen. Die beiden zufälligen Operanden (a und b) werden daher aus dem Ergebnis einer Multiplikation ermittelt. Nur ganze Zahlen Die Aufgabe wird gestellt (8). Dabei werden zur besseren Orientierung des Benutzers auch die laufende Nummer und die Gesamtanzahl der Aufgaben Listing 3.33 Datei spiel_fertig.py 80 81 3 Programmierkurs ausgegeben. Es wird eine innere for-Schleife für maximal drei Versuche gestartet (9). Maximal drei Versuche 82 Die Eingaben des Benutzers (10) werden kommentiert (11). Nach maximal drei Versuchen wird das richtige Ergebnis ausgegeben (12). Zuletzt wird die Anzahl der richtig gelösten Aufgaben ausgegeben (13). Auf einen Blick Auf einen Blick 1 Einführung ............................................................................................. 17 2 Erste Schritte ......................................................................................... 23 3 Programmierkurs ................................................................................. 35 4 Datentypen ............................................................................................ 83 5 Weiterführende Programmierung ................................................. 143 6 Objektorientierte Programmierung .............................................. 203 7 Verschiedene Module ........................................................................ 225 8 Dateien .................................................................................................... 257 9 Internet ................................................................................................... 303 10 Datenbanken ......................................................................................... 339 11 Benutzeroberflächen .......................................................................... 371 12 Unterschiede in Python 2 .................................................................. 445 13 Raspberry Pi ........................................................................................... 449 Inhalt Inhalt 1 Einführung 17 1.1 Vorteile von Python ..................................................................................... 17 1.2 Verbreitung von Python ............................................................................ 18 1.3 Aufbau des Buchs ......................................................................................... 18 1.4 Übungen ........................................................................................................... 20 1.5 Installation von Python unter Windows ............................................ 20 1.6 Installation von Python unter Ubuntu Linux ................................... 21 1.7 Installation von Python unter macOS ................................................. 21 2 Erste Schritte 23 2.1 Python als Taschenrechner ...................................................................... 23 2.1.1 2.1.2 Eingabe von Berechnungen .................................................... Addition, Subtraktion und Multiplikation .......................... 23 24 2.1.3 2.1.4 2.1.5 Division, Ganzzahldivision und Modulo ............................. Rangfolge und Klammern ........................................................ Variablen und Zuweisung ....................................................... 24 25 26 Erstes Programm ........................................................................................... 27 2.2.1 2.2.2 28 28 2.2 2.3 Hallo Welt ..................................................................................... Eingabe eines Programms ....................................................... Speichern und Ausführen ......................................................................... 28 2.3.1 Speichern ....................................................................................... 29 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 Ausführen unter Windows ...................................................... Ausführen unter Ubuntu Linux und unter macOS .......... Kommentare ................................................................................ Verkettung von Ausgaben ....................................................... Lange Ausgaben .......................................................................... 29 31 32 32 33 5 Inhalt Inhalt 3 3.1 3.2 3.3 3.4 Programmierkurs Ein Spiel programmieren .......................................................................... 35 3.1.1 35 Der Ablauf des Spiels ................................................................ Variablen und Operatoren ....................................................................... 36 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 Berechnung und Zuweisung .................................................. Eingabe einer Zeichenkette .................................................... Eingabe einer Zahl ..................................................................... Spiel, Version mit Eingabe ...................................................... Zufallszahlen ............................................................................... 36 37 37 38 40 Verzweigungen ............................................................................................. 41 3.3.1 3.3.2 Vergleichsoperatoren ............................................................... Einfache Verzweigung ............................................................. 41 42 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.3.8 Spiel, Version mit Bewertung der Eingabe ........................ Mehrfache Verzweigung ......................................................... Logische Operatoren ................................................................. Mehrere Vergleichsoperatoren ............................................. Spiel, Version mit genauer Bewertung der Eingabe ....... Rangfolge der Operatoren ...................................................... 43 44 46 48 49 50 Schleifen ........................................................................................................... 51 3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.6 3.4.7 for-Schleife ................................................................................... Schleifenabbruch mit »break« .............................................. Geschachtelte Kontrollstrukturen ....................................... Spiel, Version mit for-Schleife und Abbruch ..................... for-Schleife mit »range()« ....................................................... Spiel, Version mit »range()« ................................................... while-Schleife .............................................................................. 51 52 53 54 55 59 60 3.4.8 Spiel, Version mit while-Schleife und Zähler .................... 61 3.5 Entwicklung eines Programms .............................................................. 63 3.6 Fehler und Ausnahmen ............................................................................. 64 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 6 35 Basisprogramm .......................................................................... Fehler abfangen ......................................................................... Eingabe wiederholen ................................................................ Exkurs: Schleifenfortsetzung mit »continue« .................. Spiel, Version mit Ausnahmebehandlung ......................... 64 65 67 68 69 3.7 Funktionen und Module ............................................................................ 71 3.7.1 3.7.2 3.7.3 3.7.4 3.7.5 Einfache Funktionen .................................................................. Funktionen mit einem Parameter ......................................... Funktionen mit mehreren Parametern ............................... Funktionen mit Rückgabewert .............................................. Spiel, Version mit Funktionen ................................................ 72 73 75 75 76 3.8 Das fertige Spiel ............................................................................................ 78 4 Datentypen 83 4.1 Zahlen ................................................................................................................ 83 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 83 85 86 87 87 89 90 91 94 4.2 Zeichenketten ................................................................................................ 4.2.1 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.3 4.4 Ganze Zahlen ............................................................................... Zahlen mit Nachkommastellen ............................................. Typ ermitteln ................................................................................ Operator ** .................................................................................... Rundung und Konvertierung .................................................. Winkelfunktionen ...................................................................... Weitere mathematische Funktionen ................................... Bitoperatoren ............................................................................... Brüche ............................................................................................. Eigenschaften .............................................................................. Operatoren ................................................................................... Operationen ................................................................................. Funktionen .................................................................................... Umwandlung einer Zeichenkette in eine Zahl ................. Umwandlung einer Zahl in eine Zeichenkette ................. Datentyp »bytes« ....................................................................... 97 97 98 100 102 106 108 108 Listen .................................................................................................................. 109 4.3.1 4.3.2 4.3.3 Eigenschaften .............................................................................. Operatoren ................................................................................... Funktionen und Operationen ................................................. 110 112 112 Tupel ................................................................................................................... 116 4.4.1 4.4.2 4.4.3 116 116 118 Eigenschaften .............................................................................. Operationen ................................................................................. Tupel entpacken ......................................................................... 7 Inhalt Inhalt 4.5 4.6 4.7 4.8 120 4.5.1 4.5.2 4.5.3 4.5.4 Eigenschaften .............................................................................. Operatoren und Funktionen .................................................. Views .............................................................................................. Vergleiche ..................................................................................... 120 122 123 125 Mengen, Sets ................................................................................................. 126 4.6.1 4.6.2 4.6.3 4.6.4 Eigenschaften .............................................................................. Funktionen ................................................................................... Operatoren ................................................................................... Frozenset ...................................................................................... 126 127 128 130 Wahrheitswerte und Nichts .................................................................... 131 4.7.1 4.7.2 Wahrheitswerte True und False ............................................ Nichts, None ................................................................................ 132 135 Referenz, Identität und Kopie ................................................................ 137 4.8.1 4.8.2 Referenz und Identität ............................................................. Ressourcen sparen ..................................................................... 137 139 4.8.3 Objekte kopieren ........................................................................ 140 5.4 Iterierbare Objekte ...................................................................................... 160 5.4.1 5.4.2 5.4.3 Funktion »zip()« ........................................................................... Funktion »map()« ....................................................................... Funktion »filter()« ....................................................................... 161 161 164 5.5 List Comprehension ..................................................................................... 164 5.6 Fehler und Ausnahmen .............................................................................. 167 5.6.1 5.6.2 5.6.3 5.6.4 5.6.5 5.6.6 Allgemeines .................................................................................. Syntaxfehler ................................................................................. Laufzeitfehler ............................................................................... Logische Fehler und Debugging ............................................ Fehler erzeugen ........................................................................... Unterscheidung von Ausnahmen ......................................... 167 167 169 169 174 175 Funktionen ...................................................................................................... 177 5.7.1 5.7.2 5.7.3 5.7.4 5.7.5 5.7.6 5.7.7 5.7.8 5.7.9 Variable Anzahl von Parametern .......................................... Benannte Parameter ................................................................. Voreinstellung von Parametern ............................................ Mehrere Rückgabewerte .......................................................... Übergabe von Kopien und Referenzen ................................ Lokal, global .................................................................................. Rekursive Funktionen ................................................................ Lambda-Funktion ....................................................................... Funktionsname als Parameter ............................................... 177 178 179 181 182 185 186 187 188 Eingebaute Funktionen ............................................................................. 189 5.8.1 5.8.2 5.8.3 Funktionen »max()«, »min()« und »sum()« ........................ Funktionen »chr()« und »ord()« ............................................. Funktionen »reversed()« und »sorted()« ............................. 191 192 193 5.7 5 Weiterführende Programmierung 5.1 Allgemeines .................................................................................................... 143 5.1.1 5.1.2 Kombinierte Zuweisungsoperatoren .................................. Programmzeile in mehreren Zeilen ..................................... 143 145 5.1.3 5.1.4 5.1.5 Eingabe mit Hilfestellung ....................................................... Anweisung »pass« ..................................................................... Funktionen »eval()« und »exec()« ........................................ 146 147 149 5.9 Statistikfunktionen ..................................................................................... 194 Ausgabe und Formatierung .................................................................... 150 5.10 Eigene Module ............................................................................................... 196 5.2.1 Funktion »print()« ...................................................................... 150 5.2.2 5.2.3 5.2.4 Formatierung mit String-Literalen ....................................... Formatierung mit »format()« ................................................ Formatierung wie in C .............................................................. 152 156 158 5.10.1 5.10.2 Eigene Module erzeugen ......................................................... Eigene Module verwenden ...................................................... 197 197 Parameter der Kommandozeile ............................................................. 199 Conditional Expression .............................................................................. 159 5.11.1 5.11.2 5.11.3 199 199 200 5.2 5.3 8 Dictionarys ...................................................................................................... 143 5.8 5.11 Übergabe von Zeichenketten ................................................. Übergabe von Zahlen ................................................................ Beliebige Anzahl von Parametern ......................................... 9 Inhalt Inhalt 6 Objektorientierte Programmierung 7.4 Reguläre Ausdrücke ..................................................................................... 247 7.4.1 7.4.2 Suchen von Teiltexten .............................................................. Ersetzen von Teiltexten ............................................................ 248 252 7.5 Audioausgabe ................................................................................................ 255 8 Dateien 257 6.1 Was ist OOP? .................................................................................................. 203 6.2 Klassen, Objekte und eigene Methoden ........................................... 204 6.3 Konstruktor und Destruktor ................................................................... 206 6.4 Besondere Methoden ................................................................................. 208 6.5 Operatormethoden ..................................................................................... 209 6.6 Referenz, Identität und Kopie ................................................................ 211 8.1 Dateitypen ....................................................................................................... 257 6.7 Vererbung ....................................................................................................... 213 8.2 Öffnen und Schließen einer Datei ......................................................... 258 6.8 Mehrfachvererbung .................................................................................... 216 8.3 Sequenzielle Dateien .................................................................................. 259 6.9 Enumerationen ............................................................................................. 219 6.10 Spiel, objektorientierte Version ............................................................ 220 8.3.1 8.3.2 8.3.3 8.3.4 Sequenzielles Schreiben ........................................................... Sequenzielles Lesen ................................................................... CSV-Datei schreiben .................................................................. CSV-Datei lesen ........................................................................... 259 261 266 269 7 Verschiedene Module Dateien mit festgelegter Struktur ........................................................ 271 225 7.1 Datum und Zeit ............................................................................................. 225 8.4.1 8.4.2 8.4.3 Formatiertes Schreiben ............................................................ Lesen an beliebiger Stelle ........................................................ Schreiben an beliebiger Stelle ................................................ 271 272 274 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 225 227 229 230 232 Serialisierung .................................................................................................. 276 8.5.1 8.5.2 Objekte in Datei schreiben ...................................................... Objekte aus Datei lesen ............................................................ 276 278 Bearbeitung mehrerer Dateien .............................................................. 280 8.6.1 8.6.2 Funktion »glob.glob()« .............................................................. Funktion »os.scandir()« ............................................................. 280 281 7.1.6 7.1.7 7.2 7.3 10 203 Ausgabe der Zeit mit »localtime()« ...................................... Ausgabe der Zeit mit »strftime()« ........................................ Zeitangabe erzeugen ................................................................ Mit Zeitangaben rechnen ....................................................... Programm anhalten .................................................................. 8.4 8.5 8.6 Spiel, Version mit Zeitmessung ............................................ Spiel, objektorientierte Version mit Zeitmessung .......... 233 235 Container »double-ended queue« ....................................................... 236 8.7 Informationen über Dateien ................................................................... 282 7.2.1 7.2.2 Operationen ................................................................................. Veränderungen ........................................................................... 237 239 8.8 Dateien und Verzeichnisse verwalten ................................................ 284 Multithreading .............................................................................................. 241 7.3.1 7.3.2 7.3.3 7.3.4 7.3.5 241 241 243 244 246 Wozu dient Multithreading? ................................................. Erzeugung eines Threads ........................................................ Identifizierung eines Threads ................................................ Gemeinsame Daten und Objekte ......................................... Threads und Exceptions .......................................................... 8.9 8.10 Beispielprojekt Morsezeichen ................................................................. 285 8.9.1 8.9.2 8.9.3 Morsezeichen aus Datei lesen ................................................ Ausgabe auf dem Bildschirm .................................................. Ausgabe mit Tonsignalen ........................................................ 285 287 288 Spiel, Version mit Highscore-Datei ....................................................... 290 8.10.1 291 Eingabebeispiel ........................................................................... 11 Inhalt Inhalt 8.10.2 8.10.3 Aufbau des Programms ........................................................... Code des Programms ................................................................ 291 292 8.11 Spiel, objektorientierte Version mit Highscore-Datei ................. 297 9 Internet 303 9.1 Laden und Senden von Internetdaten ................................................ 303 9.1.1 9.1.2 9.1.3 Daten lesen .................................................................................. Daten kopieren ........................................................................... Daten senden per »GET« ......................................................... 304 306 307 9.1.4 Daten senden per »POST« ....................................................... 310 Webserver-Programmierung .................................................................. 312 9.2.1 9.2.2 Erstes Programm ........................................................................ Beantworten einer Benutzereingabe .................................. 313 314 9.2.3 9.2.4 Formularelemente mit mehreren Werten ........................ Typen von Formularelementen ............................................. 317 320 9.3 Browser aufrufen ......................................................................................... 326 9.4 Spiel, Version für das Internet ............................................................... 326 9.4.1 9.4.2 Eingabebeispiel ........................................................................... Aufbau des Programms ........................................................... 327 328 9.4.3 Code des Programms ................................................................ 329 9.2 12 10 Datenbanken 339 10.1 Aufbau von Datenbanken ........................................................................ 339 10.2 SQLite ................................................................................................................ 340 10.2.1 10.2.2 10.2.3 10.2.4 10.2.5 10.2.6 10.2.7 10.2.8 341 343 344 347 349 350 352 354 Datenbank, Tabelle und Datensätze ................................... Daten anzeigen ........................................................................... Daten auswählen, Operatoren .............................................. Operator »LIKE« .......................................................................... Sortierung der Ausgabe ........................................................... Auswahl nach Eingabe ............................................................. Datensätze ändern .................................................................... Datensätze löschen ................................................................... 10.3 10.4 SQLite auf dem Webserver ....................................................................... 355 MySQL ................................................................................................................ 357 10.4.1 10.4.2 10.4.3 10.4.4 10.4.5 XAMPP und Connector/Python .............................................. Datenbank erzeugen ................................................................. Tabelle anlegen ........................................................................... Datensätze anlegen ................................................................... Daten anzeigen ........................................................................... 358 359 360 362 363 10.5 Spiel, Version mit Highscore-Datenbank ........................................... 364 10.6 Spiel, objektorientierte Version mit Highscore-Datenbank ..... 367 11 Benutzeroberflächen 371 Einführung ....................................................................................................... 371 11.1.1 11.1.2 Eine erste GUI-Anwendung ..................................................... Ändern von Eigenschaften ...................................................... 372 374 Widget-Typen ................................................................................................ 375 11.2.1 11.2.2 11.2.3 11.2.4 11.2.5 11.2.6 11.2.7 11.2.8 11.2.9 11.2.10 11.2.11 11.2.12 11.2.13 11.2.14 375 378 380 382 384 386 388 389 391 394 395 397 400 403 11.1 11.2 11.3 Anzeigefeld, Label ....................................................................... Einzeilige Textbox, Entry .......................................................... Versteckte Eingabe ..................................................................... Mehrzeilige Textbox, Text ....................................................... Scrollende Textbox, ScrolledText .......................................... Listbox mit einfacher Auswahl .............................................. Listbox mit mehrfacher Auswahl .......................................... Scrollbar, scrollende Widgets ................................................. Radiobuttons zur Auswahl, Widget-Variablen ................. Radiobuttons zur Auswahl und Ausführung .................... Checkbuttons zur mehrfachen Auswahl ............................ Schieberegler, Scale ................................................................... Mausereignisse ........................................................................... Tastaturereignisse ...................................................................... Geometrische Anordnung von Widgets ............................................. 405 11.3.1 11.3.2 11.3.3 11.3.4 406 408 412 414 Frame-Widget, Methode »pack()« ........................................ Ein einfacher Taschenrechner ................................................ Methode »grid()« ........................................................................ Methode »place()«, absolute Koordinaten ......................... 13 Inhalt Inhalt 11.3.5 11.3.6 11.3.7 11.4 11.5 416 418 419 Menüs, Messageboxen und Dialogfelder ......................................... 423 11.4.1 11.4.2 11.4.3 11.4.4 11.4.5 Menüleisten ................................................................................. Kontextmenüs ............................................................................ Messageboxen ............................................................................ Eigene Dialogfelder ................................................................... Ausführung verhindern ........................................................... 424 429 431 436 438 Spiel, GUI-Version ........................................................................................ 439 12 Unterschiede in Python 2 445 12.1 Neue und geänderte Eigenschaften .................................................... 445 12.1.1 12.1.2 Auffällige Änderungen ............................................................. Weitere Änderungen ................................................................ 445 446 12.2 Konvertierung von Python 2 zu Python 3 ......................................... 447 13 Raspberry Pi 449 13.1 13.2 13.3 14 Methode »place()«, relative Koordinaten .......................... Absolute Veränderung von Koordinaten ........................... Relative Veränderung von Koordinaten ............................. Einzelteile und Installation ...................................................................... 449 13.1.1 13.1.2 13.1.3 13.1.4 13.1.5 Einzelteile ..................................................................................... Sicherheit und Schäden ........................................................... Zusammenbau ............................................................................ Installation von Raspbian ........................................................ Start von Raspbian .................................................................... 449 450 451 451 452 Elektronische Schaltungen ...................................................................... 453 13.2.1 13.2.2 13.2.3 13.2.4 Gleichspannungs-Stromkreis ................................................ Spannung ist Information ....................................................... Bauelemente und Ausrüstung .............................................. Widerstände ................................................................................ 453 454 455 455 Aufbau des GPIO-Anschlusses ................................................................ 457 13.4 Lüftersteuerung ............................................................................................ 459 13.4.1 13.4.2 13.4.3 13.4.4 13.4.5 13.4.6 13.4.7 13.4.8 459 459 460 461 462 463 464 465 Temperatur ermitteln ............................................................... Leuchtdioden ............................................................................... Leuchtdiode ansteuern ............................................................. Leuchtdiode blinken lassen ..................................................... Mehrere Leuchtdioden ............................................................. Lüfter ansteuern ......................................................................... Temperaturabhängige Lüftersteuerung ............................. Temperatur in Datenbank speichern ................................... Anhang 469 A.1 Installation von XAMPP ............................................................................. 469 A.1.1 A.1.2 A.1.3 469 470 470 A.2 Installation von XAMPP unter Windows ............................ Installation von XAMPP unter Ubuntu Linux .................... Installation von XAMPP unter macOS ................................. UNIX-Befehle .................................................................................................. 471 A.2.1 A.2.2 A.2.3 Inhalt eines Verzeichnisses ..................................................... Verzeichnis anlegen, wechseln und löschen ..................... Datei kopieren, verschieben und löschen .......................... 471 472 473 Lösungen .......................................................................................................... 474 A.3.1 A.3.2 A.3.3 Lösungen zu Kapitel 2 ............................................................... Lösungen zu Kapitel 3 ............................................................... Lösungen zu Kapitel 5 ............................................................... 474 474 479 Index .................................................................................................................................... 481 A.3 15 Index Index – (minus) Set .............................................................. 129 Subtraktion .............................................. 24 ^ (hoch) Bitoperator ............................................... 94 Set .............................................................. 129 __add__() .................................................... 211 __del__() ...................................................... 207 __eq__() ....................................................... 210 __floordiv__() ........................................... 211 __ge__() ....................................................... 211 __gt__() ........................................................ 210 __init__() ..................................................... 207 __le__() ........................................................ 211 __lt__() ......................................................... 211 __mod__() .................................................. 211 __mul__() ................................................... 211 __ne__() ....................................................... 211 __pow__() ................................................... 211 __repr__() ................................................... 209 __str__() ...................................................... 209 __sub__() .................................................... 211 __truediv__() ............................................. 211 != (ungleich) .................................................. 42 . (Verzeichnis) ............................................. 471 .. (Verzeichnis) ............................................ 471 [ ] (Dictionary) ............................................ 121 { } (Dictionary) ............................................ 121 * (Stern) deque ........................................................ 238 Multiplikation ......................................... 24 Parameter ............................................... 177 Tupel ......................................................... 120 Vervielfachung .............................. 98, 112 ** (Potenz) ...................................................... 87 **= (Zuweisung) ......................................... 144 *= (Zuweisung) ........................................... 144 / (Division) .................................................... 24 / (Verzeichnis) ............................................ 258 // (Ganzzahldivision) ................................ 25 //= (Zuweisung) ......................................... 144 /= (Zuweisung) ........................................... 144 \ (Verzeichnis) ............................................ 258 & (Bitoperator) ............................................ 93 & (Set) ............................................................ 129 # (Kommentar) ........................................... 32 % (Format) ................................................... 154 % (Prozent) Modulo ............................................... 25, 87 %= (Zuweisung) ......................................... 144 %d (Format) ................................................ 159 %e (Format) ................................................. 158 %f (Format) ................................................. 158 %o (Format) ................................................ 159 %s (Format) ................................................. 159 %x (Format) ................................................ 159 + (plus) Addition ..................................................... 24 deque ........................................................ 238 Verkettung ...................................... 98, 112 += (Zuweisung) .......................................... 144 < (Format) .................................................... 155 < (kleiner) Python ........................................................ 42 SQL ............................................................. 347 << (Bitoperator) ........................................... 94 <= (kleiner gleich) Python ........................................................ 42 SQL ............................................................. 347 <> (ungleich) Python ...................................................... 446 SQL ............................................................. 347 = Python (Zuweisung) ....................... 26, 36 SQL (gleich) ............................................. 347 -= (Zuweisung) ........................................... 144 == (gleich) ................................... 42, 126, 137 > (Format) .................................................... 155 > (größer) Python ........................................................ 42 SQL ............................................................. 347 >= (größer gleich) Python ........................................................ 42 SQL ............................................................. 347 >> (Bitoperator) ........................................... 94 | (Bitoperator) ............................................... 93 | (Set) .............................................................. 129 481 Index Index ~ (Bitoperator) ............................................. 94 $_GET ............................................................ 308 $_POST .......................................................... 311 0b (Präfix) ...................................................... 85 0o (Präfix) ...................................................... 85 0x (Präfix) ..................................................... 85 2to3 ................................................................. 447 A abs() .................................................................. 97 Abweichung .................................................. 91 add_cascade() ............................................. 428 add_checkbutton() .................................. 428 add_command() ....................................... 427 add_radiobutton() ................................... 428 add_separator() ......................................... 427 add() ............................................................... 128 Alt-Taste (Linux) ....................................... 403 anchor ........................................................... 376 and .................................................................... 46 AND (SQL) .................................................... 347 Annotation ............................................ 72, 83 Antwort-Box (GUI) ................................... 432 Anweisung ausführen ................................................ 149 leer ............................................................. 147 Anzahl Elemente ................................................. 100 Teiltexte ................................................... 103 Anzeige (GUI) ............................................. 375 Apache-Webserver ................ 303, 358, 469 append() ............................................. 116, 240 appendleft() ................................................ 240 argv ................................................................ 199 Arithmetischer Mittelwert ................... 196 Array .............................................................. 110 as ........................................................... 177, 197 ASC (SQL) ..................................................... 350 askokcancel() .............................................. 432 Audioausgabe ............................................ 255 Ausdruck auswerten ............................................... 149 bedingt ..................................................... 159 Ausgabe, lang ............................................... 33 482 Ausnahme ..................................................... 64 Thread ...................................................... 246 Ausnahmebehandlung ............................ 66 Ausrichtung (GUI) .................................... 376 Auswahlmenü einfach (GUI) ......................................... 386 mehrfach (GUI) ..................................... 388 Auswahlmenü (HTML) ........................... 321 B b (Format) .................................................... 155 b (Präfix) ...................................................... 109 Bedingter Ausdruck ................................ 159 Bedingung ..................................... 41, 61, 132 verknüpfen ............................................... 46 Beep() .................................................. 256, 290 Benannter Parameter ............................. 178 Benutzeroberfläche ................................. 371 Betrag .............................................................. 97 bg .................................................................... 376 Bild einbinden (GUI) ............................... 376 Bild-Widget ................................................. 378 bin() ........................................................... 85, 93 bind() ................................................... 403, 404 Bit ..................................................................... 91 schieben ..................................................... 94 setzen ......................................................... 93 Bitoperator .................................................... 92 Bogenmaß ..................................................... 89 bool ................................................................ 132 borderwidth ............................................... 376 break ................................................................ 52 Breakpoint .................................................. 173 Breite (GUI) ................................................. 376 Browser ........................................................ 305 aufrufen ................................................... 326 Bruch ............................................................... 94 Button ........................................................... 373 Button-Widget ........................................... 373 Byte .................................................................. 91 Byte-Literal ....................................... 108, 306 bytes .............................................................. 108 decode() ................................................... 109 bytes() ........................................................... 108 C Callback (GUI) ............................................. 373 cd ..................................................................... 472 cgi FieldStorage ........................................... 316 Modul ............................................. 312, 316 cgi-bin ........................................................... 312 CGI-Skript .................................................... 312 Standardverzeichnis ........................... 315 cgitb enable() .................................................... 316 Modul ....................................................... 316 char (Event-Objekt) .................................. 405 checkbox (HTML) ..................................... 323 Checkbutton-Widget ............................... 395 checked (HTML) ........................................ 323 chr() ................................................................ 192 class ................................................................ 204 cleanup() RPi.GPIO .................................................. 461 clear() deque ........................................................ 238 Set .............................................................. 128 close() connection .................................... 343, 360 cursor ........................................................ 360 Datei ......................................................... 259 scandir() ................................................... 282 collections deque() ..................................................... 238 Modul ....................................................... 236 command Widget ................................... 373, 394, 397 commit() connection .................................... 343, 360 Compiler ........................................................ 18 Conditional Expression ......................... 159 configure() ................................................... 375 connect() mysql ........................................................ 359 sqlite3 ....................................................... 342 connection close() .............................................. 343, 360 commit() ........................................ 343, 360 cursor() ........................................... 342, 360 mysql ........................................................ 360 sqlite3 ....................................................... 342 connector connect() ................................................. 359 mysql ........................................................ 359 Connector / Python ................................. 358 Content-type .............................................. 313 continue ......................................................... 68 copy deepcopy() .................................... 140, 212 Modul ............................................. 140, 212 copy() Datei ......................................................... 285 deque ........................................................ 238 Set .............................................................. 128 cos() .................................................................. 89 count() Liste ........................................................... 116 str ............................................................... 103 cp ..................................................................... 473 CREATE TABLE (SQL) ............................... 342 CSV-Datei ..................................................... 266 curselection() ............................................. 389 cursor close() ....................................................... 360 execute() .................................................. 360 fetchall() .................................................. 364 cursor() ......................................................... 342 connection .............................................. 360 D d (Format) .................................................... 155 DATE (SQL) .................................................. 358 Datei anlegen .................................................... 473 Eigenschaften ........................................ 282 Ende erkennen ...................................... 264 Existenz prüfen ..................................... 285 feste Struktur ......................................... 271 formatierte Ausgabe .......................... 271 Größe ........................................................ 283 Inhalt anhängen .................................. 261 kopieren ......................................... 285, 473 lesen .......................................................... 261 lesen und schreiben ............................ 274 Liste erstellen ......................................... 280 löschen ........................................... 285, 473 öffnen ....................................................... 258 483 Index Index Datei (Forts.) Position ändern .......................... 259, 272 schließen ................................................. 259 schreiben ................................................. 259 speichern ................................................. 257 Typ ............................................................. 257 umbenennen ............................... 285, 473 verschieben .................................. 285, 473 verwalten ................................................ 284 Zugriffszeitpunkt ................................. 283 Dateiendung .csv ............................................................. 266 .py ................................................................ 29 Dateizugriff binär ......................................................... 257 sequenziell .............................................. 257 wahlfrei .................................................... 257 Datenbank ................................................... 339 Aktionsabfrage ..................................... 343 Auswahlabfrage ................................... 344 Datensatz ............................................... 339 Datensatz ändern ................................ 352 Datensatz anzeigen ............................ 343 Datensatz einfügen ............................ 343 Datensatz filtern .................................. 344 Datensatz löschen ............................... 354 Datensatz sortieren ............................ 349 Datensatzanzahl begrenzen ........... 365 Datensatz-Cursor ................................ 342 eindeutiger Index ................................ 343 Ergebnis der Abfrage .......................... 344 erzeugen ........................................ 342, 359 Feld ............................................................ 339 Internet .................................................... 355 Managementsystem ................ 340, 357 Primärschlüssel .................................... 342 Server ........................................................ 358 Tabelle ...................................................... 339 Tabelle erzeugen ........................ 342, 360 Verbindung herstellen ....................... 342 verwalten ................................................ 358 Datentyp bool ........................................................... 132 DATE (SQL) ............................................. 358 Datenbank .............................................. 339 deque ........................................................ 236 DOUBLE (SQL) ....................................... 358 ermitteln ................................................... 86 484 Datentyp (Forts.) float ............................................................. 85 int ................................................................. 83 INT (SQL) ................................................. 358 INTEGER (SQL) ...................................... 340 long ........................................................... 445 NoneType ................................................ 135 REAL (SQL) .............................................. 340 speziell ..................................................... 236 str ................................................................. 97 TEXT (SQL) .............................................. 340 VARCHAR (SQL) .................................... 358 Datum und Zeit ......................................... 225 Differenz .................................................. 230 erzeugen .................................................. 229 formatieren .................................. 225, 227 Nullpunkt ................................................ 225 Debian .......................................................... 449 Debugger ..................................................... 169 decode() bytes .......................................................... 109 deepcopy() ......................................... 140, 212 def ..................................................................... 73 Klassenmethode .................................. 204 degrees() ......................................................... 90 del Destruktor .............................................. 207 Dictionary .............................................. 123 Liste ........................................................... 113 Referenz ................................................... 139 DELETE (SQL) .............................................. 354 denominator ................................................ 95 deque ............................................................. 236 deque() .......................................................... 238 DESC (SQL) ................................................... 350 Deserialisierung ........................................ 276 destroy() ....................................................... 373 Destruktor ................................................... 206 Dezimalformat .......................................... 155 Dezimalzahl .................................................. 84 Dezimalzeichen .......................................... 24 ändern ...................................................... 301 Dialogfeld erzeugen .................................................. 436 modal ....................................................... 439 Dictionary ................................................... 120 Element löschen ................................... 123 Elementexistenz ................................... 123 Dictionary (Forts.) erzeugen .................................................. 121 Funktionen ............................................. 122 KeyError ................................................... 288 leer ............................................................. 132 Reihenfolge ............................................ 121 vergleichen ............................................. 125 View .......................................................... 123 DirEntry ........................................................ 282 discard() ........................................................ 128 DOUBLE (SQL) ............................................ 358 double-ended queue ............................... 237 DoubleVar ................................................... 393 Dualformat ................................................. 155 Dualzahl .................................................. 84, 93 dump() .......................................................... 276 E e (Event-Objekt) ........................................ 403 e (Exponential) ............................................ 86 e (Format) .................................................... 154 e hoch x .......................................................... 91 Eigenschaft .................................................. 204 Eingabe kommentiert .......................................... 146 nicht sinnvoll ......................................... 175 versteckt (GUI) ...................................... 380 versteckt (HMTL) .................................. 321 wiederholen ............................................. 67 Zeichenkette ...................................... 37, 98 Eingabefeld einzeilig (GUI) ........................................ 378 HTML ........................................................ 321 mehrzeilig (GUI) ................................... 382 scrollbar (GUI) ....................................... 384 Eingebaute Funktion .............................. 189 Einplatinencomputer ............................. 449 Einrücken ...................................................... 61 doppelt ....................................................... 53 Einzelschrittverfahren ........................... 170 Elektronische Schaltung ........................ 449 elif ..................................................................... 45 else .................................................................... 43 Elternelement (GUI) ................................ 406 enable() ......................................................... 316 end .................................................................. 151 Endlosschleife ............................................ 371 endswith() ................................................... 105 Entry-Widget .............................................. 378 Entwicklung .................................................. 63 Entwicklungsumgebung ......................... 21 enum ............................................................. 219 Enumeration .............................................. 219 Eulersche Zahl .............................................. 91 eval() .............................................................. 149 Event-Objekt .............................................. 403 except .............................................................. 66 exec() ............................................................. 149 execute() ...................................................... 342 cursor ....................................................... 360 exists() os.path ..................................................... 285 exit, Kommandozeile ............................... 31 exit() .............................................................. 260 Exklusives Oder, bitweise ....................... 94 exp() ................................................................. 91 Exponentialformat .................................. 154 extend() ........................................................ 240 extendleft() ................................................. 240 F f (Format) ..................................................... 154 f (String-Literal) ......................................... 153 factorial() ....................................................... 91 Fakultät ........................................................... 91 False ............................................................... 132 Fehler ..................................................... 64, 167 abfangen ................................................... 65 erzeugen .................................................. 174 Laufzeitfehler ........................................ 169 logisch ...................................................... 169 Nachricht (GUI) .................................... 432 Syntaxfehler .......................................... 167 Unterscheidung .................................... 175 Fenster öffnen ....................................................... 373 schließen ................................................. 373 fetchall() cursor ....................................................... 364 fg ..................................................................... 376 FieldStorage ................................................ 316 value ......................................................... 316 485 Index Index filter() ............................................................. 164 find() .............................................................. 104 findall() ......................................................... 248 Fließkommazahl ......................................... 85 float (Datentyp) ........................................... 85 float() ...................................................... 37, 106 font ................................................................. 376 for Dictionary ............................................... 124 Liste ........................................................... 112 Schleife ....................................................... 51 Set .............................................................. 127 Tupel ......................................................... 117 Zeichenkette .......................................... 102 form (HTML) ............................................... 308 format() .............................................. 152, 156 Formatierung format() ................................................... 156 String-Literal ......................................... 152 wie in C ..................................................... 158 Fraction() ....................................................... 95 fractions Fraction() .................................................. 95 Modul ......................................................... 94 Frame-Widget ............................................ 406 from ............................................................... 198 Frozenset ..................................................... 130 frozenset() ................................................... 131 Führende Null ............................................ 156 Funktion ........................................................ 71 als Parameter ........................................ 188 Aufruf ......................................................... 73 beenden ..................................................... 76 benannter Parameter ........................ 178 Definition .................................................. 73 eingebaut ................................................ 189 Lambda .................................................... 187 mehrere Rückgabewerte ................... 181 mehrfacher Aufruf .............................. 161 Name .......................................................... 73 Parameter voreinstellen ................... 179 Parameter, ein ........................................ 73 Parameter, mehrere .............................. 75 Parameterübergabe ........................... 182 rekursiv .................................................... 186 Rückgabewert ......................................... 75 statistisch ................................................ 194 trigonometrisch ..................................... 89 486 Funktion (Forts.) variable Parameteranzahl ............... 177 Funktionale Programmierung ............ 160 HTML (Forts.) Formulardaten ..................................... 316 Formularelement ................................. 317 G I Ganze Zahl ..................................................... 83 Divisionsrest ............................................ 25 prüfen ......................................................... 87 gcd() ................................................................. 91 Geometriemanager (GUI) ........... 373, 405 get_ident(), threading ............................ 243 get() ............................................. 380, 387, 393 GET-Methode ............................................. 308 GGT .................................................................. 91 Gimp-Toolkit .............................................. 371 Gleich in Python .................................................. 42 in SQL ....................................................... 347 glob() ............................................................. 280 global ............................................................. 185 Globaler Namensraum .......................... 185 Graphical User Interface ........................ 371 grid() .............................................................. 412 Groß- und Kleinschreibung ................... 27 Größter gemeinsamer Teiler ................. 91 GTK+ .............................................................. 371 GUI ................................................................. 371 GUI-Anwendung starten ....................... 373 Identität ....................................................... 138 IDLE benutzen ................................................... 23 Debugger ................................................. 169 installieren (Linux) ................................ 21 if ......................................................................... 42 image ............................................................. 376 import .................................................... 41, 197 in Dictionary ............................................... 123 Element-View ........................................ 125 for ................................................................. 52 Key-View ................................................. 125 Liste ........................................................... 112 Sequenz ...................................................... 98 Set .............................................................. 127 Werte-View ............................................. 124 Index deque ........................................................ 238 Sequenz .................................................... 100 index() ................................................. 116, 240 Info-Nachricht (GUI) ............................... 432 input (HTML) .............................................. 308 input() ........................................................... 146 INSERT INTO (SQL) ................................... 343 insert() deque ........................................................ 240 Listbox ...................................................... 387 Liste ........................................................... 115 Textbox .................................................... 384 Instanz .......................................................... 205 int (Datentyp) .............................................. 83 INT (SQL) ...................................................... 358 int() ................................................... 37, 87, 106 INTEGER (SQL) ........................................... 340 IntEnum ....................................................... 219 Internet ........................................................ 303 Daten lesen ............................................. 304 Daten senden .............................. 307, 310 Datenbank .............................................. 355 Interpreter ..................................................... 18 H Haltepunkt .................................................. 173 harmonic_mean() .................................... 196 Harmonischer Mittelwert ..................... 196 has_key() ...................................................... 447 Header .......................................................... 313 height ............................................................ 376 hex() ................................................................. 84 Hexadezimalformat ................................ 155 Hexadezimalzahl ....................................... 84 Hintergrundfarbe (GUI) ......................... 376 Höhe (GUI) .................................................. 376 HTML Datei kopieren ...................................... 306 Formular ................................................. 315 IntVar ............................................................ 393 Inversion, bitweise .................................... 94 is ............................................................ 137, 213 isclose() ........................................................... 91 ISO 8601 ....................................................... 227 items() ........................................................... 125 Iterable .......................................................... 160 filtern ........................................................ 164 verbinden ................................................ 161 Iterator .......................................................... 160 schließen ................................................. 282 Iterierbares Objekt ................................... 160 J Ja-Nein-Box (GUI) ..................................... 432 K Kalenderwoche ......................................... 227 keycode (Event-Objekt) .......................... 405 KeyError, Dictionary ............................... 288 keys() ............................................................. 124 keysym (Event-Objekt) ........................... 405 Klasse ............................................................ 203 abgeleitet ................................................ 214 Basisklasse .............................................. 214 Definition ................................................ 204 Kodierung ................................................... 304 Kommandozeile ...................... 30, 199, 471 Kommentar .................................................. 32 Konstante ...................................................... 91 Aufzählung ............................................ 219 Konstruktor ................................................ 206 Vererbung ............................................... 216 Kontrollkästchen HTML ........................................................ 321 Kontrollstruktur, geschachtelt ............. 53 Konvertierung ........................................... 447 Kopfrechnen ................................................ 35 L Label-Widget .............................................. 375 Lambda-Funktion ................. 187, 412, 414 Lange Ausgabe ............................................. 33 487 Index Index Laufzeitfehler ............................................. 169 Layoutmanager (GUI) ............................. 405 len() ................................................................ 100 LibreOffice Calc ............................... 268, 297 LIKE (SQL) .................................................... 347 LIMIT (SQL) .................................................. 365 limit_denominator() ................................. 96 Linksbündig ................................................ 155 Linux ........................................................ 18, 21 Terminal .................................................. 199 List Comprehension ................................ 164 Listbox-Widget ................................ 386, 388 Liste ................................................................ 109 Anzahl bestimmter Elemente ......... 116 eingebettete ........................................... 111 Element anfügen .................................. 116 Element einfügen ................................. 115 Element löschen ......................... 113, 115 filtern ........................................................ 164 leer ............................................................. 132 Operation ................................................ 112 Position ermitteln ............................... 116 sortieren .................................................. 115 umdrehen ............................................... 115 load() .............................................................. 278 localtime() ................................................... 225 log() .................................................................. 91 log10() .............................................................. 91 Logarithmus ................................................. 91 Logischer Fehler ........................................ 169 Logischer Operator .................................... 46 Lokaler Namensraum ............................. 185 Lokaler Webserver ................................... 303 long ................................................................ 445 Lösungen .............................................. 20, 474 ls -l .................................................................. 471 M macOS ............................................................. 18 mainloop() .................................................. 373 map() ............................................................. 161 MariaDB ............................................. 357, 469 math cos() ............................................................. 89 degrees() .................................................... 90 e .................................................................... 91 488 math (Forts.) exp() ............................................................ 91 factorial() .................................................. 91 gcd() ............................................................ 91 isclose() ...................................................... 91 log() ............................................................. 91 log10() ........................................................ 91 Modul ......................................................... 83 pi .................................................................. 91 radians() .................................................... 90 sin() .............................................................. 89 sqrt() ............................................................ 91 tan() ............................................................. 89 Mausereignis (GUI) .................................. 400 Mausposition absolut ..................................................... 431 relativ ....................................................... 403 max() ............................................................. 191 mean() ........................................................... 196 median_high() ........................................... 196 median_low() ............................................. 196 median() ....................................................... 196 Menge ........................................................... 126 Differenzmenge .................................... 130 Element hinzufügen ........................... 128 Element löschen ................................... 128 kopieren .................................................. 128 leer ............................................................. 132 leeren ........................................................ 128 Schnittmenge ........................................ 130 Teilmenge ............................................... 128 Vereinigungsmenge ........................... 130 Menu tkinter ....................................................... 424 Menü (GUI) ................................................. 424 abtrennen ............................................... 428 Menüleiste (GUI) ...................................... 424 messagebox ................................................ 431 Methode ....................................................... 204 besondere ............................................... 208 min() .............................................................. 191 Mittelwert ................................................... 196 mkdir ............................................................. 472 mktime() ...................................................... 229 Modul cgi .................................................... 312, 316 cgitb .......................................................... 316 collections .............................................. 236 Modul (Forts.) copy ................................................. 140, 212 eigenes ..................................................... 197 einbinden ......................................... 41, 197 enum ......................................................... 219 erzeugen .................................................. 197 fractions .................................................... 94 glob ............................................................ 280 importieren als ..................................... 197 math ........................................................... 83 mysql.connector ................................... 359 os ...................................................... 282, 284 os.path ..................................................... 285 pickle ......................................................... 276 random ...................................................... 41 re ................................................................. 248 shutil ......................................................... 284 sqlite3 ....................................................... 340 statistics .................................................. 194 sys .................................................... 199, 260 threading ................................................ 241 time ........................................................... 225 tkinter ....................................................... 371 tkinter.messagebox ............................ 431 tkinter.scrolledtext .............................. 385 umbenennen ......................................... 197 urllib .......................................................... 303 urllib.parse ............................................. 303 urllib.request ......................................... 303 webbrowser ............................................ 326 winsound ................................................ 255 Modularisierung ................................ 71, 197 Morsezeichen ............................................. 285 move() ........................................................... 285 MS Excel ............................................. 268, 297 multiple (HTML) ....................................... 323 Multithreading .......................................... 241 mv ................................................................... 473 MySQL ................................................. 357, 469 mysql connector ................................................ 359 N Nachkommastellen ................................... 27 Anzahl ...................................................... 154 Nachrichtenbox (GUI) ............................ 431 name DirEntry ................................................... 282 Namensraum ............................................. 185 Nenner eines Bruchs ................................. 95 nicht logisch (Python) ..................................... 46 logisch (SQL) .......................................... 347 None .............................................................. 135 NoneType .................................................... 135 NOOBS .......................................................... 451 not .................................................................... 46 NOT (SQL) .................................................... 347 numerator ..................................................... 95 O o (Format) .................................................... 155 Objekt ..................................................... 83, 204 aus Datei lesen ...................................... 278 ausgeben ................................................. 209 erzeugen .................................................. 205 Identität .................................................. 213 in Datei schreiben ................................ 276 Informationen ...................................... 209 iterierbar ................................................. 160 kopieren ......................................... 140, 211 Referenz ......................................... 137, 211 Typ ermitteln ........................................... 86 vergleichen ............................................. 210 Objektorientierte Programmierung 203 oct() .................................................................. 84 oder bitweise ...................................................... 93 logisch (Python) ..................................... 46 logisch (SQL) .......................................... 347 offvalue ........................................................ 397 OK-Abbrechen-Box (GUI) ...................... 432 Oktalformat ................................................ 155 Oktalzahl ........................................................ 84 onvalue ......................................................... 397 OOP ................................................................ 203 open() Datei ......................................................... 258 webbrowser ............................................ 326 Operator Bit- ............................................................... 92 für Sequenzen .......................................... 98 489 Index Index Operator (Forts.) logischer .................................................... 46 Rangfolge ........................................... 25, 50 Rechenoperator ...................................... 87 Vergleichsoperator ............................... 41 Vergleichsoperator, mehrere ............ 48 Verkettung ............................................... 99 Vervielfachung ....................................... 99 Operatormethode .................................... 209 Optionsfeld (GUI) ..................................... 391 or ....................................................................... 46 OR (SQL) ....................................................... 347 ord() ............................................................... 192 ORDER BY (SQL) ........................................ 349 os Modul ............................................. 282, 284 remove() .................................................. 285 stat() .......................................................... 282 os.path .......................................................... 285 exists() ...................................................... 285 output() RPi.GPIO .................................................. 461 P pack() ................................................... 373, 406 Parallele Programme .............................. 241 Parameter ............................................... 73, 75 benannt ................................................... 178 variable Anzahl .................................... 177 voreinstellen .......................................... 179 Parameter-Substitution ......................... 351 partition() .................................................... 105 pass ................................................................ 147 password (HTML) ..................................... 323 Passworteingabe GUI ............................................................ 380 HTML ........................................................ 321 PhotoImage ................................................ 378 PHP .............................................. 303, 307, 469 phpMyAdmin .................................. 358, 469 Pi ....................................................................... 91 pickle ............................................................. 276 dump() ...................................................... 276 load() ......................................................... 278 PIXEL ............................................................. 452 place() .................................................. 414, 416 490 PlaySound() ................................................ 256 pop() .............................................................. 240 popleft() ........................................................ 240 Position Teiltext ....................................... 104 POST-Methode .......................................... 311 PRIMARY KEY (SQL) ................................. 342 print() ..................................................... 28, 150 mehrere Ausgaben ................................ 32 Programm abbrechen ............................................... 260 Abbruch vermeiden .............................. 65 anhalten .................................................. 232 ausführen, IDLE ...................................... 29 ausführen, Kommandozeile .............. 30 eingeben .................................................... 28 Entwicklung ............................................. 63 konvertieren .......................................... 447 Parameter ............................................... 199 Programmzeile, lang ............................... 145 Prozentformat ........................................... 154 pyGTK ........................................................... 371 PyQt ............................................................... 371 Python als Taschenrechner ............................... 23 auf dem Webserver ............................. 313 installieren ............................................... 20 Interpreter ....................................... 30, 313 MySQL-Schnittstelle ........................... 358 Shell ............................................................. 23 starten ........................................................ 23 Version ....................................................... 32 Python 2 ................................................ 19, 445 Python 3 ................................................ 19, 445 python.exe .................................................. 313 python.org ............................................. 20, 21 Python-Interpreter .................................. 449 Q QT ................................................................... 371 R radians() ......................................................... 90 radio (HTML) .............................................. 323 Radiobutton GUI ............................................................. 391 HTML ........................................................ 321 raise ................................................................ 174 Randart (GUI) ............................................. 376 Randbreite (GUI) ....................................... 376 randint() ......................................................... 41 random Modul ......................................................... 41 randint() .................................................... 41 seed() ........................................................... 41 range() ............................................................. 55 Rapid Application Development ......... 17 Raspberry Pi ................................................ 449 Einzelteile ................................................ 449 GND ........................................................... 458 GPIO ................................................ 454, 457 IDLE ........................................................... 452 Installation ............................................. 451 Leuchtdiode ........................................... 459 Leuchtdiode schalten ......................... 460 Lüfter steuern ........................................ 463 Python-Modul ....................................... 458 Schäden ................................................... 450 Schaltung ................................................ 453 Sicherheit ................................................ 450 Spannung ................................................ 458 SQLite3 ........................................... 453, 465 Steckbrett ................................................ 455 Stromkreis .............................................. 453 Temperatur ermitteln ........................ 459 Transistor ................................................ 463 Widerstand ............................................. 455 Zusammenbau ...................................... 451 Raspbian ............................................. 449, 451 Start .......................................................... 452 raw_input() ................................................. 445 re findall() .................................................... 248 Modul ....................................................... 248 sub() ........................................................... 252 read() .............................................................. 265 readline() ...................................................... 263 readlines() .................................................... 261 REAL (SQL) ................................................... 340 Rechte Unix ........................................................... 472 Rechtsbündig ............................................. 155 Referenz GUI-Widget ............................................ 375 löschen ..................................................... 139 Objekt ............................................. 137, 211 übergeben ............................................... 182 Regulärer Ausdruck ................................. 247 Rekursion ........................................... 186, 281 relief ............................................................... 376 remove() ....................................................... 115 os ................................................................ 285 replace() ........................................................ 104 repr() .................................................... 209, 220 Reservierte Wörter ..................................... 27 return .............................................................. 76 mehrere Werte ...................................... 181 reverse() ....................................................... 115 reversed() ..................................................... 193 rfind() ............................................................ 104 rm ................................................................... 473 rmdir ............................................................. 472 rotate() .......................................................... 241 round() ............................................................ 87 rpartition() .................................................. 105 Rückgabewert .............................................. 75 mehrere ................................................... 181 Runden ........................................................... 87 RuntimeError ............................................. 176 rwx ................................................................. 472 S Scale-Widget ............................................... 397 scandir() ....................................................... 281 Schaltfläche (GUI) ..................................... 373 Schaltung elektronisch ........................................... 449 Schieberegler (GUI) .................................. 397 Schleife ........................................................... 51 Abbruch ..................................................... 52 direkt fortfahren .................................... 68 endlos ....................................................... 132 for ................................................................. 51 while ........................................................... 60 Schlüssel-Wert-Kombination .............. 120 Schrift (GUI) ................................................ 376 Scrollbar-Widget ....................................... 389 491 Index Index ScrolledText() ............................................. 385 ScrolledText-Widget ............................... 384 Scrollen (GUI) ............................................. 384 secrets ............................................................. 41 seed() ............................................................... 41 seek() .................................................... 259, 272 select (HTML) ............................................. 323 SELECT (SQL) ............................................... 344 selected (HTML) ........................................ 323 Senden (HTML) .......................................... 321 sep .................................................................. 151 Separator ..................................................... 151 Sequenz .......................................................... 97 Index ......................................................... 100 Operatoren ............................................... 98 sortieren .................................................. 193 Teilbereich .............................................. 100 umdrehen ............................................... 193 Serialisierung ............................................. 276 Set ................................................................... 126 Reihenfolge ............................................ 126 unveränderlich ..................................... 130 set() ................................................................. 127 GUI .................................................. 391, 393 setmode() RPi.GPIO .................................................. 461 setup() RPi.GPIO .................................................. 461 setwarnings() RPi.GPIO .................................................. 461 show .............................................................. 380 show() ............................................................ 432 showerror() ................................................. 432 showinfo() ................................................... 432 showwarning() ........................................... 432 shutil copy() ........................................................ 285 Modul ....................................................... 284 shutil.move() .............................................. 285 Sicherheit ...................................................... 41 sin() .................................................................. 89 sleep() ............................................................ 232 time ........................................................... 461 Slice ................................................................ 100 sort() .............................................................. 115 sorted() ......................................................... 193 Spiel Kopfrechnen ..................................... 35 split() .............................................................. 105 492 SQL ................................................................. 339 SQL-Befehl senden ................................... 342 SQL-Injection ............................................. 351 sqlite3 connect() ................................................. 342 connection ............................................. 342 cursor ....................................................... 342 Modul ....................................................... 340 sqrt() ................................................................ 91 start() Thread ...................................................... 242 startswith() .................................................. 105 stat() ............................................................... 282 statistics ....................................................... 194 Statistik ........................................................ 194 str count() ...................................................... 103 Datentyp ................................................... 97 endswith() ............................................... 105 find() ......................................................... 104 partition() ............................................... 105 replace() ................................................... 104 rfind() ........................................................ 104 rpartition() ............................................. 105 split() ......................................................... 105 startswith() ............................................. 105 str() ................................................................. 108 strftime() ...................................................... 227 String ............................................................... 97 leer ............................................................. 132 String-Literal .............................................. 152 StringVar ...................................................... 393 sub() ............................................................... 252 Suchen und Ersetzen .............................. 247 sum() ............................................................. 191 Syntaxfehler ............................................... 167 sys ......................................................... 199, 260 Systemton ......................................... 255, 436 T tan() .................................................................. 89 target Thread ...................................................... 242 Tastaturereignis (GUI) ............................ 400 Taste F5 .................................................. 29, 171 Teilbereich einer Sequenz .................... 100 Teilmenge .................................................... 128 Teiltext ersetzen ....................................... 104 Terminal ................................................ 31, 471 TEXT (SQL) ................................................... 340 text/html ..................................................... 313 textarea (HTML) ........................................ 323 Text-Widget ................................................ 382 Thread Ausnahme .............................................. 246 globale Daten ........................................ 244 Identifikation ........................................ 243 Klasse ........................................................ 242 threading Modul ....................................................... 241 time ................................................................ 225 localtime() .............................................. 225 mktime() .................................................. 229 sleep() ............................................. 232, 461 strftime() ................................................. 227 time() ........................................................ 225 time() ............................................................. 225 Tk .................................................................... 371 mainloop() .............................................. 373 tkinter ....................................................... 373 tkinter ........................................................... 371 Button ...................................................... 373 Menu ......................................................... 424 messagebox ........................................... 431 PhotoImage ........................................... 378 Scrollbar .................................................. 390 Tk ................................................................ 373 tkinter.messagebox askokcancel() ......................................... 432 askretrycancel() .................................... 432 askyesno() ............................................... 432 Modul ....................................................... 431 show() ....................................................... 432 showerror() ............................................. 432 showinfo() ............................................... 432 showwarning() ...................................... 432 tkinter.scrolledtext ScrolledText() ......................................... 385 Toleranz .......................................................... 91 Tonsignal ..................................................... 289 Toplevel-Widget ........................................ 436 True ................................................................ 132 try ..................................................................... 66 Tupel entpacken ............................................... 120 leer ............................................................. 132 mehrdimensional ................................ 117 verpacken ............................................... 120 type() ............................................................... 86 Typhinweis ............................................ 71, 83 U Überladen ............................................. 71, 208 Überschreiben ........................................... 215 Übungsaufgaben ........................................ 20 Ubuntu Linux ....................................... 18, 21 Umrechnung in dual ........................................................ 85 in hexadezimal ....................................... 84 in oktal ....................................................... 84 Umwandlung in ganze Zahl ........................................... 87 in Zahl ............................................... 37, 106 in Zeichenkette ..................................... 108 und bitweise ...................................................... 93 logisch (Python) ..................................... 46 logisch (SQL) .......................................... 347 Ungleich Python ........................................................ 42 SQL ............................................................. 347 Unicode ........................................................ 192 Literal ....................................................... 446 UNIX Befehle ...................................................... 471 UPDATE (SQL) ............................................ 352 update() ........................................................ 123 urlencode() .................................................. 312 urllib Modul ....................................................... 303 urllib.parse Modul ....................................................... 303 urlencode() ............................................. 312 urllib.request Modul ....................................................... 303 urlopen() .................................................. 306 urlretrieve() ............................................ 306 urlopen() ...................................................... 306 493 Index Index urlretrieve() ................................................. 306 UTF-8 ............................................................. 304 V value FieldStorage ........................................... 316 ValueError ..................................................... 65 values() Dictionary ..................................... 124, 196 VARCHAR (SQL) ......................................... 358 Variable ................................................... 26, 36 kontrollieren .......................................... 172 Name .......................................................... 27 Vererbung ................................................... 213 mehrfach ................................................. 217 Vergleichsoperator .................................... 41 Verschlüsselung .......................................... 41 Verzeichnis aktuell ...................................................... 471 anlegen .................................................... 472 Inhalt ........................................................ 471 löschen ..................................................... 472 übergeordnet ......................................... 471 verwalten ................................................ 284 wechseln .................................................. 472 Verzweigung ................................................ 41 einfache ..................................................... 42 mehrfache ................................................ 44 View ............................................................... 123 Vordergrundfarbe (GUI) ........................ 376 Vorzeichen .................................................... 50 W Wahrheitswert ........................................... 132 Warnung (GUI) .......................................... 432 WAV-Datei ................................................... 255 Webbrowser ................................................ 305 webbrowser Modul ....................................................... 326 open() ....................................................... 326 Webserver ................................................... 303 Programmierung ................................. 312 WHERE (SQL) .............................................. 344 while ................................................................ 60 494 Widget ........................................................... 371 add_cascade() ....................................... 428 add_checkbutton() .............................. 428 add_command() .................................. 427 add_radiobutton() .............................. 428 add_separator() ................................... 427 anchor ...................................................... 376 anordnen ................................................ 405 bewegen ........................................ 418, 419 bg ............................................................... 376 bind() .............................................. 403, 404 borderwidth ........................................... 376 command ............................ 373, 394, 397 configure() .............................................. 375 destroy() .................................................. 373 DoubleVar .............................................. 393 Eigenschaft ändern ............................. 374 Ereignis .................................................... 403 fg ................................................................ 376 font ............................................................ 376 get() ........................................ 380, 387, 393 grid() ......................................................... 412 height ....................................................... 376 image ....................................................... 376 insert() ............................................ 384, 387 IntVar ....................................................... 393 offvalue ................................................... 397 onvalue .................................................... 397 pack() .............................................. 373, 406 place() ............................................. 414, 416 relief .......................................................... 376 scrollbar .................................................. 389 set() .................................................. 391, 393 show .......................................................... 380 StringVar ................................................. 393 Toplevel ................................................... 436 Variable ................................................... 391 width ......................................................... 376 yview() ...................................................... 391 width ............................................................. 376 Wiederholen-Abbrechen-Box (GUI) 432 Wiederholung .............................................. 51 Windows ........................................................ 18 Windows 10 .................................................. 20 winsound ..................................................... 255 Beep() .............................................. 256, 290 PlaySound() ............................................ 256 Wochentagsnummer .............................. 227 write() ............................................................ 260 writelines() .................................................. 260 Wurzel ............................................................. 91 wxPython .................................................... 371 wxWidgets ................................................... 371 X x (Event-Objekt) ........................................ 403 x (Format) .................................................... 155 x_root (Koordinate) ................................ 431 XAMPP ................................................ 303, 469 Y y (Event-Objekt) ........................................ 403 y_root (Koordinate) ................................. 431 yview() ........................................................... 391 Z Zahl (Forts.) mit Nachkommastellen ...................... 85 Zähler eines Bruchs ................................... 95 Zeichenkette ................................................. 97 beginnt mit ............................................ 105 Eingabe ...................................................... 98 endet mit ................................................. 105 mehrzeilig ................................................. 98 partitionieren ........................................ 105 zerlegen ................................................... 105 Zeilenende ................................................... 151 Zeichen ..................................................... 274 Zeilenumbruch in Code ......................... 145 Zentralwert ................................................. 196 zip() ................................................................ 161 Zufallszahl Generator .................................................. 40 Generator initialisieren ....................... 41 liefern ......................................................... 41 Zuweisung .............................................. 26, 36 kombinierte Operatoren ................... 143 mehrfach ................................................. 118 Zahl ................................................................... 83 als Bruch annähern ............................... 96 ganze .......................................................... 83 495 Wissen, wie’s geht. Thomas Theis ist Diplom-Ingenieur für Technische Informatik und hat langjährige Erfahrung als ITDozent, unter anderem an der Fachhochschule Aachen. Er leitet Schulungen zu C/C++, Visual Basic und Webprogrammierung und ist Autor zahlreicher erfolgreicher Fachbücher. Einsteiger und Neulinge schätzen seine Fähigkeit, auch komplizierte Sachverhalte leicht verständlich zu machen und dabei auch den Spaß am Programmieren nie aus den Augen zu verlieren. Thomas Theis Einstieg in Python Ideal für Programmiereinsteiger 495 Seiten, broschiert, 5. Auflage, Juni 2017 24,90 Euro, ISBN 978-3-8362-4525-8 www.rheinwerk-verlag.de/4374 Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Gerne dürfen Sie diese Leseprobe empfehlen und weitergeben, allerdings nur vollständig mit allen Seiten. Die vorliegende Leseprobe ist in all ihren Teilen urheberrechtlich geschützt. Alle Nutzungs- und Verwertungsrechte liegen beim Autor und beim Verlag. Teilen Sie Ihre Leseerfahrung mit uns!