Eine kurze Einführung in Python - simweb.iwr.uni...
-
Upload
dinhnguyet -
Category
Documents
-
view
233 -
download
0
Transcript of Eine kurze Einführung in Python - simweb.iwr.uni...
Eine kurze Einfuhrung in Python
Stefan Meggendorfer
IWR, Universitat Heidelberg
6. Mai 2019
Stefan Meggendorfer Python Einfuhrung 1
Ubersicht
EinleitungBasics
ZahlenformateRechenoperationenVariablen und ZuweisungenKombinierte RechenoperationenStringsListenTupleTuple vs. ListKommentareLogische Operationen
Nutzliche FunktionenBlockeControl Flow ToolsFunktionen
Programme schreibenPython-SkriptModulare Programmierung
PackagesMathNumPySciPymatplotlib
Stefan Meggendorfer Python Einfuhrung 2
Was ist Python?
Eine der beliebtesten Programmiersprachen weltweit(Platz 1 im Feb. 2019 laut PYPL-Index)
leicht zu erlernen
high-level
interpreted language, also direkt ausfuhrbar(muss nicht erst kompiliert werden)
Multiparadigmensprache
objektorientiert und strukturiertfunktional und aspektorientiert
benannt nach der BBC show “Monty Python’sFlying Circus”(vom Entwickler Guido van Rossum [1991]) Guido van Rossum1
1en.wiki [CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0/)]
Stefan Meggendorfer Python Einfuhrung 3
Woher bekommt ihr Python?
Linux/UNIX
normalerweise vorinstalliert (z.B. auf Ubuntu)sonst uber die Paketverwaltungzusatzlich wird ein Editor benotigt (mousepad, emacs, gedit, vim, ...)
Windows
unter https://www.python.org/ → DownloadsIm Abschnitt Files die passende Version herunterladen:(Windows x86-64 web-based installer fur 64-bit Version oderWindows x86 web-based installer fur 32-bit Version)Installationsdatei python-3.7.3-webinstall.exe ausfuhrenzusatzlich wird ein Editor benotigt (Notepad++, gedit, emacs, ...)
Eine ausfuhrliche Liste an Editoren findet ihr z.B. unter:https://wiki.python.org/moin/PythonEditors
Stefan Meggendorfer Python Einfuhrung 4
Linux-Terminal
Kurze Befehlsubersicht
Dateien und Verzeichnisse anzeigen lassen: ls
Ein Verzeichnis anlegen: mkdir [ORDNER]
In ein Verzeichnis wechseln: cd [ORDNER]
In ein ubergeordnetes Verzeichnis wechseln: cd ..
Dateien und Verzeichnisse loschen: rm -r [FILE]
Dateien und Verzeichnisse kopieren: cp -r [FILE]
Dateien und Verzeichnisse verschieben: mv [FILE]
Inhalt einer Datei anzeigen: less [FILE]
Aktuellen Verzeichnispfad anzeigen: pwd
Anzeigen der Hilfe zu einem Befehl: man [CMD] oder[CMD] --help
Autovervollstandigung: TAB
Anzeigen aller Moglichkeiten: TAB TAB
Programm abbrechen: Ctrl-C
Stefan Meggendorfer Python Einfuhrung 5
Linux-Terminal
Passwort andern und merken
1. Terminal offnen
2. In die Kommandozeile
passwd
eintippen und <ENTER> drucken
3. Altes Passwort (xxxxxxxxxx) eintippen
4. Neues Passwort (yyyyyyyyyyyy) eingeben
5. Neues Passwort (yyyyyyyyyyyy) bestatigen
Stefan Meggendorfer Python Einfuhrung 6
Linux-Terminal
Ubung
1 Lasst euch alle Dateien und Verzeichnisse anzeigen: ls
2 Legt ein Verzeichnis an: mkdir TestOrdner
3 Benutzt abermals ls. Was hat sich geandert?
4 In das Verzeichnis wechseln: cd TestOrdner
5 Wieder ls verwenden. Beobachtung?
6 In das ubergeordnete Verzeichnis zuruck wechseln: cd ..
7 ls. Und jetzt?
8 Loscht das Verzeichnis: rm -r TestOrdner
9 ls. Der Ordner sollte verschwunden sein!
AufgabeErstellt einen Ordner der PythonIntro heißt und wechselt in diesenOrdner!
Stefan Meggendorfer Python Einfuhrung 7
Linux-Terminal
Ubung
1 Lasst euch alle Dateien und Verzeichnisse anzeigen: ls
2 Legt ein Verzeichnis an: mkdir TestOrdner
3 Benutzt abermals ls. Was hat sich geandert?
4 In das Verzeichnis wechseln: cd TestOrdner
5 Wieder ls verwenden. Beobachtung?
6 In das ubergeordnete Verzeichnis zuruck wechseln: cd ..
7 ls. Und jetzt?
8 Loscht das Verzeichnis: rm -r TestOrdner
9 ls. Der Ordner sollte verschwunden sein!
AufgabeErstellt einen Ordner der PythonIntro heißt und wechselt in diesenOrdner!
Stefan Meggendorfer Python Einfuhrung 7
Python starten und schließen
Starten von Python im Terminal:
python
Starten einer bestimmten Version von Python (z.B. Version 3):
python3
Beenden von Python:
quit() oder exit() oder Ctrl-D
Stefan Meggendorfer Python Einfuhrung 8
Hilfe zu Python
Hilfe-Funktion
Hilfe-Funktion in Python aufrufen:
help()
Schließen der Hilfe-Funktion mit: quit oder Ctrl-D
Hilfe zu einem bestimmten Befehl/Funktion/Ausdruck (z.B. zumBefehl print):
help(’print’)
Schließen der Hilfe hier mit: q
Online-Hilfe
Tutorial: https://docs.python.org/3/tutorial/
Tutorial: https://www.tutorialspoint.com/python/
Bei Programmier-Fragen jeglicher Art sehr hilfreich:https://stackexchange.com/
Stefan Meggendorfer Python Einfuhrung 9
Hilfe zu Python
Hilfe-Funktion
Hilfe-Funktion in Python aufrufen:
help()
Schließen der Hilfe-Funktion mit: quit oder Ctrl-D
Hilfe zu einem bestimmten Befehl/Funktion/Ausdruck (z.B. zumBefehl print):
help(’print’)
Schließen der Hilfe hier mit: q
Online-Hilfe
Tutorial: https://docs.python.org/3/tutorial/
Tutorial: https://www.tutorialspoint.com/python/
Bei Programmier-Fragen jeglicher Art sehr hilfreich:https://stackexchange.com/
Stefan Meggendorfer Python Einfuhrung 9
Python Interpreter
Interaktiver Modus
1 Python offnen
2 in die Konsole tippen: print("Hello world!")
3 Ausgabe: Hello world!
Python Skript
1 Editor offnen
2 Datei “hello.py” erstellen
3 in hello.py schreiben: print("Hello world!")
4 speichern
5 im Terminal eintippen: python3 hello.py
6 Ausgabe: Hello world!
Stefan Meggendorfer Python Einfuhrung 10
Python Interpreter
Interaktiver Modus
1 Python offnen
2 in die Konsole tippen: print("Hello world!")
3 Ausgabe: Hello world!
Python Skript
1 Editor offnen
2 Datei “hello.py” erstellen
3 in hello.py schreiben: print("Hello world!")
4 speichern
5 im Terminal eintippen: python3 hello.py
6 Ausgabe: Hello world!
Stefan Meggendorfer Python Einfuhrung 10
Basics
“the best way to learn a language is to use it”
Stefan Meggendorfer Python Einfuhrung 11
Zahlenformate
Logik (bool):
Beispiele: True, False
Ganze Zahlen (int):
Beispiele: 0, 1, 12, -7beliebig große Zahlen darstellbar in reinem Python
Reelle Zahlen (float):
Beispiele: 0.0, 1.4, 2., -16.9875, 1e5, 1.e5, 2.345E-2beliebige Genauigkeit (bis auf Maschinengenauigkeit)
Komplexe Zahlen (complex):
Beispiele: 2+4j, 1j, 1.j, -7.5+13.45j
Abfrage eines Objekt-Formats mit type():
>>> type(1)
<type ’int’>
>>> type(True)
<type ’bool’>
Stefan Meggendorfer Python Einfuhrung 12
Zahlenformate
Logik (bool):
Beispiele: True, False
Ganze Zahlen (int):
Beispiele: 0, 1, 12, -7beliebig große Zahlen darstellbar in reinem Python
Reelle Zahlen (float):
Beispiele: 0.0, 1.4, 2., -16.9875, 1e5, 1.e5, 2.345E-2beliebige Genauigkeit (bis auf Maschinengenauigkeit)
Komplexe Zahlen (complex):
Beispiele: 2+4j, 1j, 1.j, -7.5+13.45j
Abfrage eines Objekt-Formats mit type():
>>> type(1)
<type ’int’>
>>> type(True)
<type ’bool’>
Stefan Meggendorfer Python Einfuhrung 12
Zahlenformate
Logik (bool):
Beispiele: True, False
Ganze Zahlen (int):
Beispiele: 0, 1, 12, -7beliebig große Zahlen darstellbar in reinem Python
Reelle Zahlen (float):
Beispiele: 0.0, 1.4, 2., -16.9875, 1e5, 1.e5, 2.345E-2beliebige Genauigkeit (bis auf Maschinengenauigkeit)
Komplexe Zahlen (complex):
Beispiele: 2+4j, 1j, 1.j, -7.5+13.45j
Abfrage eines Objekt-Formats mit type():
>>> type(1)
<type ’int’>
>>> type(True)
<type ’bool’>
Stefan Meggendorfer Python Einfuhrung 12
Zahlenformate
Logik (bool):
Beispiele: True, False
Ganze Zahlen (int):
Beispiele: 0, 1, 12, -7beliebig große Zahlen darstellbar in reinem Python
Reelle Zahlen (float):
Beispiele: 0.0, 1.4, 2., -16.9875, 1e5, 1.e5, 2.345E-2beliebige Genauigkeit (bis auf Maschinengenauigkeit)
Komplexe Zahlen (complex):
Beispiele: 2+4j, 1j, 1.j, -7.5+13.45j
Abfrage eines Objekt-Formats mit type():
>>> type(1)
<type ’int’>
>>> type(True)
<type ’bool’>
Stefan Meggendorfer Python Einfuhrung 12
Zahlenformate
Logik (bool):
Beispiele: True, False
Ganze Zahlen (int):
Beispiele: 0, 1, 12, -7beliebig große Zahlen darstellbar in reinem Python
Reelle Zahlen (float):
Beispiele: 0.0, 1.4, 2., -16.9875, 1e5, 1.e5, 2.345E-2beliebige Genauigkeit (bis auf Maschinengenauigkeit)
Komplexe Zahlen (complex):
Beispiele: 2+4j, 1j, 1.j, -7.5+13.45j
Abfrage eines Objekt-Formats mit type():
>>> type(1)
<type ’int’>
>>> type(True)
<type ’bool’>
Stefan Meggendorfer Python Einfuhrung 12
Rechenoperationen
Grundoperationen: + - * /
Gruppierung: ()
Potenz: **
Floor division: // (geteilt und gerundet gegen −∞)
Modulo: %
Bemerkung: In Version 3 gibt jede Division einen float zuruck.
>>> 5/3
1.6666666666666667
Vorsicht: bei Division mit int in Version 2!!!
>>> 5./3
1.6666666666666667
>>> -5/3.
-1.6666666666666667
>>> 5/3
1
>>> -5/3
-2
Stefan Meggendorfer Python Einfuhrung 13
Rechenoperationen
Grundoperationen: + - * /
Gruppierung: ()
Potenz: **
Floor division: // (geteilt und gerundet gegen −∞)
Modulo: %
Bemerkung: In Version 3 gibt jede Division einen float zuruck.
>>> 5/3
1.6666666666666667
Vorsicht: bei Division mit int in Version 2!!!
>>> 5./3
1.6666666666666667
>>> -5/3.
-1.6666666666666667
>>> 5/3
1
>>> -5/3
-2
Stefan Meggendorfer Python Einfuhrung 13
Variablen und ZuweisungenEiner Variable einen Wert zuweisen:
n = 1
Der Variable n wird der int Wert
1 zugewiesen
width = 13.6
Der Variable width wird der float
Wert 13.6 zugewiesen
Mehreren Variablen gleichzeitig Werte zuweisen (multipleassignement):
n, width , length = 5, 13.6, 4.2
ist gleichbedeutend zu
n = 5
width = 13.6
length = 4.2
Variablen loschen mit del
>>> s = 1
>>> del(s)
>>> s
Traceback (most recent call last):
File ‘‘<stdin>’’, line 1, in <module>
NameError: name ’s’ is not defined
Stefan Meggendorfer Python Einfuhrung 14
Variablen und ZuweisungenEiner Variable einen Wert zuweisen:
n = 1
Der Variable n wird der int Wert
1 zugewiesen
width = 13.6
Der Variable width wird der float
Wert 13.6 zugewiesen
Mehreren Variablen gleichzeitig Werte zuweisen (multipleassignement):
n, width , length = 5, 13.6, 4.2
ist gleichbedeutend zu
n = 5
width = 13.6
length = 4.2
Variablen loschen mit del
>>> s = 1
>>> del(s)
>>> s
Traceback (most recent call last):
File ‘‘<stdin>’’, line 1, in <module>
NameError: name ’s’ is not defined
Stefan Meggendorfer Python Einfuhrung 14
Variablen und ZuweisungenEiner Variable einen Wert zuweisen:
n = 1
Der Variable n wird der int Wert
1 zugewiesen
width = 13.6
Der Variable width wird der float
Wert 13.6 zugewiesen
Mehreren Variablen gleichzeitig Werte zuweisen (multipleassignement):
n, width , length = 5, 13.6, 4.2
ist gleichbedeutend zu
n = 5
width = 13.6
length = 4.2
Variablen loschen mit del
>>> s = 1
>>> del(s)
>>> s
Traceback (most recent call last):
File ‘‘<stdin>’’, line 1, in <module>
NameError: name ’s’ is not defined
Stefan Meggendorfer Python Einfuhrung 14
Kombinierte Rechenoperationen
Rechenoperationen, die Variablen direkt verandern (“in-place”)
x += 2 # Erhoehung von x um den Wert 2
x -= 2 # Erniedrigung von x um den Wert 2
x *= 2 # Multiplikation von x mit 2
x /= 2 # Division von x durch 2
x **= 2 # Potenzieren von x hoch 2
(mathematisch) gleichbedeutend zu
x = x+2
x = x-2
x = x*2
x = x/2
x = x **2
ohne dabei neuen Speicherplatz zu allokieren.
Stefan Meggendorfer Python Einfuhrung 15
Strings 1
Texte werden in Anfuhrungszeichen geschrieben: "" oder ’’
string = "text" string = ’text’
Alles innerhalb des ersten und letzten Anfuhrungszeichens wird alsText interpretiert.
Beispiel 1:
>>> print(’#achte auf die "Anfuehrungszeichen "!’)
#achte auf die " Anfuehrungszeichen "!
Beispiel 2:
>>> print("#achte auf die ’Anfuehrungszeichen ’!")
#achte auf die ’Anfuehrungszeichen ’!
Stefan Meggendorfer Python Einfuhrung 16
Strings 1
Texte werden in Anfuhrungszeichen geschrieben: "" oder ’’
string = "text" string = ’text’
Alles innerhalb des ersten und letzten Anfuhrungszeichens wird alsText interpretiert.
Beispiel 1:
>>> print(’#achte auf die "Anfuehrungszeichen "!’)
#achte auf die " Anfuehrungszeichen "!
Beispiel 2:
>>> print("#achte auf die ’Anfuehrungszeichen ’!")
#achte auf die ’Anfuehrungszeichen ’!
Stefan Meggendorfer Python Einfuhrung 16
Strings 1
Texte werden in Anfuhrungszeichen geschrieben: "" oder ’’
string = "text" string = ’text’
Alles innerhalb des ersten und letzten Anfuhrungszeichens wird alsText interpretiert.
Beispiel 1:
>>> print(’#achte auf die "Anfuehrungszeichen "!’)
#achte auf die " Anfuehrungszeichen "!
Beispiel 2:
>>> print("#achte auf die ’Anfuehrungszeichen ’!")
#achte auf die ’Anfuehrungszeichen ’!
Stefan Meggendorfer Python Einfuhrung 16
Strings 1
Texte werden in Anfuhrungszeichen geschrieben: "" oder ’’
string = "text" string = ’text’
Alles innerhalb des ersten und letzten Anfuhrungszeichens wird alsText interpretiert.
Beispiel 1:
>>> print(’#achte auf die "Anfuehrungszeichen "!’)
#achte auf die " Anfuehrungszeichen "!
Beispiel 2:
>>> print("#achte auf die ’Anfuehrungszeichen ’!")
#achte auf die ’Anfuehrungszeichen ’!
Stefan Meggendorfer Python Einfuhrung 16
Strings 2
Mehrere Zeilen schreiben mit """mehrzeiliger Text""",Zeilenumbruche verhindern mit \
>>> print(""" Erste Zeile\
... mehr in der ersten Zeile
... zweite Zeile """)
Ausgabe:
Erste Zeilemehr in der ersten Zeile
zweite Zeile
Strings zusammenfuhren mit +
>>> s1, s2 = ’text’, ’message ’
>>> print(s1+s2)
textmessage
Stefan Meggendorfer Python Einfuhrung 17
Strings 2
Mehrere Zeilen schreiben mit """mehrzeiliger Text""",Zeilenumbruche verhindern mit \
>>> print(""" Erste Zeile\
... mehr in der ersten Zeile
... zweite Zeile """)
Ausgabe:
Erste Zeilemehr in der ersten Zeile
zweite Zeile
Strings zusammenfuhren mit +
>>> s1, s2 = ’text’, ’message ’
>>> print(s1+s2)
textmessage
Stefan Meggendorfer Python Einfuhrung 17
Listen 1
Eine Liste erstellen mit [ ]
squares = [1, 4, 9, 16, 25]
Auf Elemente zugreifen
Nummerierung von 0 bis n-1
>>> squares[0]
1
>>> squares[4]
25
oder ruckwarts von -1 bis -n
>>> squares[-1]
25
>>> squares[-5]
1
Auf Listenabschnitte zugreifen
>>> squares[2:4]
[9, 16]
>>> squares[3:4]
[16]
>>> squares[2:]
[9, 16 , 25]
>>> squares[:4]
[1, 4, 9, 16]
Stefan Meggendorfer Python Einfuhrung 18
Listen 1
Eine Liste erstellen mit [ ]
squares = [1, 4, 9, 16, 25]
Auf Elemente zugreifen
Nummerierung von 0 bis n-1
>>> squares[0]
1
>>> squares[4]
25
oder ruckwarts von -1 bis -n
>>> squares[-1]
25
>>> squares[-5]
1
Auf Listenabschnitte zugreifen
>>> squares[2:4]
[9, 16]
>>> squares[3:4]
[16]
>>> squares[2:]
[9, 16 , 25]
>>> squares[:4]
[1, 4, 9, 16]
Stefan Meggendorfer Python Einfuhrung 18
Listen 1
Eine Liste erstellen mit [ ]
squares = [1, 4, 9, 16, 25]
Auf Elemente zugreifen
Nummerierung von 0 bis n-1
>>> squares[0]
1
>>> squares[4]
25
oder ruckwarts von -1 bis -n
>>> squares[-1]
25
>>> squares[-5]
1
Auf Listenabschnitte zugreifen
>>> squares[2:4]
[9, 16]
>>> squares[3:4]
[16]
>>> squares[2:]
[9, 16 , 25]
>>> squares[:4]
[1, 4, 9, 16]
Stefan Meggendorfer Python Einfuhrung 18
Listen 2Werte zuweisen
>>> squares[1] = 100
>>> squares
[1, 100 , 9, 16 , 25]
>>> squares[1] = []
>>> squares
[1, [], 9, 16 , 25]
Listenabschnitte zuweisen
>>> squares[0:3] = [100 , 200 , 300]
>>> squares
[100 , 200 , 300 , 16 , 25]
>>> squares[0:3] = []
>>> squares
[16 , 25]
Liste von Listen
>>> A = [[1, 2, 3], [5, 7]]
>>> A[0]
[1, 2, 3]
>>> A[0][2]
3
Stefan Meggendorfer Python Einfuhrung 19
Listen 2Werte zuweisen
>>> squares[1] = 100
>>> squares
[1, 100 , 9, 16 , 25]
>>> squares[1] = []
>>> squares
[1, [], 9, 16 , 25]
Listenabschnitte zuweisen
>>> squares[0:3] = [100 , 200 , 300]
>>> squares
[100 , 200 , 300 , 16 , 25]
>>> squares[0:3] = []
>>> squares
[16 , 25]
Liste von Listen
>>> A = [[1, 2, 3], [5, 7]]
>>> A[0]
[1, 2, 3]
>>> A[0][2]
3
Stefan Meggendorfer Python Einfuhrung 19
Listen 2Werte zuweisen
>>> squares[1] = 100
>>> squares
[1, 100 , 9, 16 , 25]
>>> squares[1] = []
>>> squares
[1, [], 9, 16 , 25]
Listenabschnitte zuweisen
>>> squares[0:3] = [100 , 200 , 300]
>>> squares
[100 , 200 , 300 , 16 , 25]
>>> squares[0:3] = []
>>> squares
[16 , 25]
Liste von Listen
>>> A = [[1, 2, 3], [5, 7]]
>>> A[0]
[1, 2, 3]
>>> A[0][2]
3
Stefan Meggendorfer Python Einfuhrung 19
Listen 3
Liste erweitern mit + und += :
>>> liste = [0, 1, 2] + [42 , 43 , 44]
>>> liste
[0, 1, 2, 42, 43 , 44]
>>> liste = [0, 1, 2]
>>> liste += [42]
>>> liste
[0, 1, 2, 42]
oder mit der Methode obj.append() des Obejekts obj:
>>> liste = [0, 1, 2]
>>> liste.append(42)
>>> liste
[0, 1, 2, 42]
Stefan Meggendorfer Python Einfuhrung 20
Tuple
Erstellen eines tuple mit ()
>>> t1 = (1,2)
>>> t1
(1, 2)
>>> t2 = (1,2,3,4)
>>> t2
(1, 2, 3, 4)
>>> t3 = ()
>>> type(t3)
<type ’tuple ’>
>>> t4 = ((1, 2), (3, 4))
>>> t4
((1, 2), (3, 4))
Auslesen eines tuple mit [ ]
>>> t = (1, 2, 3, 4)
>>> t[0]
1
>>> t[3]
4
>>> t[1:3]
(2, 3)
Stefan Meggendorfer Python Einfuhrung 21
Tuple vs. List
Tuple
sind nicht veranderbar, nachdem sie erstellt wurden
nur das Auslesen ist erlaubt
benotigen weniger Speicherplatz als List
List
sind veranderbar
konnen ausgelesen, modifiziert, erweitert, verkleinert werden
benotigen mehr Speicherplatz als Tuple
Stefan Meggendorfer Python Einfuhrung 22
Kommentare
Kommentare beginnen mit einem # und werden vom Python-Interpreternicht ausgefuhrt:
# Erstmal ein Kommentar zu Anfang
x = 1 # Wir weisen der Variablen x den Wert 1 zu
# Hier schreiben wir noch einen Kommentar
text = "# KEIN Kommentar , wegen der Anfuehrungszeichen!"
# #######################################################
# TODO: Kommentare weglassen und Code so lesbar
# schreiben , dass moeglichst keine Kommentare
# noetig sind !!!
# #######################################################
ist gleichbedeutend zu
x = 1
text = "# KEIN Kommentar , wegen der Anfuehrungszeichen!"
Stefan Meggendorfer Python Einfuhrung 23
Logische Operationen
Wertevergleich
== # ist gleich
!= # ist nicht gleich
< # kleiner als
<= # kleiner oder gleich
> # groesser als
>= # groesser oder gleich
Logische Operatoren
and or not
Identitatsvergleich
is is not
Mengenzugehorigkeit
in not in
Stefan Meggendorfer Python Einfuhrung 24
Logische Operationen
Wertevergleich
== # ist gleich
!= # ist nicht gleich
< # kleiner als
<= # kleiner oder gleich
> # groesser als
>= # groesser oder gleich
Logische Operatoren
and or not
Identitatsvergleich
is is not
Mengenzugehorigkeit
in not in
Stefan Meggendorfer Python Einfuhrung 24
Logische Operationen
Wertevergleich
== # ist gleich
!= # ist nicht gleich
< # kleiner als
<= # kleiner oder gleich
> # groesser als
>= # groesser oder gleich
Logische Operatoren
and or not
Identitatsvergleich
is is not
Mengenzugehorigkeit
in not in
Stefan Meggendorfer Python Einfuhrung 24
Logische Operationen
Wertevergleich
== # ist gleich
!= # ist nicht gleich
< # kleiner als
<= # kleiner oder gleich
> # groesser als
>= # groesser oder gleich
Logische Operatoren
and or not
Identitatsvergleich
is is not
Mengenzugehorigkeit
in not in
Stefan Meggendorfer Python Einfuhrung 24
Nutzliche Funktionenprint(...)
>>> print(5, ’text’, sep=’_’, end=’\n’)
5_string
len(container)
>>> len([1, ’a’, [2, 3], "wort"])
4
range(start=0, stop, step=1)
>>> range(5)
0, 1, 2, 3, 4
>>> range(1, 4)
1, 2, 3
>>> range(1, 10 , 2)
1, 3, 5, 7, 9
list(iterable)
>>> list(range(1, 10 , 2))
[1, 3, 5, 7, 9]
Stefan Meggendorfer Python Einfuhrung 25
Blocke
Strukturierung durch EinruckenBlocke (z.B. alles was zu for oder if gehoren soll) werden durch gleicheAnzahl an Leerzeichen festgelegt!!!
>>> for x in range(100):
... if x == 2:
... print("for -Schleife wird abgebrochen")
... break
... print(x)
Empfehlung
4 Leerzeichen
keine Tabs benutzen
vor allem nicht Tabs und Leerzeichen mischen!
Stefan Meggendorfer Python Einfuhrung 26
Blocke
Strukturierung durch EinruckenBlocke (z.B. alles was zu for oder if gehoren soll) werden durch gleicheAnzahl an Leerzeichen festgelegt!!!
>>> for x in range(100):
... if x == 2:
... print("for -Schleife wird abgebrochen")
... break
... print(x)
Empfehlung
4 Leerzeichen
keine Tabs benutzen
vor allem nicht Tabs und Leerzeichen mischen!
Stefan Meggendorfer Python Einfuhrung 26
Control Flow Tools 1
Bedingte Wertzuweisung
x = a if condition else b
Beispiel:
>>> A = False
>>> x = 1 if A else 2
>>> print(x)
2
Stefan Meggendorfer Python Einfuhrung 27
Control Flow Tools 2
if-Verzweigung
if condition:
statement
elif condition:
statement
else:
statement
Beispiel:
>>> x = float(input(’Please enter a real number: ’))
Please enter a real number: -5
>>> if x > 0:
... print(x, ’> 0’)
... elif x < -1:
... print(x, ’< -1’)
... else:
... print(x, ’in [-1,1]’)
...
-5.0 < -1
Stefan Meggendorfer Python Einfuhrung 28
Control Flow Tools 3
while-Schleife
while condition:
statement
Beispiel:
>>> a = 0;
>>> while a < 3:
... a += 1
... print(a)
...
1
2
3
Stefan Meggendorfer Python Einfuhrung 29
Control Flow Tools 4
for-Schleife
for target_list in expression_list:
statement
Beispiel:
>>> # Laenge von strings messen:
... words = [’cat’, ’window ’, ’defenestrate ’]
>>> for w in words:
... print(w, len(w))
...
cat 3
window 6
defenestrate 12
Stefan Meggendorfer Python Einfuhrung 30
Control Flow Tools 5break: Unterbricht for- oder while-Schleifen
>>> for x in range(100):
... if x == 2:
... break
... print(x)
...
0
1
continue: Fortfahren mit nachster Iteration einer for- oderwhile-Schleife
>>> for x in range(4):
... if x == 2:
... continue
... print(x)
...
0
1
3
pass: Macht nichts
Stefan Meggendorfer Python Einfuhrung 31
Control Flow Tools 5break: Unterbricht for- oder while-Schleifen
>>> for x in range(100):
... if x == 2:
... break
... print(x)
...
0
1
continue: Fortfahren mit nachster Iteration einer for- oderwhile-Schleife
>>> for x in range(4):
... if x == 2:
... continue
... print(x)
...
0
1
3
pass: Macht nichts
Stefan Meggendorfer Python Einfuhrung 31
Control Flow Tools 5break: Unterbricht for- oder while-Schleifen
>>> for x in range(100):
... if x == 2:
... break
... print(x)
...
0
1
continue: Fortfahren mit nachster Iteration einer for- oderwhile-Schleife
>>> for x in range(4):
... if x == 2:
... continue
... print(x)
...
0
1
3
pass: Macht nichts
Stefan Meggendorfer Python Einfuhrung 31
Funktionen 1
Funktion definieren mit defSchreibe Fibonacci-Folge bis n
>>> def fib(n):
... a, b = 0, 1
... while a < n:
... print(a, end=’ ’)
... a, b = b, a+b
... print()
...
Aufrufen der Funktion
>>> fib(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
Stefan Meggendorfer Python Einfuhrung 32
Funktionen 2
Default argumentsSchreibe Fibonacci-Folge bis n (mit Default-Wert n = 100)
>>> def fib2(n=100):
... a, b = 0, 1
... while a < n:
... print(a, end=’ ’)
... a, b = b, a+b
... print()
...
Aufrufen der Funktion
>>> fib2(2000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
Aufrufen der Funktion mit Default-Wert n = 100
>>> fib2()
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34 , 55 , 89]
Stefan Meggendorfer Python Einfuhrung 33
Funktionen 3
Ruckgabe mit returnRuckgabe der Fibonacci-Folge bis n
>>> def fib3(n):
... result = []
... a, b = 0, 1
... while a < n:
... result.append(a)
... a, b = b, a+b
... return result
...
Funktion aufrufen und einer Variablen zuweisen
>>> f100 = fib3(100)
Ergebnis ausgeben
>>> f100
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34 , 55 , 89]
Stefan Meggendorfer Python Einfuhrung 34
Funktionen 4
Mehrere Eingangs-Variablen mit Komma trennenBerechnung der Potenz xn
>>> def power(x, n):
... if n == 0:
... return 1
... y = x
... for i in range(n-1):
... y *= x
... return y
...
Funktion aufrufen
>>> x = power(2, 10)
Ergebnis ausgeben
>>> x
1024
Stefan Meggendorfer Python Einfuhrung 35
Programme schreiben
“Aus Fehlern lernt man!!!”
Stefan Meggendorfer Python Einfuhrung 36
Python-Skript1 Ein Programm schreiben und speichern (z.B. unter myprogram.py)
# Ausgabe einer Matrix (d.h. einer Liste von Listen)
def print_matrix(A):
for i in range(len(A)):
for j in range(len(A[i])):
print(A[i][j], end=’ ’)
if j == len(A)-1:
print()
M = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
print_matrix(M)
2 Ausfuhren im Terminal: python myprogram.py
3 Ausgabe:
1 2 3
4 5 6
7 8 9
Stefan Meggendorfer Python Einfuhrung 37
Python-Skript
Ausfuhrbar machen von ProgrammenIn die ersten Zeilen der Datei skriptname.py schreibt man:
#!/ usr/bin/python3
# -*- coding: utf -8 -*-
Erste Zeile (Shebang): Pfad zum Python-Interpreter
Zweite Zeile: Verwendeter Zeichensatz in der Datei (utf-8 istStandard unter Linux).
Datei ausfuhrbar machen mit (im Terminal):
chmod +x skriptname.py
Aufrufen der Datei:
./skriptname.py oder pfad-zum-skript/skriptname.py
Stefan Meggendorfer Python Einfuhrung 38
Modulare Programmierung
“Programme systematisch in logische Teilblocke aufspalten”
HilfsmittelEin Programm in einem anderen Programm aufrufen mit
from ... import ... as ...
Stefan Meggendorfer Python Einfuhrung 39
Modulare Programmierung
Beispiel
Hilfsprogramm schreiben und unter mytools.py abspeichern
# Ausgabe einer Matrix (d.h. einer Liste von Listen)
def print_matrix(A):
for i in range(len(A)):
for j in range(len(A[i])):
print(A[i][j], end=’ ’)
if j == len(A)-1:
print()
Hauptprogramm schreiben und unter main.py abspeichern
from mytools import print_matrix as pm
A = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
pm(A)
Stefan Meggendorfer Python Einfuhrung 40
Modulare Programmierung
Beispiel
Hilfsprogramm schreiben und unter mytools.py abspeichern
# Ausgabe einer Matrix (d.h. einer Liste von Listen)
def print_matrix(A):
for i in range(len(A)):
for j in range(len(A[i])):
print(A[i][j], end=’ ’)
if j == len(A)-1:
print()
Hauptprogramm schreiben und unter main.py abspeichern
from mytools import print_matrix as pm
A = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
pm(A)
Stefan Meggendorfer Python Einfuhrung 40
Packages
“Machen das Leben einfacher...”
Stefan Meggendorfer Python Einfuhrung 41
Math
Beschreibung“This module [...] provides access to the mathematical functions definedby the C standard.”
Einbinden von Math
import math
Dokumentation
>>> help(math)
https://docs.python.org/3/library/math.html
Stefan Meggendorfer Python Einfuhrung 42
Math
KurzubersichtIm Package Math sind unter anderem folgende Funktionen programmiert:
fabs(x), factorial(x), fsum(iterable)
exp(x), log(x[, base]), sqrt(x)
cos(x), sin(x), tan(x)
isinf(x), isnan(x)
pi, e, inf, nan
BeispielBerechnung der Quadratwurzel von 2:
>>> import math
>>> math.sqrt(2.)
1.4142135623730951
Stefan Meggendorfer Python Einfuhrung 43
NumPy
Beschreibung“NumPy is the fundamental package for scientific computing withPython. It contains among other things:
An array object of arbitrary homogeneous items
Fast mathematical operations over arrays
Linear Algebra, Fourier Transforms, Random Number Generation”
Einbinden von NumPy
import numpy as np
Dokumentation
>>> help(np)
https://www.numpy.org/devdocs/user/quickstart.html
Befehlssammlung: http://mathesaurus.sourceforge.net/
Stefan Meggendorfer Python Einfuhrung 44
NumPy
Erzeugung von Matrizen
np.array(object, dtype=None):array vom Typ wie object, außer dtype ist gesetzt (z.B. auf intoder float)
Beispiel
>>> A = np.array([[1, 2, 3], [4, 5, 6]])
>>> A
array[[1, 2, 3],
[4, 5, 6]]
>>> print(A)
[[ 1 2 3]
[ 4 5 6]]
>>> B = np.array(A, dtype=float)
>>> B
array([[ 1., 2., 3.],
[ 4., 5., 6.]])
Stefan Meggendorfer Python Einfuhrung 45
NumPy
Erzeugung spezieller Matrizen
np.zeros(shape, dtype=float): Null-array
np.ones(shape, dtype=float): array bestehend aus Einsen
np.eye(N, M=None, k=0, dtype=float): Einheits-array
Beispiel
>>> np.zeros(2)array([ 0., 0.])>>> np.zeros((2,3))array([[ 0., 0., 0.],
[ 0., 0., 0.]])>>> np.zeros(2, dtype=int)array([ 0, 0])
>>> np.eye(2, dtype=int)array([[1, 0],
[0, 1]])>>> # Verschiebung der Diagonalen... np.eye(3, k=-1)array([[ 0., 0., 0.],
[ 1., 0., 0.],[ 0., 1., 0.]])
Stefan Meggendorfer Python Einfuhrung 46
NumPy
array Eigenschaften 1
array.ndim: Anzahl der Dimensionen des array (Matrix hat 2 Dim.)
array.shape: Dimensionen des array (z.B. fur Matrizen (n,m))
array.size: Gesamtanzahl aller Elemente des array
array.dtype: Elemente-Typ (z.B. numpy.int32, bool, ...)
Beispiel
>>> A = np.array([[1, 2, 3],
... [4, 5, 6]])
>>> A.ndim
2
>>> A.shape
(2, 3)
>>> A.size
6
Stefan Meggendorfer Python Einfuhrung 47
NumPy
array Eigenschaften 2
array.sum(): Summe uber alle Elemente
array.sum(axis=0): Summe uber alle Spalten
array.sum(axis=1): Summe uber alle Reihen
array.max(axis=None): Maximum (Gebrauch wie sum())
array.min(axis=None): Minimum (Gebrauch wie sum())
array.trace(offset=0): Summe der Diagonalelemente
Beispiel
>>> A = np.array([[1, 2, 3],... [4, 5, 6]])>>> A.sum()21>>> A.sum(axis=0)array([5, 7, 9])>>> A.sum(axis=1)array([ 6, 15])
>>> A.max()6>>> A.min(axis=1)array([1, 4])>>> A.trace()6>>> A.trace(offset=1)8
Stefan Meggendorfer Python Einfuhrung 48
NumPy
Arithmetische Operationen mit array
+ , - , * , / , ** : Elementweise Add., Subtr., Mult., Div., Potenz
< , <= , > , >= , == , != : Elementweise logische Vergleiche
np.sin(), np.exp(): Elem. Sinus, elem. Exponentialfunktion
Dimensionen zweier arrays muss gleich sein.
Beispiel
>>> A = np.array([[1, 2, 3],... [4, 5, 6]])>>> B = np.array([[2, 3, 0],... [1, 1, 0]])>>> A + Barray([[3, 5, 3],
[5, 6, 6]])>>> A * Barray([[2, 6, 0],
[4, 5, 0]])
>>> A < Barray([[ True , True , False],
[False , False , False]], dtype=bool)>>> np.sin(A)array([[ 0.90929743 , 0.14112001 , 0.],
[ 0.84147098 , 0.84147098 , 0.]])
Stefan Meggendorfer Python Einfuhrung 49
NumPy
Matrix-Operationen mit array
A.T: Transponierte von A
A.dot(B): Matrix Produkt von A und B. Ab Python ≥ 3.5 auchA @ B
Beispiel
>>> A = np.array([[1, 2, 3],
... [4, 5, 6]])
>>> B = np.array([[2, 3, 0],
... [1, 1, 0]])
>>> A.T
array([[1, 4],
[2, 5],
[3, 6]])
>>> A.dot(B.T)
array([[ 8, 3],
[23 , 9]])
>>> A.T.dot(B)
array([[ 6, 7, 0],
[ 9, 11, 0],
[12 , 15 , 0]])
Stefan Meggendorfer Python Einfuhrung 50
NumPy
Lineare Algebra: np.linalg
linalg.solve(A,b): Lose das LGS Ax = b nach x
linalg.det(A): Determinante von A
linalg.matrix_rank(A): Rang von A
linalg.inv(A): Inverse von A
linalg.svd(A): Singularwertzerlegung von A
linalg.eig(A)[0]: Eigenwerte von A
linalg.eig(A)[1]: Eigenvektoren von A (normalisiert)
Beispiel
>>> A = np.array([[2, 0],... [0, 4]])>>> b = np.array([2, 2])>>> x = np.linalg.solve(A,b)>>> xarray([ 1. , 0.5])
>>> np.linalg.det(A)7.9999999999999982>>> np.linalg.eig(A)[0]array([ 2., 4.])>>> np.linalg.eig(A)[1]array([[ 1., 0.],
[ 0., 1.]])
Stefan Meggendorfer Python Einfuhrung 51
NumPy
eindimensionale arrays
arange(start=0, stop, step=1, dtype=None):
Glm. verteilte Werte im halboffenen Intervall [start, stop) zur
Schrittweite step. (step sollte ganze Zahl sein, sonst besser linspace()).
linspace(start, stop, num=50, endpoint=True, dtype=
None):
Insgesamt “num” glm. verteilte Werte im abgeschlossenen Intervall
[start, stop]. Wenn endpoint=False, liegen Werte im halboffenen
Intervall [start, stop).
Beispiel
>>> np.arange(5)array([0, 1, 2, 3, 4])>>> np.arange(2, 50 , step=8)array([ 2, 10, 18, 26, 34 , 42])>>> np.arange(10 , 0, step=-2)array([10 , 8, 6, 4, 2])
>>> np.linspace(0, 1, num=5)array([ 0., 0.25 , 0.5, 0.75 , 1.])>>> np.linspace(1, 0, num=4,... endpoint=False)array([ 1., 0.75 , 0.5, 0.25])
Stefan Meggendorfer Python Einfuhrung 52
SciPy
BeschreibungEnthalt Programme zu:
Konstanten, Integration, Optimierung, Interpolation, FourierTransformation, Lineare Algebra, Statistik, gewohnlicheDifferentialgleichungen, ...
Einbinden von SciPy-Subpackages
from scipy import constants , linalg , interpolate
Dokumentation
https://www.scipy.org/
https://docs.scipy.org/doc/scipy/reference/
Stefan Meggendorfer Python Einfuhrung 53
matplotlib
BeschreibungPackage zur Visualisierung von Funktionen, Daten, Statistiken, ...
Einbinden von matplotlib
import matplotlib.pyplot as plt
Dokumentation
https://matplotlib.org/
https://matplotlib.org/tutorials/index.html
Stefan Meggendorfer Python Einfuhrung 54
matplotlib
Einen Plot erstellen
import numpy as npimport matplotlib.pyplot as plt
x = np.linspace(0, 2, 100)y1 , y2 , y3 = x, x**2, x**3
# Figure erstellenplt.figure ()
# Plots erstellenplt.plot(x, y1 , label=’linear ’)plt.plot(x, y2 , label=’quadratisch ’)plt.plot(x, y3 , label=’kubisch ’)
# Labels fuer x- und y-Achseplt.xlabel(’x-Achse’)plt.ylabel(’y-Achse’)
# Titel , Legende , Gridplt.title(’Polynome ’)plt.legend ()plt.grid()
# Plot anzeigenplt.show()
Stefan Meggendorfer Python Einfuhrung 55
matplotlib
Subplots und logarithmische Plots
import numpy as npimport matplotlib.pyplot as plt
x = np.linspace(0, 6, 100)y1 , y2 = x**2, x**3
# Figure mit subplots erstellenfig , ax = plt.subplots(2, 1)
# Subplot oben# logarithmisch in x und yax[0].loglog(x, y1)ax[0].grid()
# Subplot unten# logarithmisch in yax[1].semilogy(x, y2)ax[1].grid()
# Plot anzeigenplt.show()
Stefan Meggendorfer Python Einfuhrung 56
matplotlib
Farben und Linien-Stil
import numpy as npimport matplotlib.pyplot as plt
Pi = np.pix = np.linspace(0, 2*Pi, 100)y = np.sin(x)
# Max und Min von sin(x)xmaxmin = [Pi/2., 1.5*Pi]ymaxmin = [ 1. , -1. ]
plt.figure ()
# Farbe und Style festlegen# ’k’ schwarz , ’r’ rot# ’--’ dashed , ’o’ Kreiseplt.plot(x, y, ’k--’, label=’sin(x)’)plt.plot(xmaxmin , ymaxmin , ’ro’,
label=’MaxMin ’)
# Achsen -Limits festlegenplt.axis([0, 2*Pi, -1.2, 1.2])
plt.legend ()plt.show()
Stefan Meggendorfer Python Einfuhrung 57
Drehort von Monty Python’s: The Life of Brian (1979).
GIRAUD Patrick (https://commons.wikimedia.org/wiki/File:TUNISIE MONASTIR RIBAT 03.jpg),”TUNISIE MONASTIR RIBAT 03“,
https://creativecommons.org/licenses/by-sa/2.5/legalcode
Stefan Meggendorfer Python Einfuhrung 58