Python Kurs WWU Münster
Python Kurs WWU Münster
W ILHELMS -U NIVERSITÄT
M ÜNSTER
wissen leben
WWU Münster Stephan Rave 27.-31. März 2017
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 2 /130
Organisation
I Anwesenheitsliste
WWU Münster
wissen leben
I Vorkenntnisse?
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 3 /130
Python/NumPy Tutorials
I A Byte of Python
I Python-Tutorial
WWU Münster
I Dive Into Python 3
wissen leben
I Numpy-Tutorial
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 4 /130
Hilfe!
I Google
I stackoverflow
I Python 3 Sprach-Referenz
WWU Münster
wissen leben
I Python 3 Standardbibliothek-Referenz
I NumPy-Referenz
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 5 /130
Übersicht
WWU Münster
Tag 4: matplotlib, numerische Mathematik, sowie Klassen und Vererbung
wissen leben
in Python
Tag 5: Verschiedenes
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 6 /130
WWU Münster
Welche (Daten-)Struktur hat A?
wissen leben
I Überprüfung der Eingabe: erfüllt A notwendige Bedingungen an
Invertierbarkeit? Ist die Datenstruktur wie erwartet?
I A−1 berechnen, etwa mit Gauß-Algorithmus.
I Ausgabe: Matrix A−1 , falls A invertierbar, Fehlermeldung sonst.
I Probe: AA−1 = I? Was ist mit numerischen Fehlern?
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 7 /130
WWU Münster
I Die Vorlesung „Numerische Lineare Algebra” beschäftigt sich u.a. mit
wissen leben
der Theorie von Algorithmen zur Lösung großer linearer
Gleichungssysteme. Für die Umsetzung dieser Algorithmen verwenden
wir Programmiersprachen wie Python, Matlab, Julia, C, C++ oder
Fortran.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 8 /130
WWU Münster
Centrum Wiskunde und Informatica in Amsterdam veröffentlich.
wissen leben
I Python ist in den Versionen 2.x und 3.x verbreitet (nicht
abwärtskompatibel!). Wir werden Python 3 verwenden.
Achtung!
Supportende für Python 2 in 2020.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 9 /130
WWU Münster
I CPython ist ein ausführbares Programm (Binary), der sogenannte
wissen leben
Python-Interpreter, das diese Anweisungen so interpretiert, dass sie
vom Computer verarbeitet werden können
I Ein Python-Programm auszuführen bedeutet also, CPython mit
dem Python-Programm als Eingabe aufzurufen:
> python3 mein_programm.py
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 10 /130
WWU Münster
I Automatische Speicherverwaltung: Kein manuelles
wissen leben
(fehleranfälliges) anlegen und freigeben von Speicher.
I Whitespace sensitiv: Einrückung entscheidet über Gruppierung von
Anweisungen in logischen Blöcken.
1 fast!
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 11 /130
Einstieg in Python
WWU Münster
in dem die Datei liegt
wissen leben
> cd ordner/unterordner/unterunterordner
I Den Python-Interpreter aufrufen um das Programm zu starten, in
diesem Fall:
> python3 my_program.py
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 12 /130
Hello world!
hello_world.py
print ( " Hello world ! " ) # This is a comment
WWU Münster
Es folgt die explizite Ausführung der Datei im Terminal:
wissen leben
> python3 hello_world.py
Mit der Ausgabe:
Hello world!
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 13 /130
Hello world!
Aufgaben
(1) Reproduzieren Sie obiges Beispiel mit entsprechender Erstellung einer
.py Datei in einem geeigneten Ordner mit einem beliebigen Editor.
(2) Fügen Sie Ihrem Programm eine weitere Zeile hinzu, in der Sie einen
erneuten print Befehl mit einem selbst gewähltem String schreiben.
WWU Münster
wissen leben
(3) Python as Taschenrechner: Geben sie mit einer weiteren Zeile den
Wert von 9999 aus.2
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 14 /130
Lernkontrolle
(1) Zur Ausführung eines Python-Programms benötigt man ein(en) ...
(a) Python-Interpret. (b) Python-Compiler.
(c) Python-Skript.
(2) Die logische Unterteilung eines Python-Codes erfolgt per ...
(a) Klammersetzung mit {}. (b) Auslagerung in Datei.
(c) Einrückung.
WWU Münster
(3) Sie haben bereits die print Funktion kennengelernt. Welcher der
wissen leben
folgenden Anweisungen erzeugt einen Fehler?
(a) print(3) (b) print(3+3) (c) print(3+"3")
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 15 /130
WWU Münster
I Gleichzeitig einfache Installation des Python-Interpreters und
wissen leben
benötigter Pakete
I Funktionen:
I Editor zum Schreiben von Programmen
I Terminal zum Ausführen
I IPython-Shell zum direkten Eingeben von Python-Befehlen
I Debugger
,
I ... ,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 16 /130
Pyzo einrichten
Wenn Shell nicht automatisch ausgewählt: shell config-Menü öffnen
WWU Münster
wissen leben
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 17 /130
Pyzo einrichten
Python 3-Interpreter auswählen
WWU Münster
wissen leben
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 18 /130
Pyzo einrichten
Pyzo-Basis-Startbildschirm
WWU Münster
wissen leben
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 19 /130
WWU Münster
wissen leben
Der Editor:
I Programm wird im Editor geschrieben.
I Kompletter Code oder Teile können in der Shell ausgeführt werden.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 20 /130
Es gibt verschiedene Arten, wie Code aus dem Editor in der Shell
ausgeführt werden kann:
Interactive Mode
I Execute file: Kompletter Quellcode wird ausgeführt.
I Execute selection: Markierter Quellcode wird ausgeführt; ist nichts
WWU Münster
markiert, wird die aktuelle Zeile ausgeführt.
wissen leben
Interactive Mode entspricht praktisch dem Kopieren des Codes in die
aktuelle Shell, die den Code dann ausführt
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 21 /130
WWU Münster
Die Datei muss dazu abgespeichert werden.
wissen leben
Achtung!
Der Code kann beim Entwickeln schnell und einfach im Interactive Mode
ausgeführt werden, das fertige Programm muss am Ende aber auch im
Script Mode funktionieren!
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 22 /130
Pyzo
Aufgaben
Probieren Sie die Funktionen der Python-Shell und der
Pyzo-Run-Optionen aus:
I Benutzen Sie die print-Funktion direkt in der Shell.
WWU Münster
wissen leben
I Führen Sie den kompletten Code im Interactive Mode aus.
I Führen Sie nur eine Zeile aus.
I Führen Sie die Datei im Script Mode aus.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 23 /130
WWU Münster
wissen leben
Der Typ einer Variable legt dessen Zugehörigkeit zu einer Menge
gleichartiger Datenstrukturen und damit dessen Verwendungsmöglichkeiten
fest. Einfaches Beispiel sind int und float Typen in Python.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 24 /130
WWU Münster
print ( " y = " , y , " has the Type " , type ( y ))
wissen leben
x = x + 3
y = y * 2
print ( x )
print ( y )
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 25 /130
Built-in types
Built-in types in Python sind u.a.:
I Numeric types: integers (int), floating point numbers (float) und
complex numbers (complex)
WWU Münster
wissen leben
I Sequence types: list, tuple und range
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 26 /130
Operatoren
WWU Münster
wissen leben
(Echte) Division: z=x/y x=x/y bzw. x/=y
Gerundete Division: z=x//y x=x//y bzw. x//=y
Modulo: z=x%y x=x%y bzw. x%=y
Potenzieren: z=x**2 x=x**2
Negation: z=-x x=-x
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 27 /130
Strings
[Link]
# Strings koennen auf v e r s c h i e d e n e n
# Wegen d e f i n i e r t werden ( string l i t e r a l s )
name = ’ Bond ’
prename = " James "
WWU Münster
salutation = """ My name is """
wissen leben
# Ausgabe
agent = salutation + " " + name + " , " + prename + " " + name + " . "
print ( agent )
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 28 /130
Sequence Types
[Link]
# list ist mutable
l = list ()
print ( l )
l = [1 , ’2 ’ , list ()]
print ( l )
l [0] = 9
print ( l )
# tuple ist i m m u t a b l e
WWU Münster
t = tuple ()
wissen leben
t = ( ’ value ’ , 1)
print ( t )
t [0] = t [1] # error
# range ist i m m u t a b l e
r = range (0 ,4 ,1) # das selbe wie range (4)
print ( r )
print ( list ( r ))
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 29 /130
[Link]
l = [0 , 4 , 42]
k = l
k [1] = 7
print ( k )
print ( l )
WWU Münster
# int , float , str sind i m m u t a b l e !
wissen leben
i = 42
j = i
j += 1 # erzeugt 43 Objekt und weist es j zu
print ( j )
print ( i )
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 30 /130
[Link]
# set
s = set ()
print ( s )
s = set ([1 ,2 ,3])
print ( s )
print ( s == set ([1 ,2 ,2 ,1 ,3]))
WWU Münster
# dictionary
wissen leben
d = dict ()
d = { ’ key ’: ’ value ’}
d = { ’ Paris ’: 2.5 , ’ Berlin ’: 3.4}
print ( ’ Einwohner Paris : ’ , d [ ’ Paris ’] , ’ Mio ’)
print ( ’ Einwohner Berlin : ’ , d [ ’ Berlin ’] , ’ Mio ’)
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 31 /130
Aufgaben
(1) Schreiben Sie ein Python-Programm, in dem 2 verschiedene Variablen
x , y mit selbst gewählte Werte vom Typ float zugeweisen werden und
dann deren Summe, Differenz und Produkt ausgegeben werden.
(2) Konstruieren sie ein list-Objekt, das x und y enthält, und erweitern
Sie dieses schrittweise mit den Ergebnissen der Rechenoperationen
aus (1). Geben Sie das Ergebnis aus.
Hinweis: Recherchieren Sie hierzu im Internet, wie man Zahlen und
WWU Münster
Objekte an Listen anhängt.
wissen leben
(3) Konstruieren Sie ein dict, dessen keys aus x , y sowie den Namen der
Rechenoperationen aus (1) bestehen, und denen als values die
passenden Werte zugeordnet sind. Geben Sie den Wert der Summe
und der Differenz mithilfe dieser Datenstruktur aus.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 32 /130
Lernkontrolle
(1) Von welchem Typen ist das Ergebnis der Operation 1 + 2.0?
(a) int (b) complex (c) float
(2) Im Gegensatz zum sequence type list ist ein tuple ...
(a) mutable. (b) immutable. (c) ein set type.
(3) Welche der folgenden Definitionen eines dict ist nicht zulässig?
(a) {3: ’drei’} (b) {(3,4): ’Drei und vier!’ }
WWU Münster
wissen leben
(c) {[3,4]: ’Drei und vier!’ }
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 33 /130
WWU Münster
Operanden o, die nicht vom Typ bool sind, wird dabei implizit zu bool(o)
wissen leben
umgewandelt. Der Rückgabewert von o and/or o2 entspricht dem
Operanden, der über den Wahrheitswert des Ausdrucks entschieden hat.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 34 /130
[Link]
print ( bool (7))
print ( bool (0))
print ( bool (0.))
print ( bool ([]))
print ( bool ([0]))
print ( bool ( ’ ’ ))
WWU Münster
print ( bool ( None ))
wissen leben
print ( bool (()))
print ( False or 3)
print ( True and False )
print (4 or [4])
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 35 /130
a = 9
b = 9
print ( a == b , a is b )
a = 9999
WWU Münster
b = 9999
wissen leben
print ( a == b , a is b )
Achtung!
Der Operator is sollte in der Regel nur in der folgenden Form verwendet
werden: <Variable> is None
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 36 /130
Kontrollstrukturen
Python bietet folgende Kontrollstrukturen an:
I Bedingte Verzweigung:
if <Bedingung>:
<Anweisungen>
elif <Bedingung>:
<Anweisungen>
else:
<Anweisungen>
WWU Münster
wissen leben
I Bedingte Schleife:
while <Bedingung>:
<Anweisungen>
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 37 /130
Kontrollstrukturen
I Zählschleife:
In einer for Schleife lässt sich z.B. über sequence types und dictionary
types iterieren.
WWU Münster
Die Anweisungen bzw. Anweisungsblöcke, die logisch zusammengehören,
wissen leben
müssen in der selben Tiefe eingerückt sein. Hierzu empfiehlt sich die
Benutzung der Tabulator-Taste.
Achtung!
Stellen Sie Ihren Editor so ein, dass die Tabulator-Taste eine feste Anzahl
an Leerzeichen ausgibt!
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 38 /130
Kontrollstrukturen
[Link]
# V e r z w e i g u n g mit if
condition = " " or (3 - 3)
if condition :
print ( " Condition is true ! " )
WWU Münster
elif 1 == 2:
wissen leben
print ( " 1 is equal to 2! " )
else :
print ( " Nothing true here :( " )
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 39 /130
Kontrollstrukturen
[Link]
# while - S chleife
a = 0
while a < 5:
a +=1
print ( a )
WWU Münster
wissen leben
# for - S c h leife
for i in range (0 ,4 ,1):
print ( i )
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 40 /130
Aufgaben
(1) Schreiben Sie ein Python-Programm, in dem zunächst zwei leere
Listen angelegt werden und eine beliebige positive Integer-Zahl in
einer Variablen end gespeichert wird.
Ihr Programm soll nun mithilfe einer for oder while Schleife unter
Verwendung eines if - else Verzweigungsblock alle natürlichen Zahlen
WWU Münster
kleiner gleich end in jeweils gerade und ungerade Zahlen in die zuvor
wissen leben
definierten Listen aufteilen und speichern. Geben Sie diese Listen aus.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 41 /130
Lernkontrolle
(1) Welchem Wert entspricht der folgende Ausdruck?
False or ((True and False) or (True is False)
or (True is True and (True or False)))
(a) True (b) False (c) 2
(2) Welcher der folgenden Typen kann in einer for-Schleife nicht als Typ
des iterierbaren Objekts verwendet werden?
(a) list (b) dict (c) int
WWU Münster
(3) Welcher der folgenden Ausdrücke erzeugt für a=5 und b=[1,2] eine
wissen leben
Endlosschleife?
(a) for i in range(a): a+=1 (b) while a < 5: a+=1
(c) for i in b: [Link](i)
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 42 /130
Guter Programmierstil
WWU Münster
wissen leben
I Genügend Kommentare einfügen um stets selbst zu verstehen was
man programmiert hat - wichtig für Fehlerbehandlung!
I Variablennamen sinnvoll wählen.
I PEP 8.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 43 /130
Zusammenfassung
Bisherige Themen
I Erstellen und Übersetzen einer .py Datei
I Grundlegender Umgang mit Pyzo
I Grundlagen der Programmiersprache Python: Zuweisungen,
Variablen, Kontrollstrukturen und Typen
WWU Münster
Kommende Themen
wissen leben
I Mehr zu Kontrollstrukturen
I Input/Output
I Exceptions
I Funktionen
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 44 /130
Pyzo erweitern
Pyzo kann mit verschiedenen Tools erweitert werden. Diese können im
Tools-Menü aktiviert werden.
Besonders nützlich sind:
I File Browser
I Workspace: Eine Übersicht aller aktuell in der Shell definierten
Variablen
WWU Münster
wissen leben
I Interactive Help: Hilfe-Funktion, mit der nach Infos über Module,
Objekte, etc. gesucht werden kann. Wird beim Schreiben im Editor
passend aktualisiert.
Alle einzelnen Pyzo-Komponenten können je nach Wunsch beliebig
platziert werden.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 45 /130
Kontrollstrukturen
WWU Münster
wissen leben
I break: Bricht Schleife ab.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 46 /130
Kontrollstrukturen
[Link]
for i in range (5):
if i == 2:
c ontinue # Zur n a e c h s t e n I t e r a t i o n
print ( i )
if i == 3:
break # Bricht S c h l e i f e ab
WWU Münster
for i , value in e n u m e r a t e ( range (0 ,10 ,2)):
wissen leben
print ( ’ Die ’ , i , ’ - te Zahl ist ’ , value )
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 47 /130
Strings - Fortsetzung
Die Ausgabe von Strings kann mithilfe von Angaben in { } in der
formatierten Ausgabe spezifiziert werden:
[Link]
x , y = 50/7 , 1/7
print ( " {} " . format ( x )) # 7.14285714286
print ( " {1} , {0} " . format (x , y )) # 0.1428... , 7 . 1 4 2 8 . . .
print ( " {0: f } {1: f } " . format (x , y )) # 6 N a c h k o m m a s t e l l e n
WWU Münster
print ( " {: e } " . format ( x )) # Exponentialformat
wissen leben
print ( " {:4.3 f } " . format ( x )) # Ausgabe 4 Stellen
# 3 Nachkommastellen
print ( " {0:4.2 e } {1:4.1 f } " . format (x , y ))
print ( " {0: >5} ist {1: <10.1 e } " . format ( " x " ,x ))
print ( " {0:5} ist {1:10.1 e } " . format ( " y " ,y ))
print ( " {0:2 d } {0:4 b } {0:2 o } {0:2 x } " . format (42))
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 48 /130
Exceptions
In Python werden unter anderem folgende (builtin) Fehlertypen
unterschieden:
I SyntaxError: Ungültige Syntax verwendet.
I ZeroDivisonError: Division mit Null.
I NameError: Gefundener Name nicht definiert.
WWU Münster
I TypeError: Funktion oder Operation auf Objekt angewandt, welches
wissen leben
diese nicht unterstützt.
I AttributeError, KeyError, IOError und viele mehr
Für eine vollständige Liste siehe:
[Link]
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 49 /130
Exceptions
Schreibt man selbst Programme, so lassen sich Fehler mit einem try -
except Block abfangen. Die Struktur ergibt sich wie folgt:
try:
<Anweisungen>
except <Fehler-Typ>:
<Anweisungen im Fehlerfall>
WWU Münster
wissen leben
except <Anderer Fehler> as e:
<Anweisungen im Fehlerfall>
finally:
<Anweisungen, die immer ausgeführt werden>
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 50 /130
[Link]
def get_name ():
name = input ( ’ Name : ’) # Eingabe des Nutzers
if len ( name ) == 0:
raise ValueError ( ’ Keine Eingabe ’)
return name
try :
n = get_name ()
except ValueError :
WWU Münster
print ( ’ Kein Name angegeben ’)
wissen leben
except Exception as e :
print ( ’ Anderer Fehler : ’ , e )
finally :
print ( ’ Dies wird immer ausgefuehrt ! ’)
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 51 /130
Aufgaben
(1) Schreiben Sie ein Python-Programm, das eine Nutzereingabe erwartet
und testet, ob die Eingabe eine positive Integer-Zahl ist. Ist das nicht
der Fall, so bricht das Programm mit einer selbst gewählten
Fehlermeldung ab. Ist das der Fall, so werden alle natürlichen Zahlen
von 0 bis zur Eingabezahl in einer Schleife addiert und das Ergebnis
ausgegeben.
Hinweis: Verwenden Sie die Funktion input() und wandeln Sie die
String-Eingabe mithilfe von int() in eine gültige Integerzahl um.
WWU Münster
Schlagen Sie im Zweifel in der Dokumentation von Python deren
wissen leben
richtige Verwendung nach.
(2) Erweitern Sie Ihr Programm aus (1) wie folgt: Benutzen Sie
continue um nur gerade Zahlen in der Schleife zu addieren und
brechen Sie die Schleife ab, falls die bisher berechnete Summe den
fünffachen Wert der Eingabezahl übersteigt.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 52 /130
Lernkontrolle
(1) Welche der folgenden Anweisungen erzeugt einen Fehler?
(a) 2*[1,3] (b) "das"*10 (c) "das"+10
(2) Sei d={’a’: 1, ’b’: 2} ein dict. Welcher Fehler wird bei dem Aufruf
print(d[’c’]) erzeugt?
(a) KeyError (b) IOError (c) NameError
WWU Münster
wissen leben
(3) Mit welcher Formatspezifikation können Sie die Zahl 11/26 als float
Zahl mit 8 Stellen nach dem Komma rechtsbündig mithilfe von print
ausgeben?
(a) {:>8f} (b) {:>9.8f} (c) {:>9.8l}
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 53 /130
WWU Münster
I readlines( ): Liest Zeilen einer Datei in Liste von strings
wissen leben
I readline( ): Liest einzelne Zeile einer Datei in einen string
I read( ): Liest alle Zeilen einer Datei in einen string
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 54 /130
WWU Münster
I r+: Öffnen zum Lesen und Schreiben am Anfang der Datei
wissen leben
I w+: Öffnen zum Lesen und Schreiben, Dateiinhalt zuvor gelöscht
I a+: Öffnen zum Lesen und Schreiben am Ende der Datei
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 55 /130
# Lesen
contents = d . read ()
if contents != " " :
print ( contents )
else :
print ( " Datei ist leer !\ n \ n " )
WWU Münster
wissen leben
# Nutzereingabe
text = input ( " Schreibe an das Ende der angezeigten Zeilen : " )
# S c h r e i b e n mit Z e i l e n u m b r u c h am Ende
d . write ( text + " \ n " )
# Datei s c h l i e s s e n
d . close ()
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 56 /130
[Link]
l = [1 ,2]
k = l # k und l v e r w e i s e n auf d a s s e l b e Objekt
k [0] = 99
print k , l
l = [1 ,2]
WWU Münster
k = l . copy () # k verweis t auf eine Kopie des Objekts
wissen leben
# auf das l v e r w e i s t
k [0] = 99
print k , l
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 57 /130
Funktionen
Funktionen dienen zur Auslagerung und Systematisierung von
Anweisungen, die dann bequem über den Aufruf der Funktion beliebig oft
ausgeführt werden können. Die Funktion kann Eingabeargumente erhalten
und selbst Objekte zurückgeben.
WWU Münster
wissen leben
def Funktionsname(a,b,...):
<Anweisungen>
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 58 /130
Funktionen
[Link]
# Definiere Summenfunktion
def summe (a , b ):
return a + b
WWU Münster
wissen leben
# F u n k t i o n e n sind Objekte wie alles andere in Python
f = summe
print ( result - f (1 ,2))
print ( f )
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 59 /130
Funktionen
[Link]
# Produktfunktion
def product (a , b ):
return a * b
# F u n k t i o n : wende a , b auf op an
def execute (a , b , op ):
WWU Münster
return op (a , b )
wissen leben
# F u n k t i o n e n lassen sich wie Objekte
# als P a r a m e t e r u e b e r g e b e n
print ( execute (3 , 5 , product ))
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 60 /130
WWU Münster
if True :
wissen leben
y = 2
# F u n k t i o n s d e f i n i t i o n e n h i n g e g e n schon - Fehler
print ( x )
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 61 /130
Lambda-Funktionen
WWU Münster
wissen leben
lambda <Argumente>: <Ausdruck>
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 62 /130
Lambda Funktionen
Lambda
# Einfache Verwendung
f = lambda x , y : x + y
f (2 ,3) == 5
WWU Münster
values = [ -1 , , 2 , , -3]
wissen leben
map ( lambda x : x > 0 , values ) == [ False , True , False ]
filter ( lambda x : x > 0 , values ) == [2]
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 63 /130
WWU Münster
def f2 ( x ):
wissen leben
print ( ’ in f2 ’)
return x
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 64 /130
WWU Münster
I
wissen leben
Verwendung per <Modulname>.<Funktion/Klasse>
I from <Modulname> import <Funktion/Klasse> [as <Name>]
Verwendung per <Funktion/Klasse>
Dabei ist <Modulname> der Dateiname einer Quelldatei (ohne .py) im
gleichen Verzeichnis oder im global Modul-Suchpfad von Python.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 65 /130
[Link]
import tools # tools . py liegt im g l e i c h e n V e r z e i c h n i s
WWU Münster
z = tools . summe (2 ,3)
wissen leben
print ( z )
# Alternativen
from tools import summe # E i n z e l n e F u n k t i o n
z = summe (2 ,3)
print ( z )
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 66 /130
Aufgaben
(1) Schreiben Sie eine Python-Datei, die eine Funktion enthält, welche
zwei gleich lange übergebene Listen elementweise addiert und die
Ergebnisliste zurückgibt.
Hinweis: Entweder wird in Ihrer Funktion eine neue Liste erzeugt,
oder sie verwenden eine der bereits gegebenen Listen und
modifizieren diese.
WWU Münster
(2) Schreiben Sie ein Python-Programm, das Ihre Datei aus (1)
wissen leben
importiert. Definieren Sie zwei gleich lange Listen und verwenden Sie
die importierte Funktion. Geben Sie die Ergebnisliste aus.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 67 /130
Lernkontrolle
(1) def incr(a): a+=2 sei eine Funktion. Angenommen sie definieren b=2
und rufen incr(b) auf. Welchen Wert hat b nun?
(a) 4 (b) 2 (c) Undefiniert
(2) def incr(a): a+=[2] sei eine Funktion. Angenommen sie definieren
b=[2] und rufen incr(b) auf. Welchen Wert hat b nun?
(a) [4] (b) [2] (c) [2,2]
(3) Sie haben zufällig zwei Funktionen gleicher Signatur aus zwei
WWU Münster
verschiedenen Dateien importiert und können in ihrem Code beide
wissen leben
nicht explizit unterscheiden. Was passiert bei Aufruf der Funktion?
(a) Ein Fehler wird erzeugt.
(b) Die zuletzt Importierte wird aufgerufen.
(c) Die zuerst Importierte wird aufgerufen.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 68 /130
Zusammenfassung
Bisherige Themen
I Grundlagen der Programmiersprache Python: Funktionen, Strings,
Exceptions
I Importieren von Quelldateien in Python
WWU Münster
wissen leben
Kommende Themen
I Numerik mit Python - das numpy-Modul
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 69 /130
Debuggen in Pyzo
Ein Debugger dient zum Auffinden und Analyiseren von Fehlern in
Programmen. Insbesondere kann mit einem Debugger das Programm
angehalten und schrittweise ausgeführt werden.
WWU Münster
I Verschiedene Icons in der Shell zum „Weiterklicken“:
wissen leben
Weiter bis zur nächsten Zeile
Nächster Schritt (auch in aufgerufene Funktionen, etc. hinein)
Bis zum Ende des aktuellen Bereichs (z.B. return)
Weiter (bis zum nächsten Breakpoint)
Debuggen beenden
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 70 /130
WWU Münster
I Meist viel höhere Geschwindigkeit als bei Verwendung von
wissen leben
Python-Listen und Schleifen.
I Große Sammlung grundlegender mathematischer Algorithmen, z.B.
LGS lösen.
Weitere Informationen und ein ausführliches Tutorial sind zu finden unter:
[Link]
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 71 /130
NumPy
Arrays
import numpy as np
# 1 d array (= Vektor )
a = np . array ([1 ,2 ,3 ,4])
a . shape == (4 ,)
a . dtype == np . int64
# 2 d array (= Matrix )
a = np . array ([[1. ,2.] , [3. ,4.] , [5. ,6.]])
WWU Münster
a . shape , a . dtype == (3 ,2) , np . float64
wissen leben
# 3 d array (= 3 - Tensor )
a = np . array ([[[1. ,2.] ,[4 ,5]] ,[[1 ,2] ,[4 ,5]]])
a . shape , a . dtype == (2 ,2 ,2) , np . float
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 72 /130
NumPy
Array-Erstellung und -Indizierung (Slicing)
import numpy as np
WWU Münster
np . zeros (0)
wissen leben
np . zeros ((0 ,5))
np . zeros (())
# I n d i z i e r u n g und Slicing
a = np . arange (6). reshape ((3 ,2))
print ( a )
a [2 ,0] # == 4
a [1 ,:] # zweite Zeile
a [: ,0] # erste Spalte
a [1:3 ,0] # == [3 ,5]
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 73 /130
NumPy
Grundlegende Operationen
import numpy as np
a = np . array ([1 ,2 ,3])
b = np . arange (3)
WWU Münster
sin ( a )
wissen leben
a < 3 # == np . array ([ True , True , False ] , dtype = bool )
# Matrizen
A = np . array ([[1 ,0] ,[0 ,1]])
B = np . array ([[2 ,3] ,[1 ,4]])
A*B # e l e m e n t w e i s e s Produkt
A . dot ( B ) # Matrixprodukt
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 74 /130
NumPy
Weitere Operationen
a = np . arange (5)
a . sum () # = 10
a . min () # = 0
a . max () # = 4
WWU Münster
b . max ( axis =1) # == np . array ([2 ,5])
wissen leben
b . cumsum ( axis =0) # == np . array ([[0 ,1 ,2] ,[3 ,5 ,7]])
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 75 /130
NumPy
Stacking und Splitting von arrays
# stacking
a , b = np . arange (3) , np . arange (3 ,6)
np . vstack (( a , b )) # == np . array ([[0 ,1 ,2] ,[3 ,4 ,5]])
np . hstack (( a , b )) # == np . array ([0 ,1 ,2 ,3 ,4 ,5])
np . column_stack (( a , b )) # == np . array ([[0 ,3] ,[1 ,4] ,[2 ,5]])
# splitting
c = np . hstack (( a , b ))
WWU Münster
np . hsplit (c ,3) # c in 3 Teile trennen
wissen leben
np . hsplit (c ,(3 ,4)) # c nach 3. und 4. Spalte trennen
Achtung!
Funktionen wie hstack() erwarten einen Parameter, d.h. hstack(a,b)
statt hstack((a,b)) erzeugt einen Fehler.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 76 /130
Aufgaben
(1) Schreiben Sie ein Python-Programm, in dem folgende Matrix-Vektor
Multiplikation mit Matrix A und Vektor x mit Hilfe von
NumPy-Arrays vereinfacht wird:
0 0 0
A = 0 −2 1 , x = (4, 1, 2)T
0 2 5
WWU Münster
wissen leben
Extrahieren Sie hierzu möglichst geschickt die 2 × 2 Untermatrix bei
Streichung der ersten Spalte und ersten Zeile von A und multiplizieren
diese mit dem richtigen Teilvektor von x . Geben Sie das Ergebnis aus.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 77 /130
Lernkontrolle
(1) Sei a=[Link]([1,2,3,4]) gegeben. Was ist das Ergebnis der
Operation a/=2?
(a) [Link]([0.5,1.0,1.5,2.0]) (b) [Link]([0,1,1,2])
(c) TypeError
(2) Was ist der Unterschied zwischen range() und arange()?
(a) range() liefert Liste, arange() NumPy array.
WWU Münster
(b) Es gibt keinen!
wissen leben
(c) range() liefert iterierbares Range-Objekt, arange() NumPy array.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 78 /130
NumPy
Achtung!
Bei der Arbeit mit NumPy kann es schnell zu Fehlern bezüglich der
Zuweisung gleicher Daten kommen. Folgende, Fälle müssen unterschieden
werden:
WWU Münster
I Referenz
wissen leben
I Kopie
I View
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 79 /130
NumPy
Referenz
a = np . arange (4)
b = a # Kein neues Objekt ! a und b v e r w e i s e n auf d a s s e l b e Objekt
b is a # True
b . shape = (2 ,2) # Aendert Form von a
a . shape # == (2 ,2)
Kopie
WWU Münster
wissen leben
a = np . arange (4)
b = a . copy () # Neues array mit neuen Daten
b is a # False
b [1] = 5
b # == array ([0 ,5 ,2 ,3])
a # == array ([0 ,1 ,2 ,3])
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 80 /130
NumPy
View
a = np . arange (4)
b = a . view ()
b is a # False
b . base is a # True - b ist View auf Daten von a
b . shape = (2 ,2)
a . shape # == (4 ,) - Form von a wurde nicht v e r a e n d e r t
b [1 ,1] = 100 # Daten von a / b werden v e r a e n d e r t
a # == array ([0 ,1 ,2 ,100])
WWU Münster
wissen leben
Achtung!
I Das Kopieren speicherintensiver Objekte (in der Praxis z.b. Gitter mit
Millionen von Gitterpunkten) sollte vermieden werden.
I Bei Unsicherheiten lässt sich über is feststellen, ob Variablen auf das
gleiche Objekt verweisen.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 81 /130
NumPy
WWU Münster
vstack( ), hstack( ), hsplit( ), vsplit( ), sum( ), min( ), max( )
wissen leben
Achtung!
Befehl array([1,2,3,4]) korrekt, array(1,2,3,4) erzeugt Fehler!
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 82 /130
NumPy
WWU Münster
Universal functions
wissen leben
import numpy as np
a = np . arange (4)
np . exp ( a ) # == array ([1. , 2.718 , ...])
np . sqrt ( a ) # == array ([0. ,1. ,...])
np . add (a , a ) # == array ([0 ,2 ,4 ,6])
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 83 /130
NumPy
Eine weitere Möglichkeit mit Matrizen zu arbeiten bietet die
matrix-Klasse in Numpy:
Matrix class
A = np . matrix ( " 1.0 , 0.0; 0.0 , 1.0 " )
type ( A ) # == < class ’ numpy . m a t r i x l i b . d e f m a t r i x . matrix ’>
A.T # t r a n s p o n i e r t e Matrix
A.I # inverse Matrix
B = np . matrix ( " 1.0 , 2.0; 3.0 , 4.0 " )
A*B # Matrixmultiplikation
WWU Münster
y = np . matrix ( " 3.0; 2.0 " )
wissen leben
np . linalg . solve (A , y ) # loest l i n e a r e s G l e i c h u n g s s y s t e m Ax = y nach x
Achtung!
Die Verwendung von matrix ist aufgrund der subtilen Unterschiede zu
array generell nicht empfehlenswert.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 84 /130
NumPy
NumPy ermöglicht neben der indizierung mit Zahlen und slices auch die
Indizierung mit Listen von Indices. Dies erzeugt immer eine Kopie!
Advanced Indexing
a = np . arange (10)**2 # Erste zehn Q u a d r a t z a h l e n
i = np . array ([2 ,3 ,3 ,7 ,8]) # Ein Index - Array
a[i] # == array ([4 ,9 ,9 ,49 ,64])
WWU Münster
j = np . array ([[1 ,2] ,[6 ,5]]) # 2 - dim Index - Array
wissen leben
a[j] # == array ([[1 ,4] ,[36 ,25]])
a[i] = 0
a # == array ([0 ,1 ,0 ,0 ,16 ,25 ,36 ,0 ,0 ,81])
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 85 /130
NumPy
View vs. Kopie beim Indizieren
a = np . eye (5) # 5 x5 E i n h e i t s m a t r i x
a [2 ,3]. base is a # False
WWU Münster
wissen leben
a [[3 ,4 ,2] , :]. base is a # False
a [[0] , :]. base is a # False
a [[0]]. base is a # False
Regel
view bei slicing, Kopie bei Indizierung mit Listen.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 86 /130
NumPy
WWU Münster
I fft: Modul für die diskrete Fourier-Transformation
wissen leben
I random: Modul für Generierung von Zufallszahlen, Permutationen,
Distributionen etc.
Für weitere Informationen siehe die NumPy Dokumentation.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 87 /130
Aufgaben
(1) Schreiben Sie ein Python-Programm, das für ein gegebenes array die
Summe der Komponenten, den betragsmäßig größten und kleinsten
Eintrag sowie deren Index mithilfe von builtin NumPy Funktionen
bestimmt und ausgibt.
(2) Schreiben Sie ein Python-Programm, in dem der Code aus (1) in eine
Funktion ausgelagert ist, die das entsprechende array als Argument
WWU Münster
wissen leben
erhält. Testen Sie Ihr Programm an den folgenden Daten:
[Link]([0, 2, -4, 5, 3]), [Link]([1.5, 3.0, -3.0, -1.5])
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 88 /130
Lernkontrolle
(1) Sie möchten zeitweise mit einem Form-veränderten NumPy-Array
arbeiten, ohne die Form des Arrays global zu verändern. Womit
arbeiten Sie?
(a) Referenz (b) Kopie (c) View
(2) Mit welchem NumPy-Befehl können Sie eine Diagonalmatrix der
Dimension n mit Einträgen konstant 2 erzeugen?
(a) [Link]([2],n) (b) 2*[Link]((n,n))
WWU Münster
(c) [Link]([Link](n, 2))
wissen leben
(3) Sie möchten alle Einträge eines Arrays v ungleich null als NumPy
array erhalten - wie?
(a) v[v!=0] (b) v[v==0] (c) v!=0
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 89 /130
Zusammenfassung
Bisherige Themen
I Grundlagen des Moduls NumPy: Arrays, Matrizen, Indizierung,
Referenzen, Views und hilfreiche Module
Kommende Themen
WWU Münster
wissen leben
I matplotlib
I Numerische Mathematik
I Klassen und Vererbung
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 90 /130
matplotlib
WWU Münster
wissen leben
Weitere Informationen und Dokumentation sind zu finden unter
[Link]
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 91 /130
matplotlib
[Link]
import numpy as np
import matplotlib . pyplot as plt
WWU Münster
# plot
wissen leben
plt . plot (x , S )
plt . plot (x , C )
# Erzeuge Ausgabe
plt . show ()
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 92 /130
matplotlib
Ausgabe:
WWU Münster
wissen leben
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 93 /130
matplotlib
[Link]
import numpy as np
import matplotlib . pyplot as plt
# d i c t i o n a r y for f o n t s t y l e
font = { ’ family ’: ’ serif ’ , ’ color ’: ’ darkred ’ ,
’ weight ’: ’ normal ’ , ’ size ’: 16}
# numpy r o utines
x = np . linspace (0.0 , 5.0 , 100)
WWU Münster
y = np . cos (2 * np . pi * x ) * np . exp ( - x )
wissen leben
# m a t p l o t l i b routines
plt . plot (x , y , ’k ’)
plt . title ( ’ Damped exponential decay ’ , fontdict = font )
plt . text (2 , 0.65 , r ’$ \ cos (2 \ pi t ) \ exp ( - t ) $ ’ , fontdict = font )
plt . xlabel ( ’ time ( s ) ’ , fontdict = font )
plt . ylabel ( ’ voltage ( mV ) ’ , fontdict = font )
plt . show ()
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 94 /130
matplotlib
Ausgabe:
WWU Münster
wissen leben
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 95 /130
SciPy
Das SciPy-Ökosystem ([Link]) bietet neben numpy und
matplotlib noch zahlreiche weitere Bibliotheken und sonstige Ressourcen
zu wissenschaftlichem Rechnen mit Python.
WWU Münster
wissen leben
I jupyter: Interaktive Web-Notebooks für wissenschaftliches Arbeiten
mit Python und weiteren Sprachen.
I sympy: Computer-Algebra mit Python.
I pandas: Datenanalyse-Paket mit zu R vergleichbaren Features.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 96 /130
Aufgaben
(1) Schreiben Sie ein Python-Programm, in dem Sie selbst ein Polynom
beliebigen Grades definieren und dieses in einem gewünschten
Intervall mithilfe von matplotlib darstellen. Beschriften Sie die
gegebenen Achsen und den Graphen des Polynoms entsprechend.
Hinweis: Sie können dazu den Graphen mit dem plot-Befehl labeln
WWU Münster
und mithilfe einer Legende eine Bezeichnung einblenden. Suchen Sie
wissen leben
hierzu eine Anleitung im Internet.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 97 /130
Numerische Mathematik
Die angewandte Mathematik befasst sich mit der Übertragung
mathematischer Konzepte auf reale Anwendungen.
WWU Münster
wissen leben
Aufgabengebiet der numerischen linearen Algebra ist. Ein
Musterbeispiel ist das Lösen eines linearen Gleichungssystems.
Die numerische Analysis hingegen befasst sich mit dem approximativen
Lösen von Problemen der Analysis, insbesondere von
Differentialgleichungen.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 98 /130
Numerische Mathematik
WWU Münster
I Die Kondition des linearen Gleichungssystems zur Untersuchung der
wissen leben
Empfindlichkeit der Lösung gegenüber Änderungen der Eingabedaten
spielt eine große Rolle.
I Solche Änderungen der Eingabedaten können dabei durch die
Problemstellung aber auch die Maschinengenauigkeit bedingt werden.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER Pythonkurs Wintersemester 2016/17 99 /130
Numerische Mathematik
WWU Münster
I Krylovraumverfahren zur Lösung linearer Gleichungen (u.a. CG
wissen leben
Verfahren)
I Berechnung von Eigenwerten
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 100
Pythonkurs Wintersemester 2016/17 /130
Numerische Mathematik
WWU Münster
Stammfunktion von f berechnen lässt, einfaches Beispiel:
wissen leben
f (x ) = sin(x )/x
I Idee:
R b Approximiere Integral mithilfe einer Quadraturformel Q:
a
f (x )dx = Q(f ) + E (f ) mit möglichst minimalem Fehlerterm E
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 101
Pythonkurs Wintersemester 2016/17 /130
Numerische Mathematik
f (a) + f (b)
Q(f ) = (b − a)
2
I Ist f wenigstens zweimal stetig differenzierbar, so gilt für den Fehler
WWU Münster
wissen leben
E bei Benutzung der Trapezregel:
(b − a)3 00
|E (f )| ≤ max |f (x )|
12 a≤x ≤b
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 102
Pythonkurs Wintersemester 2016/17 /130
Numerische Mathematik
WWU Münster
I Eine andere Möglichkeit Integrale zu approximieren bietet die
wissen leben
Gauß-Quadratur.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 103
Pythonkurs Wintersemester 2016/17 /130
Numerische Mathematik
Numerische Analysis
Die Themen der numerischen Analysis umfassen u.a.:
I Interpolation (Polynom-, Funktions-)
I Numerische Integration
WWU Münster
I Numerik Gewöhnlicher Differentialgleichungen
wissen leben
I (Numerik Partieller Differentialgleichungen)
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 104
Pythonkurs Wintersemester 2016/17 /130
Klassen
Eine Klasse ist eine Vorlage für gleichartige Objekte. Sie legt fest welche
Daten-Attribute und Methoden (=Funktionen) Instanzen (=Objekte)
dieser Klasse besitzen.
Als Beispiel lässt sich ein Pendant aus dem Alltag heranziehen: Die Klasse
Auto gibt technische Eigenschaften eines Automobils vor (4 Räder,
Chassis, Motor etc.). Einzelne Autos sind Instanzen dieser Klasse, die eine
WWU Münster
wissen leben
ähnliche Funktionalität bieten, aber unterscheidbar sind.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 105
Pythonkurs Wintersemester 2016/17 /130
Klassen
Syntax zur Definition einer Klasse:
class MyClass:
# Konstruktor
def _ _init_ _(self, ...):
<Anweisungen>
WWU Münster
wissen leben
def eine_methode(self, ...):
<Anweisungen>
...
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 106
Pythonkurs Wintersemester 2016/17 /130
Klassen
[Link]
# Klassendefinition
class MyClass :
def __init__ ( self , msg ):
self . _member = msg
WWU Münster
wissen leben
# Objekte der Klasse i n s t a n z i i e r e n
obj1 = MyClass ( " Hinter dir ! Ein dreikoepfiger Affe ! " )
print ( obj1 . type )
obj1 . some_function ()
obj2 = MyClass ( " Ich verkaufe diese feinen Lederjacken " )
obj2 . some_function ()
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 107
Pythonkurs Wintersemester 2016/17 /130
Klassen
[Link]
class car :
def __init__ ( self , color ):
self . color = color
self . speed = 0
WWU Münster
print ( " This car is " + str ( self . color ) \
wissen leben
+ " and its speed is " + str ( self . speed ) \
+ " km / h . " )
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 108
Pythonkurs Wintersemester 2016/17 /130
Aufgaben
(1) Schreiben Sie ein Python-Programm, in dem Sie eine Klasse Hund
implementieren. Diese soll Attribute alter und name enthalten, die
beim Aufruf des Konstruktors initialisiert werden. Schreiben Sie zwei
Methoden die jeweils das Alter und den Namen des Hundes
zurückgeben. Testen Sie Ihre Klasse an selbst gewählten Beispielen.
(2) Erweitern Sie Ihre Klasse aus (1) um die bool Variable hunger, die
WWU Münster
sie bei Instanziierung eines Hund-Objekts automatisch auf True
wissen leben
setzen. Fügen Sie eine Methode zur Abfrage des Hungers und eine
Methode fuettern zum Setzen der Variable Hunger auf False hinzu.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 109
Pythonkurs Wintersemester 2016/17 /130
Klassen
WWU Münster
Die Namen dieser Methoden beginnen und enden mit “_ _” . Sie werden
wissen leben
meist nicht mit ihrem Namen benutzt, sondern implizit verwendet.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 110
Pythonkurs Wintersemester 2016/17 /130
Klassen
Special Members
Beispiele für special members sind:
I _ _ init _ _: Wird bei Erzeugung einer neuen Klasseninstanz
aufgerufen.
I _ _ str_ _: Gibt an was str(obj) zurückgibt, nützlich für
print(obj).
WWU Münster
I _ _ call_ _: Instanzen einer Klasse wie eine Funktion aufrufen.
wissen leben
I Für Vergleichsoperationen: _ _ eq_ _, _ _ lt_ _, _ _ le_ _,
_ _ gt_ _, _ _ ge_ _ usw.
I Für binäre Operationen: _ _ add_ _, _ _ sub_ _, _ _ mul_ _,
_ _ truediv_ _, _ _floordiv_ _ usw.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 111
Pythonkurs Wintersemester 2016/17 /130
Klassen
[Link]
class Gummibaeren :
def __init__ ( self , menge ):
self . menge = menge
def __add__ ( self , other ):
return Gummibaeren ( self . menge + other . menge )
def __iadd__ ( self , other ):
self . menge += other . menge
return self
def __eq__ ( self , other ):
WWU Münster
return self . menge == other . menge
wissen leben
def __str__ ( self ):
if self . menge > 0:
return ’ {} Gummibaeren , hmmm ! ’. format ( self . menge )
else :
return ’ Keine Gummibaeren :((( ’
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 112
Pythonkurs Wintersemester 2016/17 /130
Vererbung
WWU Münster
wissen leben
werden.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 113
Pythonkurs Wintersemester 2016/17 /130
Vererbung
[Link]
class BaseClass :
def __init__ ( self , msg ):
self . _msg = msg
WWU Münster
def __init__ ( self , msg ):
wissen leben
self . _msg = msg . upper ()
base . report ()
deriv . report ()
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 114
Pythonkurs Wintersemester 2016/17 /130
Vererbung
[Link]
class BaseClass :
pass
WWU Münster
wissen leben
basis = BaseClass ()
derived = DerivedClass ()
i s i n s t a n c e ( derived , BaseClass ) # True
i s i n s t a n c e ( basis , BaseClass ) # True
i s i n s t a n c e ( DerivedClass , BaseClass ) # False
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 115
Pythonkurs Wintersemester 2016/17 /130
Aufgaben
(1) Erweitern Sie Ihr vorheriges Python-Programm um eine Klasse Welpe,
die von der Klasse Hund erbt. Fügen Sie der neu definierten Klasse
eine Methode eigener Wahl, die charakteristisch für Welpen ist, hinzu
und testen Sie anhand eines Welpen selbst gewählten Namens und
WWU Münster
Alters.
wissen leben
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 116
Pythonkurs Wintersemester 2016/17 /130
Zusammenfassung
Bisherige Themen
I Grundlegender Umgang mit matplotlib
I Numerische Mathematik
I Klassen und Vererbung
WWU Münster
wissen leben
Kommende Themen
I Ein paar fortgeschrittene Themen.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 117
Pythonkurs Wintersemester 2016/17 /130
Iteratoren
Ein Iterator bezeichnet einen Zeiger, mit dem man die Elemente eines
iterables (z.B. list, dict, set) durchlaufen kann. Iteratoren können als
argument einer for-Schleife verwendet werden.
Mithilfe der Funktion iter erhält man zu einem iterierbaren Objekts einen
Iterator.
iter
WWU Münster
wissen leben
it = iter ([1 ,4 ,9])
print ( next ( it ))
for i in it :
print ( ’ in for loop ’ , i )
next ( it ) # S t o p I t e r a t i o n E x c e p t i o n
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 118
Pythonkurs Wintersemester 2016/17 /130
Generatoren
WWU Münster
i *= i +2
wissen leben
gen e r a t o r _object = g e ne ra t o r _ f u n c t i o n (3)
next ( g e n e rator_object ) # 1
gen e r a t o r _object . next () # 3
next ( g e n e rator_object ) # S t o p I t e r a t i o n E x c e p t i o n
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 119
Pythonkurs Wintersemester 2016/17 /130
Generatoren
Besonders sinnvoll sind Generatoren um Speicherplatz zu sparen, wie
nachfolgendes Beispiel zeigt:
[Link]
def to_n_list ( n ): # Erste l l t Liste
num , numList = 0 , []
while num < n :
numList . append ( num )
num += 1
return numList
WWU Münster
wissen leben
def to_n_gen ( n ): # G e n e r a t o r
num = 0
while num < n :
yield num
num += 1
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 120
Pythonkurs Wintersemester 2016/17 /130
Generatoren
Generatorausdrücke
# list
abs ol ut e_ values = [ abs ( i ) for i in range ( -100 ,100)]
WWU Münster
# vs . g e n e r a t o r
wissen leben
a b s o l u t e _ v a l u e s_ g e n = ( abs ( i ) for i in range ( -100 ,100))
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 121
Pythonkurs Wintersemester 2016/17 /130
List Comprehensions
Eine List comprehension ermöglichen dem Nutzer Listen auf folgende
kurze, prägnante Weise zu erstellen:
[Link]
# List
squaresLong = []
for x in range (5):
squaresLong . append ( x **2)
WWU Münster
print ( squaresLong )
wissen leben
# List c o m p r e h e n s i o n
squaresShort = [ x **2 for x in range (5)]
print ( squaresShort )
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 122
Pythonkurs Wintersemester 2016/17 /130
List Comprehensions
[Link]
values = [ -1 , 4 , -9]
ersteListe = values
zweiteListe = range (2)
WWU Münster
zusammen = [ wert1 + wert2
wissen leben
for wert1 in ersteListe for wert2 in zweiteListe ]
zusammen == [ -1 , 0 , 4 , 5 , -9 , -8]
# entspricht
zusammen = list ()
for wert1 in ersteListe :
for wert2 in zweiteListe :
zusammen . append ( wert1 + wert2 )
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 123
Pythonkurs Wintersemester 2016/17 /130
Aufgaben
(1) Schreiben Sie ein Python-Programm, in dem Sie zwei gleich lange
Listen mit Hilfe einer list comprehension elementweise multiplizieren.
(2) Erweitern Sie Ihr Programm aus (1), sodass alle negativen Einträge
der jeweiligen Listen vor der Multiplikation durch eine 0 ersetzt
WWU Münster
werden.
wissen leben
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 124
Pythonkurs Wintersemester 2016/17 /130
Dokumentation
WWU Münster
Hochkommata eingerahmt.
wissen leben
Mithilfe des Attributs _ _doc_ _ einer Klasse oder Funktion oder dem
Aufruf der Funktion help( ) lassen sich diese Beschreibungen dann
ausgeben.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 125
Pythonkurs Wintersemester 2016/17 /130
Dokumentation
[Link]
class some_class ( object ):
"""
This is the docstring of this class containing information
about its contents : it does nothing !
"""
def __init__ ( self ):
pass
WWU Münster
def some_function ():
wissen leben
"""
This function does nothing
"""
pass
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 126
Pythonkurs Wintersemester 2016/17 /130
Dekoratoren
In Python lassen sich sogenannte Dekoratoren verwenden. Eine Funktion
die eine Methode oder eine Funktion modifizieren soll und mit einem @
vor die entsprechende Definition geschrieben wird, heißt decorator
Funktion. Diese wirkt wie function=decorator(function), lässt sich aber
wie folgt schreiben:
@decorator
WWU Münster
def function():
wissen leben
<Anweisungen>
Ein decorator kann entweder als Funktion selbst oder als Klasse mit dem
implementierten _ _ call _ _ Attribut definiert werden.
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 127
Pythonkurs Wintersemester 2016/17 /130
Dekoratoren
[Link]
def twice ( obj ):
def wrapper ( x ):
return obj ( obj ( x ))
return wrapper
@twice
WWU Münster
def function ( x ):
wissen leben
return x **2
function (4)
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 128
Pythonkurs Wintersemester 2016/17 /130
Dekoratoren
[Link]
class call_counter :
def __init__ ( self , func ):
self . count = 0
self . func = func
def __call__ ( self , * args , ** kwargs ):
self . count += 1
print ( ’ Funktionsaufruf - Nummer : ’ , self . count )
return self . func (* args , ** kwargs )
WWU Münster
wissen leben
@call_counter
def f (a , b ):
print ( a + b , a * b )
f (2 , 3)
f (1 , 4)
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 129
Pythonkurs Wintersemester 2016/17 /130
Monkey Patching
I Python bietet die Möglichkeit zur Laufzeit Funktionen in Modulen
oder Klassen zu ersetzen.
I Sollte sehr sparsam eingesetzt werden!
[Link]
class Foo :
def run ( self ):
print ( ’ fooooo ’)
WWU Münster
wissen leben
foo = Foo ()
foo . run ()
foo . run ()
,
,
Stephan Rave
W ESTFÄLISCHE
W ILHELMS -U NIVERSITÄT
M ÜNSTER 130
Pythonkurs Wintersemester 2016/17 /130
ENDE
WWU Münster
wissen leben
,
,
Stephan Rave