Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal...
-
Upload
liese-gentner -
Category
Documents
-
view
108 -
download
1
Transcript of Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal...
Die Programmiersprache Python - was sie in der Schule leisten kann
(Einführung Teil II)
Pascal Schmidt25. 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!
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 3
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
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 4
Falsch eingerückt
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 5
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 6
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 7
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 8
Arten von Laufzeitfehlern
Jede Fehlermeldung gibt an, wo es zum Fehler kam sowie Name und Argument der Exception
Häufige Exceptions:
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 9
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
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 10
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?
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 11
try: Codeblock
except Ausnahme: Code zur Fehlerbehandlung
except Ausnahme: Code zur Fehlerbehandlung
Falls exception geworfen wird, wird die entsprechende except-Anweisung ausgeführt. Kein Programmabbruch!
Mehrere except-Blöcke zum Abfangen verschiedener Fehler möglich.
try-except-else
Beispiel:
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 12
try-except-else
Beispiel – mit kritischen Anmerkungen:
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 13
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?
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.
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 14
try: Codeblock
except Ausnahme, Argument: Code zur Fehlerbehandlung
else: Codeblock
Beispiel
try: a = 5 / 2
except: print(“something wrong“)
else: print(“everything fine“)
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.
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 15
try: Codeblock
finally: Codeblock
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 16
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
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 17
Kunde_1 Konto_1
Kunde KontoKunde_1.abheben()
Konto_1.auszahlen()
Klasse
Instanz
Methode
Erzeugen von Klassen
Syntax zur Definition einer Klasse:
Klassen enthalten im Allgemeinen Funktionsdefinitionen, aber auch andere Anweisungen möglich
Klassen erlauben Instanziierung und Attributreferenzen
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 18
Beispiel:
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 19
Besonderheiten
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 20
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
Besonderheiten
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 21
Attribute der Klasse stehen im Konstruktor, nicht vorher aufgelistet!
Ergänzen weiterer Attribute geht aber:
Das Kunden-Konto-Beispiel
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 22
Kunde_1 Konto_1
Kunde_1.abheben()
Konto_1.auszahlen()
Das Kunden-Konto-Beispiel
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 23
Testlauf:
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:
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 24
Class Name(Basisklasse): Code
Testlauf:
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.
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 25
Class Name(Basisklasse1,…,BasisklasseN): Code
…
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 26
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 anpassen3. Funktionalität in Widgets einbauen4. Endlosschleife, die Benutzeraktionen auswertet
Alles klar?
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 27
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 28
Einfache Widgets
Vielzahl an einfachen Widgets, einfache Syntax: Beispiele:
Konfiguration der Widgets (Größe, Schriftart, Farbe,…) auch nachträglich noch möglich
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 29
Label mit Beschriftung Grafik Buttons Entries Radiobutton, Checkbutton
Widget (Oberfläche, Optionen …)
Syntax:
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 , RIGHTfill: NONE, BOTH, X, Yexpand: 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 30
Elaboriertes Beispiel mit grid-Layout
25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 31
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 32
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 33