Programmierung in Python - ki.informatik.uni-frankfurt.de · Programmierung in Python imperativ,...

Preview:

Citation preview

Programmierung in Python

imperativ,

objekt-orientiert

dynamische Typisierung

rapid prototyping

Script-Sprache

Funktionales und rekursives Programmieren

Praktische Informatik 1, WS 2004/05, Folien Python−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

Praktische Informatik 1, WS 2004/05, Folien Python−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

Ausdrucke mit Returnwert

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 3

Python als Taschenrechner

Eingabe in den Interpreter: Beispiele

>>> a = 3

>>> b = 4

>>> c = a**2 + b**2

>>> c

25

>>> print math.sqrt(c)

5.0

>>>

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 4

Syntax von wesentlichen Konstrukten

fur weitere Konstrukte sowie Details zur Syntax siehe Tutorials und Handbucher

Zuweisung (Assignment)

Variable = Ausdruck

Auswertung:1. Berechne: Wert des Ausdruckes

dazu: Werte von Variablen im Speicher nachschauenResultat: 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

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 5

Zuweisung mit Arithmetische Operatoren

Variable op= Ausdruck

Hierbei kann op einer der vordefinierten Operatoren sein: +,*,-,/, ...

>>> a= 100

>>> a /= 5

>>> a

20

>>> a *= 5

>>> a

100

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 6

Mehrfach-Zuweisung

(scheinbar parallele) Mehrfach-Zuweisung:

x1, . . . xn = e1, . . . , en

wobei xi Variablen und ei Ausdrucke sind

Auswertung des Ausdrucks x1, . . . xn = s1, . . . , sn:

1. Wert aller Ausdrucke si2. Zuweisung der Werte si zu den Variablennamen xi

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 7

if-then-else-Konstrukt in Python

if Bedingung:Anweisungen wenn Bedingung wahr

else:

Anweisungen, wenn Bedingung falsch

Doppelpunkte”:“statt Schlusselwort then

Einruckung bestimmt die Blockstruktur

weitere Varianten von if-then-else:

ohne else Zweig

mit zusatzlichen Abfragen (elif-Zweigen).

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 8

while-Schleife zur Iteration

while Bedingung:Schleifenkorper

Der Anweisungsblock des Schleifenkorpers wird solange ausgefuhrt, bis

die Bedingung nicht (mehr) erfullt ist.

Im Schleifenrumpf verwendbar:

break

continue

Praktische Informatik 1, WS 2004/05, Folien Python−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

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 10

Funktions- und Prozedurdefinitionen

def Funktioname(parameter1,parameter2, . . .):Anweisungen

Ruckgabewert mittels: return e

None, falls return-Anweisung weggelassen wurde

Prozeduraufruf: f(s1, . . . , sn) bei n-stelligem f .mit voller Argumentanzahlund Argumenten eingeklammert

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 11

Komplexe Zahlen

Paar von zwei Double-Zahlen: Real- und Imaginar-Teil

>>> a=1.5+0.5j

>>> a.real

1.5

>>> a.imag

0.5

>>> abs(a)

1.5811388300841898

>>> a*a

(2+1.5j)

>>>

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 12

Strings

einfache Strings”Hello world“

und

Unicode Strings:

>>> u’Hello World !’

u’Hello World !’

Praktische Informatik 1, WS 2004/05, Folien Python−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

Praktische Informatik 1, WS 2004/05, Folien Python−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

>>>

Praktische Informatik 1, WS 2004/05, Folien Python−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 andert die globale Variable count.

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 16

Flussdiagramm am Beispiel ggt

Der groß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

Praktische Informatik 1, WS 2004/05, Folien Python−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

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 18

Flussdiagramm zu ggt

x := a; y := b

x = ydrucke x

Stop

Ja nein

x > yJa

x := x-y

nein

y := y-x

Flussdiagramme sind oft von begrenztem Nutzen, da sie zu groß werden

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 19

Wert-Vertauschung ohne Hilfsvariable

Vertauschung von Variablenwerten ohne Hilfsvariable:

>>> a = 1

>>> b = 2

>>> a,b = b,a

>>> a

2

>>> b

1

>>>

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 20

Wert-Vertauschung mit Hilfsvariable

c = a

a = b

b = c

####### Im Python Interpreter:

>>> a = 1

>>> b = 2

>>> c = a

>>> a = b

>>> b = c

>>> a

2

>>> b

1

>>>

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 21

Mehrfachzuweisung ist sequentiell

>>> a,b,a = 1,2,3

>>> a

3

>>>

Praktische Informatik 1, WS 2004/05, Folien Python−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

Praktische Informatik 1, WS 2004/05, Folien Python−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

Praktische Informatik 1, WS 2004/05, Folien Python−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

Praktische Informatik 1, WS 2004/05, Folien Python−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

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 26

Module in Python

Module dienen zur

• Strukturierung / Hierarchisierung

• Kapselung:

• Wiederverwendung

Praktische Informatik 1, WS 2004/05, Folien Python−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)

Praktische Informatik 1, WS 2004/05, Folien Python−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 # Diese Zeilen werden beim Import

fib(X) # ausgefuehrt

Beim Import des Moduls Fib

>>> import Fib

1 1 2 3 5 8

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 29

Aufruf von Funktionen aus Modul

Zugriff auf Namen aus importierten Modulen: qualifiziert: Modul-

name.Name

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 30

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

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 31

Lokale Aliase fur Modulnamen

Importier unter Alias-Namen ist moglich:

>>> import Fib as Fibonacci

1 1 2 3 5 8

>>> Fibonacci.fib(5)

1 1 2 3

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 32

Importieren mittels from

Nur selektierte Funktionen importieren:

from Modulname import Definitionsliste from Modulname import *

Beispiel:

>>> from Fib import fib

1 1 2 3 5 8

>>> fib(5)

1 1 2 3

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 33

Importieren mittels from ... *: Beispiel

Vorsicht: Unerwartete Effekte dabei

X = 10;

def printer():

global X:

print X

>>> from Printer import *

>>> X

10

>>> printer()

10

>>> X = 20

>>> printer()

10

>>> X

20

Praktische Informatik 1, WS 2004/05, Folien Python−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 samtliche definierten Namen des importierten Moduls

qualifiziert zugreifen.

Konvention: Namen, die mit _ beginnen gelten als versteckt.

Praktische Informatik 1, WS 2004/05, Folien Python−1, (6. Dezember2004) Seite 35

Recommended