Programmieren mit Python Programmierung ist die Kunst, dass ein Computer das macht, was du willst. Kurz und bündig Python ist eine Programmiersprache (Skriptingsprache), die als Einstieg in die Welt der Programmierung und auch für komplexere Programme geeignet ist. Entwickelt wurde sie (benannt nach Monty Python) Anfang der 90er Jahre vom Niederländer Guido van Rossum. Python ist Open Source und Freeware, läuft auf sehr vielen Computerplattformen und leitet den Programmierer zu strukturiertem Programmieren. Die Sprache hat eine elegante und (relativ) einfache Syntax und kann systematisch durch Module erweitert werden, welche entweder in Python oder aber auch in einer kompilierten Sprache wie C oder C++ geschrieben werden können. Einrückungen: Eine Besonderheit von Python ist - und dies unterscheidet die Sprache auch von allen anderen -, dass Blöcke durch Einrückung gekennzeichnet werden. Ein Block ist eine Folge von zusammengehörenden Anweisungen (Befehle). Für Python heißt das nun, dass zusammengehörige Anweisungen auf der gleichen Einrückungsebene stehen müssen, zum Beispiel: a = 3 if a > 0: print “Die Zahl ist positiv” else: print "Das war's" Werte und Variablen Wie jede halbwegs vernünftige Programmiersprache so besitzt auch Python die Möglichkeit mit Variablen und Zuweisungen zu arbeiten. Der wohl häufigste gebrauchte Befehl in Python ist die Zuweisung, d.h. wir weisen einer Variablen einen Wert zu. Variablen sind Platzhalter denen ein Wert zugewiesen werden kann, der im Laufe des Programms auch verändert werden kann und auf dessen Inhalt (Wert) wir mit dem Variablennamen zugreifen können. Einfacher gesagt: Variablen sind Schubladen in die wir beliebigen Inhalt füllen können. Diesen Inhalt können wir verändern (hinzufügen, wegnehmen usw.). Variablennamen: Der Name einer Variablen kann (fast) frei gewählt werden. Es gelten die folgenden Regeln: Variablen beginnen mit einem Buchstaben oder dem Unterstrich (_) Zeichen. Darauf kann eine beliebige Kombination aus Buchstaben, Zahlen oder Unterstrichen folgen. Der Name darf nicht mit einer Zahl beginnen! Variablennamen dürfen nicht einem reservierten Wort der Programmiersprache entsprechen. Python ist «case sensitive», das heißt, es wird zwischen Groß- und Kleinschreibung unterschieden. Variablennamen, Anweisungen usw. sollten immer genau so geschrieben werden wie vordefiniert. 1/9 Programmieren mit Python Zuweisungen: Eine Variable ist ein Name der einen Wert repräsentiert. Durch die Zuweisung wird eine Variable angelegt und ihr ein Wert zugewiesen. botschaft = "Wie geht es dir?" zahl = 17 pi = 3.14159 Hier haben wir drei Variablen, denen jeweils ein anderer Wert (mit anderem Datentyp) zugewiesen wird. Im ersten Beispiel weisen wir der Variablen botschaft den Wert Wie geht es dir? in Form einer Zeichenkette (string) zu. Im zweiten Fall der Variable zahl den (Ganz-) Zahlwert 17 (integer) und im dritten Beispiel der Variablen pi den Fließkommawert 3.14159 Werte und Typen: Ein Wert ist der eigentlich Inhalt, der in einer Variablen gespeichert wird. Werte können auch vereinfacht als die eigentlichen Daten angesehen werden, die wir verarbeiten wollen, d.h. ohne Werte keine Datenverarbeitung. Und wo keine Daten sind braucht es auch kein Programm. Werte können Zahlen, Fließkommazahlen, Zeichenketten, Objekte usw. sein. Eine Pythonvariable hat keinen festgelegten Typ und es muss ihr auch kein solcher zugewiesen werden, es können ihr alle verschiedenen Datentypen zugewiesen werden. Und im Verlaufe des Programms kann auch der Datentyp des Inhalts gewechselt werden durch simple Zuweisung eines anderen Werts. Kommentare, Ein- und Ausgabe Kommentare: Kommentare sind ein wichtiges Hilfsmittel um den Programmcode zu dokumentieren. In Python werden Kommentare mit dem Hashzeichen # gekennzeichnet, d.h. alles von diesem Zeichen an bis zum Ende der Zeile gilt als Kommentar und wird nicht ausgeführt. Als Ausnahme gilt der Fall, wenn das Kommentarzeichen innerhalb einer Zeichenkette steht. Dann ist es ein Zeichen der Zeichenkette und wird nicht als Kommentar gewertet. # Zahl 5 der Variablen x zuweisen x = 5 y = 3 # Zahl 3 der Variablen y zuweisen hallo = "# Das ist kein Kommentar" Ein- und Ausgabe: Praktisch jedes Programm gibt irgendetwas, z.B. das Resultat einer Berechnung, auf dem Bildschirm aus. In Python steht uns hierfür die Anweisung print() zur Verfügung, die Text oder Werte von Variablen auf dem Bildschirm ausgibt. Um Daten vom Benutzer anzufordern gibt es in Python die zwei Anweisungen: input() raw_input() Die Funktion input() nimmt nur Zahlenwerte entgegen, die Funktion raw_input() nur Zeichenketten. Es ist also wichtig, dies bei der Programmentwicklung zu berücksichtigen, sonst kann es zu unangenehmen Fehlern kommen. 2/9 Programmieren mit Python # Umrechnung Euro in CHF kurs = 1.4865 print "Bitte geben Sie einen Betrag in Euro ein:" eurobetrag = input() chfbetrag = kurs * eurobetrag print "Dies sind in CHF:" print chfbetrag Verkettung von Ausgaben: Die Anweisung print() erlaubt uns auch mehrerer Ausgaben in einer Zeile zu machen. Die einzelnen Teile der Ausgabe werden durch Kommata voneinander getrennt. Unser oben stehendes Programm lässt sich also folgendermaßen ändern: # Umrechnung Euro in CHF kurs = 1.4865 print "Bitte geben Sie einen Betrag in Euro ein:" eurobetrag = input() chfbetrag = kurs * eurobetrag print "Dies sind in CHF:", chfbetrag Kommentierte Eingabe: Die Funktionen input() und raw_input() können auch noch einen optionalen Parameter entgegen nehmen. Dabei handelt es sich um eine Zeichenkette, die einen Kommentar zur Eingabe beinhalten sollte. Dies erspart eine print-Anweisung. # Umrechnung Euro in CHF kurs = 1.4865 eurobetrag = input("Bitte geben Sie einen Betrag in Euro ein:") chfbetrag = kurs * eurobetrag print "Dies sind in CHF:", chfbetrag Datentypen Wie wir gesehen haben können Werte/Daten einen Typ haben, z.B. Ganzzahl, Fließkommazahl, Zeichenkette usw. Diese Typen nennt man Datentypen. Ausdrücke und Operatoren Ein Ausdruck wird durch folgendes Kennzeichen definiert: Er besitzt einen Wert. Im einfachsten Fall besteht ein Ausdruck lediglich aus einem Literal oder einer Variablen. Dann entspricht der Wert des Ausdrucks dem Wert des Literals bzw. der Variablen. Literale und Variablen können aber auch durch Literale und Variablen verknüpft werden. Dadurch entstehen zusammengesetzte Ausdrücke. Der Wert eines zusammengesetzten Ausdrucks kann entweder ein Zahlen-, ein Zeichenketten- oder ein Wahrheitswert sein. Ausdruck Art Wert Typ 7 true -7 7 + 5 7 > 5 x = (9 + 12) / 7 einfach einfach zusammengesetzt zusammengesetzt zusammengesetzt zusammengesetzt 3/9 7 true -7 12 true 3 Zahl Wahrheitswert Zahl Zahl Wahrheitswert Zahl Programmieren mit Python Operatoren: Operatoren verknüpfen Literale, Variablen oder Teilausdrücke zu größeren Ausdrücken. Operatoren unterscheiden sich in der Anzahl der Operatoren Arithmetische Operatoren haben als Operanden Zahlenwerte und liefern ebenfalls einen Zahlenwert als Ergebnis. Bei Verwendung mehrer arithmetischer Operatoren gilt die Regel: Punkt- vor Strichrechnung, d.h. Multiplikation und Division werden vor Addition und Subtraktion ausgeführt, bei gleicher Hierarchiestufe gilt Abarbeitung von links nach rechts. Operator Syntax Beispiel Wert Grundrechenarten + summand1 + summand2 7+4 11 minuend1 - minuend2 7-4 3 * faktor1 * faktor2 7*4 28 Division: hier gibt es ein paar Besonderheiten / dividend / divisor 7/4 1 (!!!!!) / dividend / divisor 7 / 4.0 1.75 // dividend // divisor (Restlose Division) 7 // 4 1 ab Python 3.0 wird / zur echten Division umgewandelt d.h. auch bei Ganzzahlendivision wird ein Rest ausgegeben / dividend / divisor 7/4 1.75 Modulo: liefert den Rest einer Ganzzahldivision % dividend % divisor 7%4 3 Potenz: ** basis ** faktor 12 ** 6 2985984 Funktionen für Zahlenwerte: Operator abs(x) int(x) long(x) float(x) pow(x,y) Funktion Betrag von x Umwandlung von x in einen Integerwert Umwandlung von x in einen Longintegerwert Umwandlung von x in eine Fließkommazahl Potenz y zur Basis x Beispiel abs(-12) int(12.6) long(12.6) float(12) pow(12,6) Wert 12 12 12L 12.0 2985984 Logische Operatoren Logische Operatoren haben als Operanden Wahrheitswerte und liefern ebenfalls Wahrheitswerte als Ergebnis. Mit Hilfe der logischen Operatoren UND (AND), ODER (OR) und NICHT (NOT) können mehrere Bedingungen miteinander verknüpft werden. Bitweise Operatoren Bitweise Operatoren sind vor allem für Low-Level Programmierer interessant, lassen sich hierdurch doch Zahlenwerte direkt im Speicherbereich manipulieren. 4/9 Programmieren mit Python Vergleichs-Operatoren Binäre Operatoren die als Ergebnis einen Wahrheitswert liefern. Die beiden Operanden werden auf Gleichheit, Ungleichheit oder der Erfüllung einer Ordnungsrelation hin überprüft. Die Operanden der Vergleichsoperatoren müssen den gleichen Datentypen besitzen. Operator Gleichheit == Ungleichheit != Syntax Beispiel Wert operand1 == operand2 true == false 1 == 1 "Rose" == "Tulpe" false true false operand1 != operand2 true != false 1 != 1 "Rose" != "Tulpe" true false true objekt1 is objekt1 objekt1 is not objekt2 1 1 Gleich-/Ungleichheit für Objekte is gleiche Objekte is not ungleiche Objekte Ordnungsrelationen: die Operanden einer Ordnungsrelation können von beliebigem Objekttyp sein. Für Zahlen verwendet Python die Ordnungsrelation der reellen Zahlen. Für Zeichenketten gilt die lexikografische Ordnung im Computerzeichensatz = Zifferzeichen sind kleiner als Buchstaben und alle Grossbuchstaben sind kleiner als jeder Kleinbuchstabe. < > <= >= operand1 < operand2 operand1 > operand2 operand1 <= operand2 operand1 >= operand2 4<7 "Zehn" > "10" 5 <= 7 5 >= 7 true true true false Achtung: Die Verwechslung des Zuweisungsoperatoren = mit dem Vergleichsoperator == ist die Ursache vieler, schwer zu entdeckender Programmfehler. Vergewissere dich darum jedes Mal, dass du den richtigen Operator ausgewählt hast. Zeichenketten, Listen und Tupel Operatoren Operator = Funktion Zuweisung + Operation * not in Wiederholung enthalten in nicht enthalten in for ... in ...: Zählschleife in X[i] X[i:j] Beispiel Wert x = 12 "Ein Beispiel" 2 * "Du" Du Du 1 in [1,2] 1 3 not in [1,2] 1 for x in [1,2]: hallo print "hallo" hallo "Ein" + " Beispiel" Indizierung, liefert Element aus X an der Stelle i (Zählung beginnt bei 0) Slicing, liefert aus X Unterelement von i bis j-1 zurück (Zählung beginnt bei 0) 5/9 x = "hallo" x[1] a x = "hallo" x[0:3] hal Programmieren mit Python Operator len(s) min(s) max(s) Funktion Länge kleinstes Element größtes Element Beispiel len("hallo") min("hallo") max("hallo") Wert 5 a o abkürzende Schreibweisen bei Zuweisungen: += -= *= /= %= Arithmetische Zuweisungen += Zeichenketten-Zuweisung Programmfluss In Python werden alle Anweisungen normalerweise in der Reihenfolge, in der sie aufgeschrieben wurden, bearbeitet. In sehr vielen Situationen ist eine solche lineare Vorgehensweise aber nicht erwünscht. Dies ist zum Beispiel der Fall, wenn ein bestimmter Teil des Skripts nur dann ausgeführt werden soll, wenn eine gewisse Bedingung erfüllt ist. Auch falls ein Teil eines Skripts mehrfach ausgeführt werden soll, muss vom linearen Programmablauf abgewichen werden. Python stellt für die bedingte Ausführung das Konstrukt if-else sowie in erweiterter Form if-elifelse zur Verfügung. Für die wiederholte Ausführung die Schleifen-Konstrukte for und while. Vielfach wird im Zusammenhang mit der Ausgabe von wiederholten Anweisungen - print Statements innerhalb einer Schleife - auch noch auf die formatierte Ausgabe zurückgegriffen. Verzweigungen (Bedingte Ausführung) Zur Steuerung eines Programmablaufs werden häufig Verzweigungen benötigt. Innerhalb des Programms wird dann aufgrund einer Bedingung entschieden, welcher Zweig des Programms ausgeführt werden soll. Bedingungen werden mit Hilfe von Vergleichsoperatoren formuliert. Einfache Verzweigung: Sollen bestimmte Abschnitte eines Programms nur unter gewissen Bedingungen (etwa einer bestimmten Eingabe des Benutzers) ausgeführt werden, stellt uns Python das if-else Konstrukt zur Verfügung. Im folgenden Beispiel wird untersucht, ob eine Variable größer als 0 ist. Wenn dies der Fall ist, so wird ausgegeben: Diese Zahl ist größer als 0, ansonsten wird ausgegeben: Diese Zahl ist nicht größer als 0. x = 12 if x > 0: print "Diese Zahl ist größer als 0" else: print "Diese Zahl ist nicht größer als 0" Mehrfache Verzweigung: In vielen Anwendungsfällen gibt es mehr als zwei Möglichkeiten, zwischen denen entschieden wird. Dazu wird eine mehrfache Verzweigung benötigt. Im folgenden Beispiel wird untersucht, ob eine Variable größer als 0, kleiner als 0 oder gleich 0 ist und entsprechend kommentiert: 6/9 Programmieren mit Python x = 12 if x > 0: print "Diese Zahl ist größer als 0" elif x < 0: print "Diese Zahl ist kleiner als 0" else: print "Bingo, diese Zahl 0" Logische Operatoren: Mit Hilfe der logischen Operatoren können mehrere Bedingungen miteinander verknüpft werden. Eine Bedingung, die aus einer oder mehreren Einzelbedingungen besteht, die mit dem Operator and verknüpft sind, ergibt wahr, wenn jede der Einzelbedingungen wahr ergibt. Eine Bedingung, die aus einer oder mehreren Einzelbedingungen besteht, die mit dem Operator or verknüpft sind, ergibt wahr, wenn eine der Einzelbedingungen wahr ergibt. Der Operator not kehrt den Wahrheitswert einer Bedingung um, d.h., eine falsche Bedingung wird wahr, eine wahre Bedingung wird falsch. Ein Beispiel: x = 12 y = 15 z = 18 #Bedingung if x<y and print "x else: print "x 1 x<z: ist die kleinste Zahl" ist nicht die kleinste Zahl" #Bedingung 2 if y>x or y>z: print "y ist nicht die kleinste Zahl" #Bedingung 3 if not z>y: print "z ist nicht größer als y" else: print "z ist größer als y" Geschachtelte Verzweigung: Verzweigungen können auch geschachtelt werden. Dies bedeutet, dass eine Verzweigung eine weitere Unterverzweigung beinhaltet. Ein Beispiel: x = -6 if x > 0: print "Diese Zahl ist größer als 0" else: if x < 0: print "Diese Zahl ist kleiner als 0" else: print "Bingo, diese Zahl 0" Schleifen Neben der Verzweigung gibt es noch eine weitere wichtige Struktur zur Steuerung des Programmablaufs: die Schleife. Mit Hilfe einer Schleife kann man die wiederholte Ausführung eines 7/9 Programmieren mit Python Programmschritts ermöglichen. Python stellt uns wie oben erwähnt für die wiederholte Ausführung die Schleifen-Konstrukte for und while zur Verfügung. Man verwendet eine for-Schleife, falls ein Programmschritt für eine regelmäßige, zu diesem Zeitpunkt bekannt Folge von Werten wiederholt ausgeführt werden soll. Man verwendet eine while-Schleife, falls sich erst durch Eingaben des Anwenders ergibt, ob ein Programmschritt wiederholt ausgeführt werden soll. for-Schleife - Aufbau: for i in 2, -6, 7.5, 22: print "Zahl:", i print "Quadrat:", i*i Die erste Zeile muss wie folgt gelesen werden: Führe die nachfolgenden eingerückten Anweisungen für jede Zahl aus der Liste 2, -6, 7.5, 22 aus. Nenne diese Zahl in diesen Anweisungen i. Natürlich kann auch eine andere Schleifenvariable anstelle i genommen werden. Die genannten Zahlen werden zusammen mit einem kurzen Informationstext ausgegeben und anschließend quadriert und ebenfalls ausgegeben. Im dargestellten Fall handelt es sich um eine unregelmäßige Liste von Zahlen. Meist werden Schleifen allerdings für regelmäßige Listen von Zahlen genutzt. Dabei erweist sich die Funktion range() als sehr nützlich: for i in range(3,11,2): print "Zahl:", i print "Quadrat:", i*i Range heisst übersetzt Bereich. Innerhalb der Klammern von range können bis zu drei Zahlen stehen (jeweils durch Komma getrennt): 1. erste Zahl: gibt den Beginn des Bereichs an 2. zweite Zahl: gibt das Ende des Bereichs an, d.h. (die erste Zahl) für den die Anweisung nicht mehr ausgeführt wird. 3. dritte Zahl: gibt den Abstand, die Schrittweite der Schleife an. Die Zahlen, für die die Anweisungen in unserem Beispiel ausgeführt werden, haben einen Abstand von +2 zueinander. Kurz und bündig: Die Funktion erzeugt eine regelmäßige Liste von ganzen Zahlen. range() kann mit einem, zwei oder wie bisher gesehen mit drei Parametern aufgerufen werden. Falls durch die Parameter keine sinnvolle Liste erzeugt werden kann, so wird die Schleife nicht durchlaufen. Endlosschleifen wie in anderen Programmiersprachen können nicht erzeugt werden. Varianten von range(): 1. Angabe von drei Parametern: Die Liste beginnt beim ersten und endet vor dem zweiten Parameter, die Schrittweite wird mit dem dritten Parameter angegeben. 2. Angabe von zwei Parametern: Die Liste beginnt beim ersten und endet vor dem zweiten Parameter, als Schrittweite wird 1 angenommen. 3. Angabe von einem Parameter: Die Liste beginnt bei 0 und endet vor dem angegebenen Parameter, als Schrittweite wird 1 angenommen. 8/9 Programmieren mit Python while-Schleife - Aufbau: summe = 0 while summe < 50: eingabe = input("Bitte Zahl eingeben ") summe += eingabe print "Zwischensumme: ", summe Zuerst wird die Variable für die Summe der Zahlen auf 0 gesetzt. Die while-Anweisung leitet die Schleife ein und bedeutet bei uns: Führe die Anweisungen solange aus als die Eingabe des Anwenders kleiner als 50 ist. D.h. die Schleife wird solange wiederholt bis der Anwender eine Zahl größer/gleich 50 eingibt. Merke: Bei einer while-Schleife wird immer angegeben, unter welchen Bedingungen wiederholt werden soll und nicht, unter welchen Bedingung beendet werden soll. Gezielte Steuerung der Verarbeitung: Python bietet uns ein paar Funktionen, um die Iterationen einer Schleife oder die Ausführung einer Kondition zu beeinflussen. Schleifensteuerung mit break und continue: Die Anweisungen break und continue bieten weitere Möglichkeiten zur Steuerung von Schleifen. Die Anweisung break führt zu einem unmittelbaren Abbruch der Schleife. Die Anweisung continue führt unmittelbar zum nächsten Durchlauf der Schleife, ohne die restlichen Anweisungen innerhalb einer Schleife zu beachten. Beide werden sinnvollerweise mit einer Bedingung verbunden und meist bei Sonderfällen eingesetzt. Im folgenden Beispiel soll der Preis von maximal zehn Tankfüllungen berechnet werden. Der Benutzer gibt die getankte Literzahl an, das Programm berechnet den Preis und gibt ihn aus. Falls der Benutzer einen negativen Wert eingibt, wird statt dem Preis eine Fehlermeldung ausgegeben und bei Eingabe des Werts 0 wird die Schleife vorzeitig beendet. for i in range(1,11,1): liter = input(str(i) + ": Wie viele Liter wurden getankt? ") if liter == 0: break # Abbruch der Schleife if liter < 0: print "Nur positive Werte eingeben" continue # Zum naechsten Durchlauf preis = liter * 1.32 print "Die Tankfüllung kostet ", preis 9/9