Programmierung in Python imperativ, objekt-orientiert dynamische Typisierung rapid prototyping Script-Sprache Funktionales und rekursives Programmieren P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 1 Programmierung in Python Datentypen: ganze Zahlen, Gleitkommazahlen (Double), Strings. Tupel, Listen, Arrays, vordefinierte Listenfunktionen: map, filter, sort, reverse,... Fehlerbehandlung zur Laufzeit: Exception-Handling Objektorientierung: Klassen, Methoden P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 2 Python: Struktur eines imperativen Programms Python-Programm-File besteht aus: Deklarationen Definitionen von Funktionen. Funktionsdefinitionen: Wesentlich Bestandteile: Befehle (Anweisungen, Kommandos), wie Zuweisungen, Sprungbefehle, Ein/Ausgabebefehle mit Seiteneffekten Ausdrücke mit Returnwert P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 3 Python als Taschenrechner Eingabe in den Interpreter: Beispiele >>> >>> >>> >>> 25 >>> 5.0 >>> a = 3 b = 4 c = a**2 + b**2 c print math.sqrt(c) P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 4 Syntax von wesentlichen Konstrukten für weitere Konstrukte sowie Details zur Syntax siehe Tutorials und Handbücher Zuweisung (Assignment) Variable = Ausdruck Auswertung: 1. Berechne: Wert des Ausdruckes dazu: Werte von Variablen im Speicher nachschauen Resultat: ein im Speicher liegendes Objekt“ ” 2. Zuweisung: Wert zu Namen der Variablen Ein Objekt kann mehrere Namen besitzen. Deklaration von Variablen(namen) in einer Funktionsdefinition erfolgt automatisch P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 5 Zuweisung mit Arithmetische Operatoren Variable op= Ausdruck Hierbei kann op einer der vordefinierten Operatoren sein: +,*,-,/, ... >>> >>> >>> 20 >>> >>> 100 a= 100 a /= 5 a a *= 5 a P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 6 Mehrfach-Zuweisung (scheinbar parallele) Mehrfach-Zuweisung: x1, . . . xn = e1, . . . , en wobei xi Variablen und ei Ausdrücke sind Auswertung des Ausdrucks x1, . . . xn = s1, . . . , sn: 1. 2. Wert aller Ausdrücke si Zuweisung der Werte si zu den Variablennamen xi P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 7 if-then-else-Konstrukt in Python if Bedingung : Anweisungen wenn Bedingung wahr else: Anweisungen , wenn Bedingung falsch Doppelpunkte :“statt Schlüsselwort then ” Einrückung bestimmt die Blockstruktur weitere Varianten von if-then-else: ohne else Zweig mit zusätzlichen Abfragen (elif-Zweigen). P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 8 while-Schleife zur Iteration while Bedingung: Schleifenkörper Der Anweisungsblock des Schleifenkörpers wird solange ausgeführt, bis die Bedingung nicht (mehr) erfüllt ist. Im Schleifenrumpf verwendbar: break continue P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 9 Beispiel zu while >>> a=10 >>> while a > 0: ... print a ... a = a-1 ... 10 9 8 7 6 5 4 3 2 1 P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 10 Funktions- und Prozedurdefinitionen def Funktioname(parameter1, parameter2, . . .): Anweisungen Rückgabewert mittels: return e None, falls return-Anweisung weggelassen wurde Prozeduraufruf: P raktische Inf ormatik 1, W S f (s1, . . . , sn) bei n-stelligem f . mit voller Argumentanzahl und Argumenten eingeklammert 2004/05, F olien P ython−1, (6. Dezember2004) Seite 11 Komplexe Zahlen Paar von zwei Double-Zahlen: Real- und Imaginär-Teil >>> a=1.5+0.5j >>> a.real 1.5 >>> a.imag 0.5 >>> abs(a) 1.5811388300841898 >>> a*a (2+1.5j) >>> P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 12 Strings einfache Strings Hello world“ ” und Unicode Strings: >>> u’Hello World !’ u’Hello World !’ P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 13 Module Benutzung durch import-Anweisungen und qualifizierte Aufrufe: >>> import cmath >>> a=1.5+0.5j >>> cmath.sin(a) (1.1248012470579227+0.036860823712804462j) >>> Wird noch besprochen P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 14 Beispiel: wurzel ala Python: def wurzel(x): return wurzeliter(1.0,x) def wurzeliter(schaetzwert,x): if gutgenug(schaetzwert,x): return schaetzwert else: return wurzeliter(verbessern(schaetzwert, x), x) def quadrat(x): return x*x def gutgenug(schaetzwert,x): return (abs ((quadrat(schaetzwert) - x) / x) < 0.00001) def verbessern(schaetzwert,x): return mittelwert(schaetzwert, (x / schaetzwert)) def mittelwert(x,y): return (x + y) / 2.0 >>> wurzel(2.0) 1.4142156862745097 >>> P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 15 Referentielle Transparenz gilt nicht in Python: count = 0 def f(x): global count count = count + x return count f (1) == f (1) ergibt 0 Seiteneffekt ändert die globale Variable count. P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 16 Flussdiagramm am Beispiel ggt Der größte gemeinsame Teiler kann durch die Prozedur ggtpy berechnet werden: def ggtpy(x,y): if x <= 0 or y <= 0: print ’Eingabe in GGT muss positiv sein’ else: while x != y: if x > y: x = x - y else: y = y - x return x P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 17 ggt: schnellere Version def ggt(x,y): if y == 0: return x else: return ggt(y, (x % y)) Einige Beispielauswertungen: >>> ggtpy(1234,4321) 1 >>> ggtpy(1243,3421) 11 P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 18 Flussdiagramm zu ggt x := a; y := b drucke x Ja nein x=y Stop Ja x>y x := x-y nein y := y-x Flussdiagramme sind oft von begrenztem Nutzen, da sie zu groß werden P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 19 Wert-Vertauschung ohne Hilfsvariable Vertauschung von Variablenwerten ohne Hilfsvariable: >>> >>> >>> >>> 2 >>> 1 >>> a = 1 b = 2 a,b = b,a a b P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 20 Wert-Vertauschung mit Hilfsvariable c = a a = b b = c ####### >>> a = >>> b = >>> c = >>> a = >>> b = >>> a 2 >>> b 1 >>> Im Python Interpreter: 1 2 a b c P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 21 Mehrfachzuweisung ist sequentiell >>> a,b,a = 1,2,3 >>> a 3 >>> P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 22 Fibonacci in Python, iterativ def fib(n): a,b = 0,1 while b < n: print b, a,b = b,a+b >>> fib(1000) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 23 Boolesche Funktionen >>> a = 1 >>> not a False >>> a = 0 >>> b = 1 >>> a or b 1 >>> a and b 0 >>> del b >>> b Traceback (most recent call last): File "<input>", line 1, in ? NameError: name ’b’ is not defined >>> a 1 >>> a or b 1 P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 24 Boolesche Funktionen not, or, and wirken (fast) wie die Booleschen Operatoren. or, and werten von links nach rechts aus Ersatzdefinitionen: def or(x,y): if x: return x else: return y def and(x,y): if x: return y else: return x def not(x): if x == 0: return 1 else: return 0 P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 25 Iterative Prozesse und Iterative Funktionen def fakultaetlin(n): a = faktiter(1,1,n) return a def faktiter(produkt,zaehler,max): if zaehler > max: return produkt else: return faktiter(zaehler * produkt,zaehler + 1,max) def faktwhile(n): produkt = 1 zaehler = 1 max = n while zaehler <= max: produkt = (zaehler * produkt) zaehler = zaehler + 1 return produkt P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 26 Module in Python Module dienen zur • Strukturierung / Hierarchisierung • Kapselung: • Wiederverwendung P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 27 Module in Python Jede Python-Programm-File ist ein Modul Kein eigener Modulkopf mit export-Liste Modulimport mittels import: import Modulname Re-Initialisierung: reload(Modulname) P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 28 Beispiel in Python Datei Fib.py, Modul Fib: def fib(n): a,b = 0,1 while b < n: print b, a,b = b,a+b X=10 fib(X) # Diese Zeilen werden beim Import # ausgefuehrt Beim Import des Moduls Fib >>> import Fib 1 1 2 3 5 8 P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 29 Aufruf von Funktionen aus Modul Zugriff auf Namen aus importierten Modulen: qualifiziert: name.Name P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 30 Modul- Zugriff auf importierte Variablen Nach import Fib: >>> X Traceback (most recent call last): File "<stdin>", line 1, in ? NameError: name ’X’ is not defined >>> Fib.X 10 >>> Fib.fib(5) 1 1 2 3 P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 31 Lokale Aliase für Modulnamen Importier unter Alias-Namen ist möglich: >>> 1 1 >>> 1 1 import Fib as Fibonacci 2 3 5 8 Fibonacci.fib(5) 2 3 P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 32 Importieren mittels from Nur selektierte Funktionen importieren: from Modulname import Definitionsliste from Modulname import * Beispiel: >>> 1 1 >>> 1 1 from Fib import fib 2 3 5 8 fib(5) 2 3 P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 33 Importieren mittels from ... *: Beispiel Vorsicht: Unerwartete Effekte dabei X = 10; def printer(): global X: print X >>> >>> 10 >>> 10 >>> >>> 10 >>> 20 from Printer import * X printer() X = 20 printer() X P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 34 Datenkapselung in Python Ist in der Verantwortung des Programmierers. In Python gibt es kein (echtes) Verstecken von Funktionen. Man kann auf sämtliche definierten Namen des importierten Moduls qualifiziert zugreifen. Konvention: Namen, die mit _ beginnen gelten als versteckt. P raktische Inf ormatik 1, W S 2004/05, F olien P ython−1, (6. Dezember2004) Seite 35