Pascal Schmidt 25. November 2010 Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010
The story so far… Phyton ist mächtig, einfach, portabel, frei, erweiterbar, objektorientiert. Primitive Datentypen: (Plain/Long) Integer, und String Komplexe Datentypen: Liste(array) und Tuple, Assoziative Liste (dictionary), Set Für alle Datentypen Unmengen an vordefinierten brauchbaren Funktionen Blöcke durch gleichmäßige Einrückung. Nix da: pass! Boolean und Vergleichsoperatoren wie gehabt, aber: in Phyton hat alles einen Wahrheitswert. Kontrollstrukturen: if-elif-else, while-else, for-else (nützlich: range()-Fkt.) kein switch-Äquivalent. Definieren eigener Funktionen: def Name (Arg1,…ArgN): FunctBody Dynamische Typisierung!
Pascal Schmidt: Die Programmiersprache Python – Teil II Gliederung 1. Getting started with Python Programmierbeispiel 2. Fehlerbehandlung ..mithilfe von Exceptions Arten von Ausnahmen try-except-else 3. Objektorientierte Programmierung Grundlegende Realisierung OOP in practice: Klasse(n)! Vererbung 4. GUI-Programmierung Vom Editor zur grafischen Oberfläche 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Getting started with Python Zum Ausprobieren: Schreibt eine Funktion, die für eine Zahl n bestimmt, ob es sich um eine Primzahl handelt. Falls nicht, soll eine Zerlegung von n angegeben werden. Lösung – Versuch 1 Falsch eingerückt 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Getting started with Python Zum Ausprobieren: Schreibt eine Funktion, die für eine Zahl n bestimmt, ob es sich um eine Primzahl handelt. Falls nicht, soll eine Zerlegung von n angegeben werden. Lösung – Versuch 2 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II Gliederung 1. Getting started with Python Programmierbeispiel 2. Fehlerbehandlung ..mithilfe von Exceptions Arten von Ausnahmen try-except-else 3. Objektorientierte Programmierung Grundlegende Realisierung OOP in practice: Klasse(n)! Vererbung 4. GUI-Programmierung Vom Editor zur grafischen Oberfläche 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Fehlerbehandlung mit exceptions Fehler während der Laufzeit löst Erzeugung eines Exception-Objekt aus, das Informationen über den Fehler enthält; anschließend Programmabbruch. Laufzeitfehler = eigentlich alle, außer Syntaxfehler. Diese müssen durch Syntaxkorrektur behoben werden, bevor Programm startet. 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Fehlerbehandlung mit exceptions Beispiel für das Erzeugen einer Exception: Ungültige arithmetische Operation (Division durch Null) Funktion wird ausgeführt und zur Laufzeit mit ZeroDivisionError abgebrochen. Frage für Füchse: Warum ist das ein Laufzeitfehler? 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Arten von Laufzeitfehlern Jede Fehlermeldung gibt an, wo es zum Fehler kam sowie Name und Argument der Exception Häufige Exceptions: Ausnahme Bedeutung NameError Zugriff auf nicht-existierende(n) Namen (= Variable) TypeError Anzahl/Typ der Argumente bei Funktionsaufruf unpassend, Indexierung von Liste/String mit String (wie bei Ass. Liste) AttributeError Zugriff auf eine nicht-existierende Methode IndexError Zugriff auf nicht-existierenden Index bei Liste/Tuple ImportError Zu importierendes Modul wird nicht gefunden KeyError Zugriff auf nicht-existierenden Index bei Assoziativer Liste 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Arten von Laufzeitfehlern Bereits gesehen: Python verwendet dynamische Typisierung. Einfach, aber deshalb auch fehleranfällig. Beispiel: 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II try-except-else Bisher: Fehler Exception Programmabbruch! Mehr Flexibilität in der Fehlerbehandlung durch das try-except-Konstrukt. Syntax und Semantik: Was passiert, wenn im try-Block ein Fehler auftritt, der nicht explizit abgefangen wird? Falls exception geworfen wird, wird die entsprechende except-Anweisung ausgeführt. Kein Programmabbruch! try: Codeblock except Ausnahme: Code zur Fehlerbehandlung Mehrere except-Blöcke zum Abfangen verschiedener Fehler möglich. 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II try-except-else Beispiel: 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II try-except-else Beispiel – mit kritischen Anmerkungen: Hier verlieren wir Informationen über den Fehler an sich: Wurde für den Parameter zahl ein falscher Wert übergeben? Wurde für den Parameter name ein falscher Wert übergeben? Wurde in einer print-Methode das Umwandeln einer Zahl in einen String vergessen? 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II try-except-else Zusätzliche Flexibilität durch else-Erweiterung. Wird ausgeführt, wenn keine der abgefangenen Ausnahmen aufgetreten ist. Syntax: Merke: Kein else ohne except. Beispiel try: a = 5 / 2 except: print(“something wrong“) else: print(“everything fine“) try: Codeblock except Ausnahme, Argument: Code zur Fehlerbehandlung else: 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II try-except-else Bisher: Code aus try-Block oder zur Fehlerbehandlung wird ausgeführt. Mit finally geht beides! Syntax: Semantik: Der finally-Block wird auf jeden Fall ausgeführt, egal ob es im try-Block eine Exception gab oder nicht. Achtung: finally nicht in Kombination mit except oder else möglich. try: Codeblock finally: 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II Gliederung 1. Getting started with Python Programmierbeispiel 2. Fehlerbehandlung ..mithilfe von Exceptions Arten von Ausnahmen try-except-else 3. Objektorientierte Programmierung Grundlegende Realisierung OOP in practice: Klasse(n)! Vererbung 4. GUI-Programmierung Vom Editor zur grafischen Oberfläche 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Grundlegende OOP-Realisierung Elemente: Klassen (Schablonen) Instanzen (konkretes Objekt, von einer Klasse abgeleitet) Attribute (Variablen einer Instanz) Methoden (Funktionen, die in einer Klasse definiert sind) Prinzip der Kapselung, Kommunikation zwischen verschiedenen Objekten erfolgt durch Methodenaufrufe. („Nachrichten“) Python realisiert Prinzip der Mehrfachvererbung Kunde_1 Konto_1 Kunde Konto Kunde_1.abheben() Konto_1.auszahlen() Klasse Instanz Methode 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II Erzeugen von Klassen Syntax zur Definition einer Klasse: Klassen enthalten im Allgemeinen Funktionsdefinitionen, aber auch andere Anweisungen möglich Klassen erlauben Instanziierung und Attributreferenzen Beispiel: 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Struktur einer typischen Klasse Typischerweise enthält eine Klasse einen Konstruktor, der automatisch bei der Instanziierung aufgerufen wird (und die initiale Belegung der Attribute erledigt), sowie Methoden, die die Funktionalität der Instanzen bereitstellen. Beispiel: 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II Besonderheiten Die Benennung ist beliebig – self ist jedoch übliche Konvention. Muss bei der Definition einer Funktion immer als erstes Argument stehen. Bezeichnet konkrete Instanz, mit der gerade gearbeitet wird Guido van Rossum: Why explicit self has to stay, in: Neopythonic, 18.10.2008 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II Besonderheiten Attribute der Klasse stehen im Konstruktor, nicht vorher aufgelistet! Ergänzen weiterer Attribute geht aber: 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Das Kunden-Konto-Beispiel Kunde_1.abheben() Konto_1.auszahlen() 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Das Kunden-Konto-Beispiel Testlauf: 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II Einfache Vererbung Die abgeleitete Klasse erbt alle Methoden und Attribute der ableitenden Klasse Zusätzlich kann abgeleitete Klasse weitere Methoden und Attribute enthalten und/oder Methoden überschreiben Syntax: Beispiel: Class Name(Basisklasse): Code Testlauf: 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II Mehrfache Vererbung Im Gegensatz zu JAVA unterstützt Python Mehrfachvererbung: Eine Klasse kann von mehreren Basisklassen erben. Abgeleitete Klasse erbt alle Attribute und Methoden von allen Basisklassen, überschreibt ggf. Methoden. Syntax: Problem: Was passiert, wenn mehrere Basisklassen eine gleichlautende Methode implementieren? Welche wird dann vererbt? Antwort: Die Auflistung der Basisklassen in der Klassendefinition erfolgt in aufsteigender Priorität: Es wird von der zuletzt aufgelisteten Klasse geerbt, die die Methode implementiert. … Class Name(Basisklasse1,…,BasisklasseN): Code 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II Gliederung 1. Getting started with Python Programmierbeispiel 2. Fehlerbehandlung ..mithilfe von Exceptions Arten von Ausnahmen try-except-else 3. Objektorientierte Programmierung Grundlegende Realisierung OOP in practice: Klasse(n)! Vererbung 4. GUI-Programmierung Vom Editor zur grafischen Oberfläche 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
GUI-Programmierung für die Schule? Benutzen die GUI-Bibliothek Tkinter, die standardmäßig mit Python ausgeliefert wird: Simple and efficient! (http://docs.python.org/library/tkinter.html#) Zentrale Begriffe/Konzepte: Ein Widget ist ein grafisches Element, mit dem man GUIs erstellen kann (z.B. Labels, Textboxen,…) , realisiert in Python als Klasse. Der Layout-Manager wird in Tkinter als Methode des Widgets implementiert, und verwaltet dieses (Beispiel folgt). Vorgehen: 1. Problem konventionell lösen (Editor) 2. Widgets erzeugen und anpassen 3. Funktionalität in Widgets einbauen 4. Endlosschleife, die Benutzeraktionen auswertet Alles klar? 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
GUI-Programmierung am Beispiel Aufgabe: Ausgabe „Hallo Pascal“ auf sys.stdout (GUI-Zusatz: Nach Betätigen eines entsprechenden Buttons) step 1: konventionelle Lösung als Funktion step 2: Widgets erzeugen und anpassen step 3: Funktionalität übergeben step 4: Endlosschleife starten 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II Einfache Widgets Vielzahl an einfachen Widgets, einfache Syntax: Beispiele: Konfiguration der Widgets (Größe, Schriftart, Farbe,…) auch nachträglich noch möglich Syntax: Label mit Beschriftung Grafik Buttons Entries Radiobutton, Checkbutton Widget (Oberfläche, Optionen …) 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II Layout Layout-Manager kümmert sich um die Darstellung der Widgets auf dem Bildschirm. Bisher lediglich: pack-Layout-Manager ohne große Funktionalität (nur pack() ). Allerdings: Selbst bei pack()-Funktion viele Optionen möglich: side: TOP, LEFT, BOTTOM , RIGHT fill: NONE, BOTH, X, Y expand: YES, NO Fazit: Einfach zu bedienen, nette Features, aber: noch zu unflexibel. Deutlich flexibler: grid-Layout-Manager. Verwaltet Widgets in einer 2D-Liste, die man als Tabelle vorstellen kann (Verschachtelung innerhalb einer Zeile ist möglich!) 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Elaboriertes Beispiel mit grid-Layout 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Ausblick – es gibt auch noch… …Oberflächen: Widgets, die Oberflächen erzeugen, auf denen weitere Widgets platziert werden können, z.B. Frame, Dialogfeld,… … Ereignisse: Reaktion auf Ereignisse (Benutzereingaben: Mausklick, Doppelklick, Eingabe eines Zeichens) wird durch die bind()-Methode der Widgets realisiert: Widget.bind(Ereignis, Funktion) … komplexere Widgets: Listbox, Text, Canvas, Scrollbar, Menu … Mein Fazit: Schöne Spielereien, die sich mit vertretbarem Aufwand realisieren lassen! Euer Fazit? 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II
Pascal Schmidt: Die Programmiersprache Python – Teil II Literatur Martin Uzak(2002): Python 2.x, Das Einsteigerseminar, 384 S. Python Dokumentation (insbesondere auch für Änderungen bei neueren Python-Versionen): http://docs.python.org/ 25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II