Python Programmieren Funktionen Module und Namensräume Datentypen in Python Was noch zu sagen bleibt... richard rascher-friesenhausen Programmierung SS 12 Daten: Wert und Typ Variablen Variablennamen und Keywords Anweisungen & Ausdrücke Operatoren und Operanden Hirarchie der Operatoren Kommentare richard rascher-friesenhausen Programmierung SS 12 PRG, SS 12 March 21, 2012 1
Daten: Wert und Typ Daten: Wert und Typ Programme manipulieren Daten um Ergebnisse zu erzielen. Alle Daten in Python haben einen Wert und einen Typ. Typische Vertreter von Werten, die wir bearbeiten werden sind etwa die 2 als Ergebnis der Operation 1+1 oder "Hello world!" als Ausgabe für unser erstes Programm. Beide Werte können mit der print Anweisung ausgegeben werden print 2 2 print "Hello world!" Hello world! Ab Python 3.0 ist print eine Funktion, d.h. print(2) 2 print("hello world!") Hello world! Will man das jetzt (ab Python 2.6) schon, dann from future import print_function richard rascher-friesenhausen Programmierung SS 12 Daten: Wert und Typ Zu jedem dieser Datenwerte gehört ein Datentyp: 2 ist eine ganze Zahl ( Integer ) und "Hello world!" eine Zeichenkette ( String ). Wir können den Datentyp abfragen, den Python für diese Werte verwendet: type(2) <type int > type("hello world!") <type string > Python kennt eine ganze Menge verschiedener Datentypen, die wir erst im Verlauf der weiteren Vorlesungen und Übungen kennenlernen, etwa Zahlen: int, long, float, comple Sequenzen: string, tuple, list Maps: dict und noch einige mehr... Wir können auch noch eigene Datentypen definieren (später bei Klassen und OOP). richard rascher-friesenhausen Programmierung SS 12 PRG, SS 12 March 21, 2012 2
Daten: Wert und Typ Warum verschiedene Datentypen? Computer muß Datenwerte im Speicher ablegen. Dafür muß er wissen, wieviel Platz zu reservieren ist (in Bytes). Zu jedem Typ gehört eine (feste) Anzahl von Bytes: int 4 Bytes float 8 Bytes comple 2 8 Bytes string Anzahl Zeichen 1 Byte Aber eigentlich wollen wir das zuerst noch garnicht wissen. Verwendete Werte liegen irgendwo im Speicher. Z.B. in C/C++ über Zeiger (Pointer) addressierbar. In Python gibt es keine Zeiger. Aber jeder verwendete Wert hat eine ID. Kommen wir noch darauf zurück. Aber eigentlich wollen wir das auch garnicht wissen. richard rascher-friesenhausen Programmierung SS 12 Variablen Variablen Variablen sind Namen (identifier), die Datenwerte referenzieren. Durch eine Zuweisung wird ein Wert einer Variablen zugeordnet (binding): two = 2 hello = "Hello World!" pi = 3.14 Auch den Inhalt bzw. Wert von Variablen kann man ausgeben print two 2 print hello Hello World! print pi 3.14 richard rascher-friesenhausen Programmierung SS 12 PRG, SS 12 March 21, 2012 3
Variablen Variablen haben auch eine Typ, nämlich den Typ des Wertes, den sie Referenzieren (welchen sonst... ) type(two) <type int > type(hello) <type str > type(pi) <type float > Aber! Variablen können problemlos an andere Werte gebunden werden und damit auch ihren Typ wechseln. three=3 print three, type(three), id(three) 3 <type int > 135279580 three="drei" print three, type(three), id(three) drei <type str > 135624832 three=3.0 print three, type(three), id(three) 3.0 <type float > 135632116 three=[ d, r, e, i ] print three, type(three), id(three) [ d, r, e, i ] <type list > 135624916 Python ist nicht typisiert. richard rascher-friesenhausen Programmierung SS 12 Variablennamen und Keywords Variablennamen und Keywords Wie soll ich meine Variablen nennen? Man sollte unbedingt Namen verwenden, die die Bedeutung der Variablen angeben. Etwa radius für den Radius eines Kreises oder area für den Flächeninhalt. Ich verwende meist englische Namen, da dies besser zu den (noch kommenden) englischen Funktions- und Kontrollnamen der Programmiersprache passt. Aber das ist jedermanns eigene Sache. Nur darf man nicht jeden Namen verwenden. Es gibt Regeln: Ein Name besteht aus Buchstaben, Ziffern und Unterstrichen. Ein Name muss mit einem Buchstaben oder einem Unterstrich beginnen. Gross- und Kleinschreibung wird unterschieden. Namen können nahezu beliebig lang sein. Keywords von Python sind als Namen nicht zulässig. richard rascher-friesenhausen Programmierung SS 12 PRG, SS 12 March 21, 2012 4
Variablennamen und Keywords MyVariable = 42 my_variable = 43 Variablennamen mit mehreren Worten: CamelCase oder Underscore. 42_string = "42" SyntaError: invalid synta make$ = 1000000 SyntaError: invalid synta lambda = 1.234 SyntaError: invalid synta Ich rate ab von Variablennamen mit Umlauten (ä, ö, ü, ß). (Und von Kommentaren bzw. Dateinamen mit Umlauten!) richard rascher-friesenhausen Programmierung SS 12 Variablennamen und Keywords Die Keywords sind Namen, die von der Programmiersprache vorbelegt sind und nicht anderweitig verwendet werden dürfen. Python kennt 31 Stück davon. Viele davon kommen einem vielleicht schon bekannt vor. Andere werden wir noch kennenlernen. Manche werden wir nicht verwenden. and as assert break class continue def del elif else ecept eec finally for from global if import in is lambda not or pass print raise return try richard rascher-friesenhausen Programmierung SS 12 PRG, SS 12 March 21, 2012 5 while with yield
Anweisungen & Ausdrücke Anweisungen & Ausdrücke Anweisungen sind ausführbare Instruktionen für Python. Bisher gesehen three=3 print "Hello world!" und wir werden noch viele mehr sehen. Ausdrücke sind Kombinationen von Werten, Variablen und Operatoren. Auf der Kommandozeile werden Ausdrücke von Python ausgewertet und dann ausgedruckt (nicht im Skript-Mode). In Zuweisungen werden die Ausdrücke auf der rechten Seite zuerst ausgewertet und dann das Resultat an die Variable gebunden. Bei Zuweisungen wird das Ergebnis (der Wert der Variablen) nicht ausgegeben. 1+1 2 two = 1+1 Interessant wird es, wenn wir die Operatoren bekommen. Also bis gleich... richard rascher-friesenhausen Programmierung SS 12 Operatoren und Operanden Operatoren und Operanden Python erkennt die folgenden Symbole als Operatoren : + * / % ** // << >> & ˆ < <= > >= <>!= == Wir werden uns nicht gleich alle auf einmal anschauen. Beschränken uns zuerst auf die mathematischen Operatoren: +, -, *, /, % und ** richard rascher-friesenhausen Programmierung SS 12 PRG, SS 12 March 21, 2012 6
Operatoren und Operanden Rechnen mit Integer Ganze Zahlen haben keinen Dezimalpunkt bzw. keine Nachkommastellen. Rechnen mit ganzen Zahlen funktioniert fast so wie man es erwartet: 5-1 6 0 sum = 2+3 print sum 5 1 6 1 diff = 2-3 print diff prod = 2*3 print prod div = 2/3 print div sum = 3+2 print sum diff = 3-2 print diff prod = 3*2 print prod div = 3/2 print div Ganzahlige Division rundet nach unten! (Ab Python 3.0 nicht mehr!!) from future import division 8 2 ep = 2**3 print ep 9 1 mod = 2%3 print mod ep = 3**2 print ep mod = 3%2 print mod richard rascher-friesenhausen Programmierung SS 12 Operatoren und Operanden Rechnen mit Float Reelle Zahlen haben einen Dezimalpunkt (und Nachkommastellen). Rechnen mit reellen Zahlen funktioniert so wie man es erwartet: sum = 2.0+3.0 print sum 5.0 diff = 2.-3. print diff -1.0 prod = 2.*3. print prod 6.0 div = 2./3. print div 0.666666666667 richard rascher-friesenhausen Programmierung SS 12 PRG, SS 12 March 21, 2012 7
Operatoren und Operanden Rechnen mit Comple Python kann auch mit kompleen Zahlen rechnen. Dabei steht j für die imaginäre Einheit: z = 2.0+3.0j type(z) <type comple > z*7 (14+21j) Beachte: kein * Zeichen zwischen der 3 und dem j. Realteil und Imaginärteil sind jeweils eine Float Zahl. Wir gehen aber nicht näher darauf ein. richard rascher-friesenhausen Programmierung SS 12 Hirarchie der Operatoren Hirarchie der Operatoren Es gelten die Vorrangsregeln des Rechnens aus der Schule: Potenzrechnung geht vor Punktrechnung geht vor Modulusrechnung geht vor Strichrechnung. Operator Symbol Potenzerien ** Multiplizieren * Dividieren / Modulus % Addieren + Subtrahieren - Will man daran etwas ändern, so muß man Klammern () setzen. richard rascher-friesenhausen Programmierung SS 12 PRG, SS 12 March 21, 2012 8
Kommentare Kommentare Wir hatten schon über Dokumentation geredet! Der übliche Weg, seinen Programmcode zu dokumentieren, sind Kommentare. In Python wird innerhalb einer Zeile alles ignoriert, was hinter einem # (Lattenzaun) steht. Etwa # hier ein Kommentar # und die zweite Zeile davon... two = 2 # zwei ist 2 # Berechne die Maschinengenauigkeit eps = 1.0 # initialisieren while (1.0+eps!= 1.0): # schrittweise verkleinern eps *= 0.5 eps *= 2.0 Sage, was eine Variable bedeutet, wenn nicht eindeutig ersichtlich. Sage, was eine Programmzeile/ein Programmblock macht, wenn nicht eindeutig ersichtlich. Sage, wer eine Datei editiert hat, was darin steht, welche Änderungen gemacht wurden. Ich rate von Kommentaren mit ä, ö, ü, ß ab. richard rascher-friesenhausen Programmierung SS 12 Bedingte Anweisungen Schleifen, Iterationen richard rascher-friesenhausen Programmierung SS 12 PRG, SS 12 March 21, 2012 9
Bedingte Anweisungen Bedingte Anweisungen Unter Bedingten Anweisungen verstehen wir Anweisungen, die nur dann ausgeführt werden, wenn eine gegebene Bedingung erfüllt wird. Das führt uns zu Boolschen Ausdrücken. Diese sind entweder wahr: True, 1; oder falsch: False, 0. Vergleich zweier ganzer Zahlen: 5 == 5 True 5 == 6 False # ist fuenf gleich fuenf?: ja # ist fuenf gleich sechs?: nein Die Vergleichsoperatoren sind: == y!= y > y >= y < y <= y # # # # # # ist ist ist ist ist ist gleich y? ungleich y? groesser y? groesser oder gleich y? kleiner als y? kleiner oder gleich y? Funktionieren natürlich auch für Floats. Und für Strings. richard rascher-friesenhausen Programmierung SS 12 Bedingte Anweisungen Man kann auch noch Boolsche Ausdrücke kombinieren mit Logische Operatoren and, or, not = 5 y = 6 ( == y) and (!= y) False ( == y) or (!= y) True not ( == y) True richard rascher-friesenhausen Programmierung SS 12 PRG, SS 12 March 21, 2012 10
Bedingte Anweisungen Wie steuere ich den Programmfluß gemäß einer Bedingung? Mit wenn... dann oder if. = 2 if > 0:... print " ist groesser 0!"... ist groesser 0! Programm prüft die Bedingung. Wenn sie erfüllt ist, werden die eingerückten Befehle unterhalb des if abgearbeitet. Ansonsten werden diese Befehle ignoriert bzw. übersprungen. Python kennt kein Klammern von Programmblöcken! Blöcke werden über Einrückung definiert. richard rascher-friesenhausen Programmierung SS 12 Bedingte Anweisungen Man kann sowohl für den True Fall als auch für den False Fall Anweisungen angeben: wenn... dann... sonst... if > 0: print " ist groesser 0!" else: print " ist kleiner oder gleich 0." Will man noch zwischen der Null und negativen Werten unterscheiden, dann if > 0: print " ist groesser 0!" else: if < 0: print " ist kleiner 0." else: print " ist gleich 0." Oder schöner/kürzer if > 0: print " ist groesser 0!" elif < 0: print " ist kleiner 0." else: print " ist gleich 0." richard rascher-friesenhausen Programmierung SS 12 PRG, SS 12 March 21, 2012 11
Bedingte Anweisungen Noch ein Beispiel: if 0 < : if < 10: print " ist 1, 2, 3, 4, 5, 6, 7, 8 oder 9". Schöner if (0 < ) and ( < 10): print " ist 1, 2, 3, 4, 5, 6, 7, 8 oder 9". Python kann das sogar noch schöner if 0 < < 10: print " ist 1, 2, 3, 4, 5, 6, 7, 8 oder 9". richard rascher-friesenhausen Programmierung SS 12 Schleifen, Iterationen Schleifen, Iterationen Wir wollen Anweisungen wiederholt ausführen. Dazu gibt es zwei Konstrukte: while und for. Eine while Schleife wiederholt solange einen Block von Anweisungen, wie eine Bedingung erfüllt wird. Eine for Schleife wiederholt für eine gegebene Liste von Dingen einen Block von Anweisungen. = 10 while > 0: = -1 print print "Lift off..." for in [9,8,7,6,5,4,3,2,1,0]: print print "Lift off..." 9 8 7 6 5 4 3 2 1 0 Lift off... richard rascher-friesenhausen Programmierung SS 12 PRG, SS 12 March 21, 2012 12
Schleifen, Iterationen Bei while Schleifen ist meist die Anzahl der Schleifendurchläufe im vorhinein nicht bekannt. Etwa in while n!= 1: print n if n%2 == 0: n = n/2 else: n = 3*n+1 # n ist gerade # n ist ungerade ist nicht sofort klar, wie lange die Schleife läuft für verschiedene n (ganze positive Zahl) oder ob sie überhaupt endet (Collatz Problem, siehe etwa http://personal.computrain.nl/eric/wondrous/inde.html, bisher offen). richard rascher-friesenhausen Programmierung SS 12 Schleifen, Iterationen Mit while kann man Endlosschleifen schreiben: while True: # do something Aus so einer Schleife kommt man nur noch mit dem break Befehl heraus. while True: n = input("bitte eine ganze Zahl eingeben: ") if n == 42: break print "und noch ne Runde" print "geschafft..." richard rascher-friesenhausen Programmierung SS 12 PRG, SS 12 March 21, 2012 13
Schleifen, Iterationen Bei einer for Schleife ist bekannt, für welche Objekte sie durchlaufen wird. Dazu wird die Objektliste vorgegeben: for item in [42, hallo,3.1415]: print item Zumeist geht es darum, eine gegebene Anzahl von Schleifendurchläufen zu machen: for in [0,1,2,3,4,5,6,7,8,9]: print 9- print "Lift off..." richard rascher-friesenhausen Programmierung SS 12 Schleifen, Iterationen Dafür gibt es speziell den Listenbefehl range: range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] range(1,11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] range(0,10,2) [0, 2, 4, 6, 8] range(10,0,-1) [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] D.h. dann for in range(10): print 9- print "Lift off..." richard rascher-friesenhausen Programmierung SS 12 PRG, SS 12 March 21, 2012 14
PRG, SS 12 March 21, 2012 15