33
Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

Embed Size (px)

Citation preview

Page 1: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

Die Programmiersprache Python - was sie in der Schule leisten kann

(Einführung Teil II)

Pascal Schmidt25. November 2010

Page 2: 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!

Page 3: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 4: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 5: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 6: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 7: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 8: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 9: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 10: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 11: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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.

Page 12: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

try-except-else

Beispiel:

25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 12

Page 13: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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?

Page 14: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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“)

Page 15: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 16: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 17: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 18: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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:

Page 19: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 20: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 21: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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:

Page 22: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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()

Page 23: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

Das Kunden-Konto-Beispiel

25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 23

Testlauf:

Page 24: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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:

Page 25: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 26: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 27: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 28: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 29: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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:

Page 30: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 31: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

Elaboriertes Beispiel mit grid-Layout

25.11.2010 Pascal Schmidt: Die Programmiersprache Python – Teil II 31

Page 32: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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

Page 33: Die Programmiersprache Python - was sie in der Schule leisten kann (Einführung Teil II) Pascal Schmidt 25. November 2010

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