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 Ausdruck, der zu einem Wert ausgewertet werden kann, dar. Variablen sind Stellen im Speicher, in denen Werte abgelegt werden können. Variablen speichern Zustände. Variablen haben: Typ Namen Wert Im Programm sichtbar 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 d = "hello" name.py 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) ) a = 100000000000000000000000000000000 print( type (a) ) # Integer a = 1.0 print( type (a) ) a = 2.0 + 1.0j print( type (a) ) Eine Variable bekommt erst eine Speicheradresse, nachdem diese zum ersten mal einen Wert zugewiesen bekommt und der Datentyp wird aus dem zugewiesenen 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 Objektorientierte Verpackung Der imperative Bestandteil eines Java-Programms befindet sich innerhalb der Methoden. Methode B Imperative Programmierung. Prof. Dr. Margarita Esponda 7
Variablendeklarationen in C und in Java Typ Name Wert int breite; int hoehe = 10; int flaeche = 0; Semikolon In Java sagt der Datentyp unter anderem, wieviel Speicherplatz benötigt wird, um die entsprechende Variable speichern zu können. Symbolischer Name einer Speicheradresse Der Wert 0 ist der Inhalt der Speicheradresse. Prof. Dr. Margarita Esponda 8
Dynamisches Typsystem Virtuelle Maschine y = 10.5 a = 10 b = 30 sum = a+b mult = a*b y a b sum mult 10.5 10 30 40 300 Speicher Prof. Dr. Margarita Esponda 9
Zieladresse Zuweisungen A = B Ausdruck 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? l-wert x = x+2 r-wert Zwei verschiedene semantische Bedeutungen des gleichen Symbols. Prof. Dr. Margarita Esponda 10
Python-Zucker Multiple-Zuweisungen a, b, c = 2, 3, 5 print ( a, b, c ) >>> 2 3 5 a = b = c = 2 print ( a, b, c ) >>> 2 2 2 x = [a, b] = [1, 2] print ( a, b, x ) >>> 1 2 [1, 2 ] Prof. Dr. Margarita Esponda 11
Datentypen in Python Datentyp Beispiel Bemerkungen Integer a = 3 Float x = 1.0 Boolean Complex w = True c = 2 + 3j String t = "Text" oder t = 'Text' unveränderbar Liste l = [ 5, 3, 1, 6, 8 ] veränderbar Tuple p = ( 35, 0, "Name") unveränderbar Dictionary d = { 1:'a', 2:'b', 3:'c'} veränderbar Prof. Dr. Margarita Esponda 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 oder 3 = c Prof. Dr. Margarita Esponda 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 Wert Type int("12345") 12345 int type casting 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 Prof. Dr. Margarita Esponda 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.... >>> 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.... Prof. Dr. Margarita Esponda 16
Import-Anweisung Die import-anweisung ermöglicht in Python-Skripten den Zugang auf vorprogrammierte Module Einige interessante Module sind: sys: os: string: re: math: stdin, stderr, argv system, path split match compile 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 < Kleiner > Größer <= Kleiner oder gleich >= Größer oder gleich == Gleichheit!= Ungleichheit Prof. Dr. Margarita Esponda 23
Fallunterscheidung if-else-anweisung a = input( "Zahl = " ) if a<0: print ("a ist negativ" ) else: print ( "a ist positiv" ) a = input( "Zahl = " ) 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) True Prof. Dr. Margarita Esponda 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) 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) >>> spam bla eggs 1 2 3 4 15 30 1 a 2 b 3 c >>> Prof. Dr. Margarita Esponda 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
import random while-schleifen 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 Das Einrücken entscheidet, was zur Funktion gehört bzw. wann die Funktionsdefinition zu Ende ist. Funktionsname Argumente ( 1) π = 4 = + def pi_leibniz ( n ): sum = 0 n 2n for n in range( 0, n ): sum = sum +((-1)**n)/(2.0*n+1) sum = sum*4 return sum Die return-anweisung gibt das Ergebnis der Funktion zurück n 0 1 Prof. Dr. Margarita Esponda 32
Python-Funktionen etwas genauer: def Funktionsname ( Arg 1, Arg 2,... ) : Anweisung 1 Anweisung 2... Anweisung n 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) fun( 30, 70 ) fun(20, c=100) fun(c=50, a=100) fun(20) fun(c=30) fun() >>> a= 30 b= 70 c= 7 a= 20 b= 3 c= 100 a= 100 b= 3 c= 50 a= 20 b= 3 c= 7 a= 1 b= 3 c= 30 a= 1 b= 3 c= 7 >>> 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 assert exec kurze Erläuterung Zum Testen von Ausdrücken Ausführung von Programmcode from global in is pass Teil einer import-anweisung Verlegung einer Variablen in den globalen Namensraum Prüfung auf Mitgliedschaft in einer Sequenz test auf Identität 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): print(x) print(y) x = 6 print ('a= ', a, 'b= ', b, 'c= ', c) while(x>3): y = 4 print (x) print (y) print(y) print(x) x = x-1 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