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