Algorithmen und Programmieren II Einführung in Python

Werbung
Algorithmen und Programmieren II
Einführung in Python
SS 2010
Prof. Dr. Margarita Esponda
Prof. Dr. Margarita Esponda
1
Variablen
Funktionale Programmiersprachen Imperative Programmiersprachen
Eine Variable stellt nur den
symbolischen Namen von
einem Wert oder einem
Variablen sind Stellen im Speicher, in
denen Werte abgelegt werden können.
Variablen speichern Zustände.
Ausdruck, der zu einem Wert
ausgewertet werden kann,
dar.
Typ
Variablen
haben:
Namen
Im
Programm
sichtbar
Wert
Der Wert einer Variablen
kann nicht verändert
werden.
Adresse
Stelle im Speicher,
wo die Variable
sich während der
Ausführung des
Programms
befindet
Variablen müssen normalerweise vor der
erstmaligen Benutzung deklariert werden.
Prof. Dr. Margarita Esponda
2
Datentyp einer Variable
• In C wird damit die minimale Speichergröße, die eine
Variable braucht, festgelegt.
• In modernen Programmiersprachen wird damit der
Wertebereich, den eine Variable annehmen kann,
beschränkt.
• Python hat ein dynamisches Typsystem
Variablen in Python müssen nicht deklariert werden.
Der Datentyp von Variablen wird in Python erst zur
Laufzeit festgelegt und kann während der Ausführung
des Programmes verändert werden.
slide 3
Prof. Dr. Margarita Esponda
3
Kommentare in Python
""" Blockkommentare:
können sich über mehrere Zeilen
erstrecken.
"""
# von hier aus bis Ende der Zeile wird dieser Text ignoriert
...
Eingabe und Ausgabe
input ( Promt )
…
print ( Ausdrucke )
Die input-Funktion liest Zeichenketten aus der Standardeingabe
ein und gibt diese als Rückgabewert der Funktion zurück.
Die print-Funktion kann Zeichenketten, Zahlenwerte oder
zusammengesetzte Datenstrukturen ausgeben.
Prof. Dr. Margarita Esponda
4
In Python müssen Variablen nicht
deklariert werden
# Erste Anweisungen
small = 100
big = 9999999999999999999999999999999999999999999
b = True
c = 3.4
name.py
d = "hello"
print ( small, big, b, c, d )
Interpreter
>>>
100 99999999999999999999999999999 True 3.4 hello
Prof. Dr. Margarita Esponda
5
Dynamisches Typsystem
type-Funktion
a = 10
print( type (a) )
Eine Variable bekommt erst
a = 100000000000000000000000000000000
print( type (a) ) # Integer
a = 1.0
print( type (a) )
eine Speicheradresse,
nachdem diese zum ersten
mal einen Wert zugewiesen
bekommt und der Datentyp
wird aus dem zugewiesenen
a = 2.0 + 1.0j
print( type (a) )
Wert abgeleitet.
>>>
<class 'int'>
<class 'int'>
<class 'float'>
<class 'complex'>
>>>
Prof. Dr. Margarita Esponda
6
Imperative Grundbestandteile von Java
Quelldatei
Imperative
Programmierung
Klassedefinition
Methode A
Imperative
Programmierung
Methode B
Objektorientierte
Verpackung
Der imperative Bestandteil eines
Java-Programms befindet sich
Imperative
Programmierung
.
.
.
innerhalb der Methoden.
Prof. Dr. Margarita Esponda
7
Variablendeklarationen in C und in Java
Typ
Name
Wert
int
breite;
int
hoehe
= 10;
int
flaeche
= 0;
In Java sagt der Datentyp unter
anderem, wieviel Speicherplatz
benötigt wird, um die
entsprechende Variable
speichern zu können.
Prof. Dr. Margarita Esponda
Semikolon
Der Wert 0 ist der Inhalt der
Symbolischer
Speicheradresse.
Name einer
Speicheradresse
8
Dynamisches Typsystem
Virtuelle Maschine
y = 10.5
a = 10
b = 30
sum = a+b
mult = a*b
y
10.5
a
10
b
30
sum
40
mult
300
Speicher
Prof. Dr. Margarita Esponda
9
Zuweisungen
Zieladresse
Ausdruck
A=B
Zuweisungen sind destruktive Anweisungen.
Die Adresse mit dem symbolischen Namen A wird mit
dem Wert des Ausdrucks B überschrieben.
Was passiert, wenn eine Variable auf beiden Seiten
des Gleichheitszeichens steht?
x = x+2
l-Wert
r-Wert
Zwei verschiedene semantische Bedeutungen des
gleichen Symbols. Prof. Dr. Margarita Esponda
10
Multiple-Zuweisungen
Python-Zucker ☺
a, b, c = 2, 3, 5
print ( a, b, c )
a =b = c = 2
print ( a, b, c )
x = [a, b] = [1, 2]
print ( a, b, x )
Prof. Dr. Margarita Esponda
>>>
2 3 5
>>>
2 2 2
>>>
1 2 [1, 2 ]
11
Datentypen in Python
Datentyp
Integer
Float
Beispiel
a=3
x = 1.0
Boolean
w = True
Complex
c = 2 + 3j
String
t = "Text" oder t = 'Text'
Liste
l = [ 5, 3, 1, 6, 8 ]
Tuple
p = ( 35, 0, "Name")
Dictionary
Prof. Dr. Margarita Esponda
Bemerkungen
d = { 1:'a', 2:'b', 3:'c'}
unveränderbar
veränderbar
unveränderbar
veränderbar
12
Ausdrücke
Ein Ausdruck wird in der Informatik als eine
Berechnungsvorschrift verstanden, die einen eindeutigen Wert
darstellt.
Die einfachsten Ausdrücke in Python sind Konstanten
beliebiger Datentypen
Beispiel:
1
3.4
"hello"
(Literale)
Ausdrücke haben keinen l-Wert und können nicht auf der
linken Seite einer Anweisung stehen.
Beispiele:
a+b = c
Prof. Dr. Margarita Esponda
oder
3=c
13
Arithmetische Operatoren
Operator
Beschreibung
+
unär
ändert nichts an der Zahl
-
unär
ändert das Vorzeichen der Zahl
**
binär
Power-Operator
*
binär
Multiplikation
+
binär
Addition
-
binär
Subtraktion
/
binär
Division (bei integers ganzzahlig)
%
binär
Modulo (Restbildung)
//
binär
Division (immer ganzzahlig)
Prof. Dr. Margarita Esponda
14
Ausdrücke
Ausdrücke haben einen Wert und einen Datentyp
Beispiele: # type casting
type casting
Prof. Dr. Margarita Esponda
Wert
Type
int("12345")
12345
int
int(0xff)
255
int
int(3.14)
3
int
(3*11//5)
6
int
8%2
0
int
8/3
2.66..
float
float(3)
3.0
float
2**(2+1)
8
int
pow(2,3)
8
int
15
weitere Operationen …
>>> help ( int )
Methods defined here:
| __abs__(...)
| x.__abs__() <==> abs(x)
| __add__(...)
| x.__add__(y) <==> x+y
| __and__(...)
| x.__and__(y) <==> x&y
| __bool__(...)
| x.__bool__() <==> x != 0
| __ceil__(...)
| Ceiling of an Integral returns itself.
| __divmod__(...)
| x.__divmod__(y) <==> divmod(x, y)
| __eq__(...)
| x.__eq__(y) <==> x==y
| __float__(...)
| x.__float__() <==> float(x)
| __floor__(...)
| Flooring an Integral returns itself.
...
Prof. Dr. Margarita Esponda
>>> import math
>>>> math.pi, math.e
(3.1415926535897931, 2.7182818284590451)
>>> help (math)
FUNCTIONS
acos(...)
acos(x)
Return the arc cosine (measured in radians) of x.
acosh(...)
acosh(x)
...
radians) of x.
...
16
Import-Anweisung
Die import-Anweisung ermöglicht in Python-Skripten
den Zugang auf vorprogrammierte Module
Einige interessante Module sind:
sys:
stdin, stderr, argv
os:
system, path
string:
split
re:
match compile
math:
exp, sin, sqrt, pow
Prof. Dr. Margarita Esponda
17
Höhere Datenstrukturen
Python unterstützt vier sequentielle höhere Datentypen
Listen (dynamic arrays)
Tuples (immutable lists)
Dictionaries (hash tables)
Listen
Eine Liste ist eine veränderbare Sammlung von
Objekten verschiedener Datentypen.
Beispiele:
[]
# Leere Liste
liste = [1, 3.5, "Zeichenkette", 10]
a = [ 'Hi', 4, 0.234 ]
Prof. Dr. Margarita Esponda
18
Höhere Datenstrukturen
Tupel:
Ein Tupel ist eine Sammlung von Objekten verschiedener
Datentypen zu einem Objekt.
Im Gegensatz zu einer Liste ist die Folge der Elemente dabei
nicht veränderbar.
Beispiele:
()
# Leeres Tupel.
(1,)
# Tupel mit einem Element.
(1,2,3)
# Tupel mit drei Elementen.
(1, 'Eins')
# Tupel mit zwei Elementen.
number = (1, 'eins')
Prof. Dr. Margarita Esponda
19
Höhere Datenstrukturen
Dictionaries
Dictionaries sind eine Sammlung von Schlüsselund Wertepaaren.
Ein Dictionary ist also eine Liste aus Schlüssen
(keys), denen jeweils ein Wert (value) zugewiesen ist.
Beispiele:
{}
# Leerer Dictionary
{ 1:'Goethe', 2:'Schiller', 3:5.67 }
atomic_num = {'None' : 0, 'H' : 1, 'He' : 2}
Prof. Dr. Margarita Esponda
20
Zeichenketten, Listen und Tupel-Operatoren
Operator
Funktion
Beispiel
Wert
+
Konkatenation
"Eins" + " Zwei"
"Eins Zweil"
*
Wiederholung
2 * “Eins"
“Eins Eins”
in
enthalten in
1 in [1,2]
1
not in
nicht enthalten in
3 not in [1,2]
1
x[i]
Indizierung, liefert das
Element aus x an der
Position i
x = "hallo"
x[1]
a
x[i:j]
liefert aus x die Elemente
von i bis j-1 zurück
x = "hallo"
x[0:3]
hal
len(s)
Länge
len("hallo")
5
min(s)
kleinstes Element
min("hallo")
a
max(s)
grösstes Element
max("hallo")
o
Prof. Dr. Margarita Esponda
21
Wert- vs. Referenz-Semantik
• Wert-Semantik
Ein Ausdruck wird ausgewertet und das Ergebnis
direkt in eine Variablen-Adresse gespeichert.
• Referenz-Semantik
Ein Ausdruck wird zu einem Objekt ausgewertet,
dessen Speicheradresse in eine Variablen-Adresse
gespeichert wird.
Prof. Dr. Margarita Esponda
22
Vergleichsoperatoren
alle binär
Prof. Dr. Margarita Esponda
<
Kleiner
>
Größer
<=
Kleiner oder gleich
>=
Größer oder gleich
==
Gleichheit
!=
Ungleichheit
23
Fallunterscheidung
if-else-Anweisung
a = input( "Zahl = " )
a = input( "Zahl = " )
if a<0:
print ("a ist negativ" )
else:
print ( "a ist positiv" )
if a<0:
print ( "a ist negativ" )
elif a==0:
print ( "a ist gleich 0" )
else:
print ( "a ist positiv" )
Einrücken anstatt Klammern
Prof. Dr. Margarita Esponda
24
if-else-Anweisung
import random
bit = True
if bit:
print( True )
else:
print( False )
!
Zahlen und andere Datentypen
werden wie in C als
Wahrheitswerte interpretiert
True
bit = 0
if bit:
print(True)
else:
print(False)
False
bit = "Hi"
if bit:
print(True)
else:
print(False)
Prof. Dr. Margarita Esponda
True
25
Verwendung von "Dictionaries"
In Python gibt es keine switch-case-Anweisung wie in C und
Java, aber diese kann mit Hilfe von Dictionaries simuliert
werden.
def zero(): print( "just zero. " )
def sqr(): print( "n is a square number" )
def even(): print( "n is an even number " )
def prime(): print( "n is a prime number " )
case = {0 : zero,
1 : sqr,
4 : even,
9 : sqr,
2 : even,
3 : prime,
5 : prime,
7 : prime,
}
case[3]()
Prof. Dr. Margarita Esponda
26
for-Schleifen
for x in ['spam', 'bla', 'eggs']:
print (x)
for x in [1,2,3,4]:
print (x)
sum=0
for x in [1,2,3,4,5]:
sum = sum + x
print( sum)
>>>
spam
bla
eggs
1
2
3
4
15
for i in range(1,5):
sum += i
print( sum)
Dic = [(1,'a'), (2,'b'),(3,'c')]
for (a,b) in Dic:
print (a, b)
Prof. Dr. Margarita Esponda
30
1 a
2 b
3 c
>>>
27
for-Schleife
for Ausdruck in Sequenz :
Anweisungen
Bei der for-Schleife in Python wird nicht über eine Folge von Zahlen sondern
über Elemente einer Sequenz iteriert.
# Erzeugt alle Kombinationen von zwei
# Zeichen aus text
text = input ( "text = " )
for i in text:
for j in text:
print ( i+j )
Prof. Dr. Margarita Esponda
28
Logische Operatoren
Operator
Beschreibung
not
unär
logische Negation
or
binär
logisches Oder
and
binär
logisches Und
Bit-Operatoren
Operator
Beschreibung
~
unär
bitweise Inversion (Negation)
<<
binär
nach Links schieben
>>
binär
nach Rechts schieben
&
binär
bitweise UND
|
binär
bitweise ODER
^
binär
bitweise Exklusives Oder
Prof. Dr. Margarita Esponda
29
while-Anweisung
# Berechnet alle Quadratzahlen bis n
n = input( "n = " )
zaehler = 0
while zaehler<=n:
print (zaehler*zaehler)
zaehler = zaehler + 1
Prof. Dr. Margarita Esponda
30
while-Schleifen
import random
money = int ( input ( 'money? ' ) )
Der Zufallsgenerator wird
random.seed()
mit einem internen Startwert
initialisiert.
while money>0:
if random.randint (0,1) == 0:
money += 1
else:
money -= 1
print(money)
print( 'You are a great loser!' )
Prof. Dr. Margarita Esponda
31
Funktionen in Python
Eine Funktionsdefinition
startet mit dem
def-Schlüsselwort
Funktionsname
Argumente
(−1) n
π = 4∑
n =0 2n + 1
∞
def pi_leibniz ( n ):
sum = 0
for n in range( 0, n ):
sum = sum +((-1)**n)/(2.0*n+1)
sum = sum*4
return sum
Das Einrücken
entscheidet, was zur
Funktion gehört bzw.
wann die
Funktionsdefinition
zu Ende ist.
Prof. Dr. Margarita Esponda
Die return-Anweisung gibt
das Ergebnis der Funktion
zurück
32
Python-Funktionen
etwas genauer:
def Funktionsname ( Arg1, Arg2 , .
Anweisung1
Anweisung2
...
Anweisungn
..
):
Eine Anweisung der Form:
return Ergebniswert
befindet sich an beliebiger Stelle und beliebig oft in dem
Funktionsrumpf; sie beendet die Ausführung der Funktion mit der
Rückgabe eines Ergebniswertes.
Prof. Dr. Margarita Esponda
33
Funktionsdefinitionen
Funktionen können einen Dokumentationstext beinhalten, der als
Blockkommentar in der ersten Zeile der Funktion geschrieben
werden muss.
Beispiel:
def fact (n) :
""" Berechnet die Fakultät Funktion der Zahl n """
if n==0:
return 1
else:
return n*fact(n-1)
print( fact(5) )
>>>
120
>>> help (fact)
Help on function fact in module __main__:
fact(n)
Berechnet die Fakultät Funktion der Zahl n
Prof. Dr. Margarita Esponda
34
Funktionsargumente können sehr flexibel
angegeben werden.
""" Argumente von Funktionen """
def fun( a=1, b=3, c=7 ):
print ('a= ', a, 'b= ', b, 'c= ', c)
>>>
a= 30 b= 70 c= 7
fun( 30, 70 )
a= 20 b= 3 c= 100
fun(20, c=100)
a= 100 b= 3 c= 50
fun(c=50, a=100)
a= 20 b= 3 c= 7
fun(20)
a= 1 b= 3 c= 30
fun(c=30)
a= 1 b= 3 c= 7
fun()
>>>
Die Reihenfolge der Argumente kann verändert werden.
Nur die Argumente, die benötigt werden, können angegeben werden.
Prof. Dr. Margarita Esponda
35
break-Anweisung
Die break-Anweisung wird verwendet, um die Ausführung
einer Schleifenanweisung vorzeitig zu beenden.
while True:
s = input('Text eingeben: ')
if s == 'ende':
break
print ('Die Laenge des Texts ist', len(s))
print ('Tchüss.')
Prof. Dr. Margarita Esponda
36
continue-Anweisung
Die continue-Anweisung wird verwendet, um die restlichen
Anweisungen der aktuellen Schleife zu überspringen und
direkt mit dem nächsten Schleifendurchlauf fortzufahren.
while True:
s = input('Text eingeben: ')
if s == 'kein print':
continue
print ('Die Laenge des Texts ist', len(s))
Prof. Dr. Margarita Esponda
37
Reservierte Wörte in Python
help> keywords
and
else
import
raise
assert
except
in
return
break
exec
is
try
class
finally
lambda
while
continue
for
not
yield
def
from
or
del
global
pass
elif
if
print
Prof. Dr. Margarita Esponda
38
Reservierte Worte in Python
Wort
kurze Erläuterung
assert
Zum Testen von Ausdrücken
exec
Ausführung von Programmcode
from
Teil einer import-Anweisung
global
Verlegung einer Variablen in den globalen Namensraum
in
Prüfung auf Mitgliedschaft in einer Sequenz
is
test auf Identität
pass
Platzhalter, führt nichts aus
Prof. Dr. Margarita Esponda
39
Geltungsbereich und Lebenszeit von
Variablen
• Der Geltungsbereich einer Variable ist der
Bereich innerhalb des Programms, in dem
diese sichtbar ist.
• Lebenszeit ist die Zeit, die eine Variable
im Speicher existiert.
Prof. Dr. Margarita Esponda
40
Geltungsbereich und Lebenszeit von Variablen
Beispiel:
x=7
def fun(a=1, b=3, c=7):
x=6
print ('a= ', a, 'b= ', b, 'c= ', c)
while(x>3):
y=4
print(y)
print(x)
x = x-1
print (x)
print (y)
print(x)
print(y)
Prof. Dr. Margarita Esponda
41
Verschachtelte Funktionen
Funktionen können innerhalb anderer Funktionen
definiert werden.
def percent (a, b, c):
def pc(x): return (x*100.0) / (a+b+c)
return (pc(a), pc(b), pc(c))
print (percent (2,4,4))
print (percent (1,1,1))
>>>
(20.0, 40.0, 40.0)
(33.3333333333, 33.3333333333, 33.3333333333)
>>>
Prof. Dr. Margarita Esponda
42
Herunterladen