Programmierung mit Python (2.6) Download: www.python.org/download => Python 2.6.x Windows installer Aufruf des Programms: Start => Alle Programme => Python 2.6 => IDLE(Python) GUI) Auf Bildschirm: IDLE 2.6 >>> Python als Rechenknecht Eingabe: 2+2 ENTER 4 >>> Eingabe: 2*(3+4) 14 >>> Eingabe: from math import * (damit ist der Gebrauch zahlreicher mathematischer Funktionen möglich. siehe F1 => Library Reference => 6.1 math – Mathematical Functions) Eingabe: sqrt(16) 4 Eingabe: sin(pi) 1.224606353822377e-016 Hotkeys: Alt + p und Alt+n : Springen in zuletzt eingegebenen Kommandos Strg+C zum Abbruch eines Programms, wenn die Ausführung zulange dauert Eingabe: zahl1=3 Eingabe: zahl2=5 Eingabe: zahl1+zahl2 8 Eingabe: zahl1*zahl2 15 Eingabe: zahl1**zahl2 243 (=35) Der Name einer Variable beginnt mit einem Buchstaben und kann auch Ziffern und Unterstriche _ enthalten. Programmierung mit Python Im Menü FILE => New Window SAVE AS Ein Programm soll den Umfang und den Flächeninhalt eines Rechtecks berechnen! FILE => New Window SAVE AS rechteck.py Python-Skript: # rechteck.py # Programm zur Berechung von A und U aus a und b print “Programm zur Berechnung von Umfang und Flaecheninhalt aus Laenge und Breite“ a = input (“Geben Sie die Laenge ein: “) b = input (“Geben Sie die Breite ein: “) U = 2*(a+b) A = a*b print “Umfang: „“,U,“Flaecheninhalt: “,A raw_input() #Dadurch bleibt das Bild bis zur Eingabe von RETURN Ausführung des Programms: Menü RUN => Run Module F5 Die Eingabe von Umlaute. #-*-coding: cp1252 -*- in der ersten oder zweiten Zeile erlaubt deutsche Ausführung eines Programms 0. Bei der Bearbeitung des Programms mit IDLE mit der Funktionstaste F5 Eventuell macht die eigene Firewall Schwierigkeiten, vor allem bei der Turtle-Grafik 1. Direkt über den Windows-Explorer 2. Über die Eingabeaufforderung. Genauen Pfad angeben, z.B. c:\programme\python\pythonprogramme>rechteck.py 3. Über Start => Ausführen ... => genaue Pfadangabe Übung: Schreibe ein Programm zur Berechnung von Oberfläche und Volumen eines Quaders. Übung: Schreibe ein Programm zur Berechnung der Diagonale eines Rechtecks. #diagonale.py #Programm zur Berechnung der Diagonale eines Rechtecks aus Länge und Breite print “Programm zur Berechnung der Diagonale eines Rechtecks“ a = input(“Laenge? “) b = input(“Breite? “) import math d = math.sqrt(a*a+b*b) print “Laenge der Diagonale: “,d print “Programmende mit RETURN” raw_input() Kontrollstrukturen Bedingte Anweisungen (Programmverzweigungen) Die einseitige Verzweigung (if) Format: if bedingung: anweisungsblock Beispiel: Schreibe ein Programm, das zu einer eingegebene Zahl ihre Betrag ausgibt. #Betrag.py #Programm gibt den Betrag einer Zahl aus print “Programm zur Bestimmung des Betrags einer Zahl“ z = input(“Geben Sie die Zahl ein: “) if z < 0 : z = -z print “Betrag: “,z raw_input() Die zweiseitige Verzweigung (if-else) Format: if bedingung: anweisungsblock 1 else: anweisungsblock 2 Mehrfache Fallunterscheidungen (elif) Format: if bedingung1 : anweisungsblock elif bedingung2 : anweisungsblock elif bedingung3 : anweisungsblock ... [else: anweisungsblock] Übung: Ein Programm soll das Körpergewicht nach dem body-mass-index beurteilen. #gewicht.py print “Programm zur Beurteilung des Körpergewichts“ groe = input (“Groesse in m: “) #Eingabe einer Dezimalzahl mit Dezimalpunkt gew = input (“Gewicht in kg: “) sex = raw_input (“weiblich (w) oder maennlich (m): “) #Eingabe einer Zeichenkette BMI = gew/(groe*groe) print “Dein BMI: “, BMI if sex ==“w“ or sex ==“W“: print “Du bist weiblich.” if BMI > 24: print “Du bist zu schwer!“ elif BMI < 19 print “Du hast Untergewicht!“ else: print “Du hast normales Gewicht.“ elif sex ==“m“ or sex ==“M“: print “Du bist maennlich.” if BMI > 25: print “Du bist zu schwer!“ elif BMI < 20 print “Du hast Untergewicht!“ else: print “Du hast normales Gewicht.“ else: print “Fehler bei der Eingabe“ raw_input() Wiederholungen Die bedingte Wiederholung (while-Schleife) Format: while Bedingung : anweisungsblock Übung: Schreibe ein Programm, das die Wurzeln eingegebener Zahlen berechnet. #wurzel.py print “Programm berechnet die Wurzel aus einer Zahl“ import math antwort = ’j’ while antwort == ’j’ : radikand = input (“Radikand: „) if radikant >=0 : wurzel = math.sqrt(radikand) print “Wurzel aus “, radikand, “=“, wurzel else: print “Der Radikand ist negativ!“ antwort = raw_input(“Noch einmal? (j/n) “) print “Programm beenden mit RETURN“ raw_input() Die Zählschleife (for-Schleife) Format: for name in Sequenz : anweisungsblock Übung: Schreibe ein Programm, das 10-mal den eingegebenen Text wiederholt. #berliner.py print “Programm schreibt zehnmal den eingegebenen Text.“ satz = raw_input(“Text: “),satz for i in (1,2,3,4,5,6,7,8,9,10) : print satz print “Programm mit RETURN beenden.” raw_input() Vereinfachung: Ersetze die Klammer durch range(10) Sequenzen 1. Listen a) Erzeugen einer Liste i) Durch Aufzählen >>> liste1 = [3,“rot“,5.0] >>> liste1 [3, ’rot’, 5.0] ii) Durch Erweitern einer vorhandenen Liste >>> liste1.append(8) >>> liste1[3] 8 iii) Durch Definition einer Liste vorgegebener Länge >>> liste2 = [0]*5 #Erzeugt Liste der Länge 5; alle Elemente sind 0 >>> liste2 [0, 0 ,0, 0 ,0] b) Methoden von Listen i) Ersetzen eines Listenelements durch ein anderes >>> liste[4] = 9 >>> list2 [0, 0, 0, 9] ii) An die Liste wird ein neues Element angehängt >>> liste.append(7) >>> liste [0, 0, 0, 9, 7] iii) liste.extend(5,8) #Die Liste wird um das Tupel (5,8) erweitert vi) del liste[3] #Das Element mit Index 3 wird aus der Liste #entfernt und die Liste somit um 1 verkürzt del liste[1:4] #Die Elemente mit Index 1, 2, 3 werden entfernt v) letztes= liste.pop() #Das letzte Element wird aus der Liste entfernt #und der Wert der Variablen letztes zugeordnet vi) liste.sort #Die Liste wird sortiert vii) liste.remove(5) #Die erste 5 wird aus der Liste entfernt viii) liste2 = liste1 + liste #Zwei Listen werden zu einer zusammengefügt Zufallszahlen from random import * randrange(6) randrange(1,7) randint(1,6) random() uniform(a,b) choice(folge) erzeugt Zufallszahlen von 0 bis 5 erzeugt Zufallszahlen von 1 bis 6 erzeugt Zufallszahlen von 1 bis 6 erzeugt reelle Zufallszahl in [0.0, 1.0) erzeugt reelle Zufallszahl in [a,b) gibt ein Element der Liste folge an Beispiel: Werfen eines Würfels #augenzahl.py # X[i] gibt an, wie oft die Augenzahl i beim wiederholten Werfen eines Wuerfels gefallen ist. #Das Programm simuliert die Verteilung von X print("Verteilung der Augenzahl X beim Werfen eines Wuerfels") from random import * n=input("Wie oft soll gewuerfelt werden? ") x = [0]*7 for i in range(n) : z=randint(1,6) x[z]=x[z]+1 print("x 1 2 3 4 5 print("H(X=x) "),x[1],(" "),x[2],(" "), \ x[3],(" "),x[4],(" "),x[5],(" "), x[6] 6") raw_input() Programmausführung: Verteilung der Augenzahl X beim Werfen eines Wuerfels Wie oft soll gewuerfelt werden? 6000 x H(X=x) 1 1013 2 1032 3 981 4 943 5 999 6 1032 Turtle-Grafik Aufgabe: Zeichne ein Quadrat #quadrat01.py print"Programm zeichnet ein Quadrat" from turtle import * seite = input("Seitenlaenge: ") farbe = raw_input("Farbe: (red, green, black, blue, yellow) :") color(farbe) forward(seite) left(90) forward(seite) left(90) forward(seite) left(90) forward(seite) left(90) Funktionen aus dem Modul turtle forward(distanz) Turtle geht um distanz Einheiten vorwärts backward(distanz) Turtle geht um distanz Einheiten rückwärts left(winkel) Turtle dreht sich um winkel Grad nach links right(winkel) Turtle dreht sich um winkel Grad nach rechts up() Turtle hebt den Zeichenstift an und bewegt sich ohne Spur down() Turtle senkt den Zeichenstift width(dicke) Stellt die Strichdicke für den Zeichenstift auf dicke Pixel ein color(farbe) Stellt die Farbe für den Zeichenstift ein, z.B. “red“, “blue“ fill(ein/aus) Schaltet Füllmodus ein mit dem Wert 1 oder aus mit dem Wert 0 reset() Löscht alle Zeichnungen im Grafik-Fenster und setzt Turtle auf Standard clear() Löscht alle Zeichnungen, aber der Zustand der Turtle bleibt erhalten Aufgabe: Zeichne drei verschachtelte Dreiecke #quadrat02.py print"Zeichnen von Quadraten" from turtle import * def quadrat(seite,farbe): color(farbe) for k in range(4): forward(seite) left(90) a=50 bunt = "red" quadrat(a,bunt) a=100 bunt = "blue" quadrat(a,bunt) a= 150 bunt = "green" quadrat(a,bunt) Aufgabe: Zeichne ein buntes Kleeblatt aus 4 Dreiecken #klee.py print"Zeichnen eines Kleeblatts aus 4 Dreiecken" from turtle import * def dreieck(seite,farbe): color(farbe) for k in range(3): forward(seite) right(120) for bunt in ["green","red","blue","yellow"]: dreieck(50,bunt) left(90) Aufgabe: Realisiere einen Kreis als n-Eck #kreis.py #Kreis als n-Eck print"Zeichnen eines Kreises als n-Eck" radius=input("Radius: ") eckenzahl=input("Anzahl der Ecken: ") eckenzahl = int(eckenzahl) from math import * from turtle import * def kreis(r,n): seite=2*pi*r/n seite=int(seite) winkel=360/n for k in range(n): forward(seite) right(winkel) kreis(radius,eckenzahl) Funktionen a) Funktionen ohne Parameter Aufgabe: Beurteile die Rechenleistung des Anwenders #leistung.py def gruss(): print “Dieser Test wurde von Thomas Lebrecht erstellt“ name = raw_input (“Geben Sie Ihren Namen ein!“) print “Hallo“,name,“, viel Erfolg beim Loesen!“ #name ist nur lokale Variable def aufgabe(): global resultat resultat = input(„4 + 5 = ? “) return resultat #Der Wert von resultat wird dem Haupt- #programm zur Verfuegung gestellt def auswertung(): global resultat #Es wird auf die Variable resultat des #Hauptprogramms zurueckgegriffen if resultat = =9: print “Sie sind bist Klasse!“ else: print “Du Versager!“ gruss() aufgabe() auswertung() b) Funktionen mit Parameter Aufgabe: Halbierung einer Zahl #halb.py def halbiere (zahl): global halb zahl = float(zahl) halb = zahl/2 return halb n = input("Zahl eingeben: ") halbiere(n) print halb print n #Eingabe: 7 #Ausgabe: 3.5 #Ausgabe: 7 Bemerkungen: 1. zahl ist eine lokale Variable. 2. Das als Parameter übergebene Objekt ist eine Zahl, also ebenso wie ein String oder ein Tupel unveränderbar. n behält auch nach Durchführung der Funktion seinen Wert. Beispiel: Quadriere eine Liste #Quadrieren einer Liste def quadriere (liste): for i in range (len(liste)): liste[i] = liste[i]*liste[i] #Hauptprogramm orglist = [3, 9, 12, 25] print orglist quadriere (orglist) print orglist #Ausgabe: [9, 81, 144, 625] Bemerkungen: Das Argument des Funktionsaufrufs ist als Liste ein veränderbares Objekt. Diese wird innerhalb der Funktion modifiziert. Dies wirkt sich auch auf das Hauptprogramm aus. Erklärung: Das Objekt selbst ist nicht lokal, sondern existiert außerhalb der Umgebung der Funktion. c) Rekursive Prozeduren Aufgabe: Zeichne einen selbstähnlichen Baum #baum.py print"Programm zeichnet einen selbstaehnlichen Baum" laenge=input("Stammlaenge: ") tiefe=input("Verschachtelungstiefe: ") from turtle import * def baum(a,t): if t>=0: forward(a) left(45) baum(a/2,t-1) right(90) baum(a/2,t-1) left(45) backward(a) left(90) baum(laenge,tiefe) right(90) Übungen Aufgabe: Berechne eine Nullstelle eines Polynoms n-ter Ordnung mit dem Halbierungsverfahren #Halbierungsverfahren.py def eingabeDerFunktion(): global n #Grad des Polynoms global koeffliste #Koeffizientenliste koeffliste=[] print "Berechnung einer Nullstelle eines Polynoms n-ten Grades" print "der Form a(n)*x^n + a(n-1)*x^(n-1) + ... + a(0) " print "mit dem Halbierungsverfahren" n=input("n = ") i=n while i >= 0: print "Eingabe von a(",i,")" koeff=input("Koeffizient: ") koeffliste.append(koeff) #An die Koeffizientenliste wird ein i = i-1 #Element angehaengt return koeffliste def funkt(x): global fvonx fvonx = koeffliste[0] for i in range(n): fvonx = fvonx*x + koeffliste[i+1] return fvonx def anfang(): global a global b for i in range(10): a=input("1. Anfangsnaeherung: ") b=input("2.Anfangsnaeherung: ") funkt(a) fa = fvonx funkt(b) fb = fvonx if fa*fb <0: return a return b break #Es wird solange nach nach Anfangsnaeherungen gesucht, bis #ein Intervall gefunden ist, in dem eine Nullstelle liegt. #Die Schleife wird dann mit break abgebrochen. def neu(x1,x2): global a,b m = (x1+x2)/float(2) fm = funkt(m) f1 = funkt(x1) if fm*f1 >= 0: a=m else: b=m return a return b eingabeDerFunktion() anfang() while abs(funkt(a))> 1E-6: neu(a,b) print a,b Aufgabe ( Primzahltest): Schreibe ein Programm, das testet, ob eine vorgegebene Zahl eine Primzahl ist. #primzahltest.py from math import * #Definition der Funktionen: def eingabe(): global n n=0 while n<=2: n=input("Zu pruefende Zahl: ") n = int(n) return n #Eingabeaufforderung so lange bis n >2 def primtest(n): grenze = int(sqrt(n))+1 for i in range(2,grenze): if n%i==0: print n, " = ", i, " * ", n/i break #Schleifenabbruch else: #Schleifen (for, while) können eine else-Klausel haben, #die nur dann ausgeführt wird, wenn die Schleife nicht print n, " ist eine Primzahl." #mit break abgebrochen wurde. #Hauptprogramm: print "Programm prueft, ob eine eingegebene Zahl > 2 prim ist." eingabe() primtest(n) Grafik #grafik1.py from Tkinter import * fenster = Tk() fenster.mainloop() #alle Funktionen des Moduls Tkinter werden importiert #Ein Objekt der Klasse Tk mit Namen fenster wird eingerichtet #Die Methode mainloop aktiviert ein Tk-Fenster #grafik2.py from Tkinter import * fenster= Tk() fenster.etikett= Label(master=fenster,text= ‘Hallo!’) fenster.etikett.pack() #Ein Objekt der Klasse Label mit Namen #fenster.etikett wird erzeugt. #Mit der Methode pack() wird das neue #Objekt etikett in die Darstellung des #Anwendungsfensters fenster eingebaut. fenster.mainloop() #grafik3.py from Tkinter import * fenster= Tk() fenster.etikett= Label(master=fenster,text= ‘Hallo!’, font=(’Comic Sans MS’,14),fg=’blue’) #als Schrifttyp wird Comic Sans MS #in der Schriftgröße 14; #Schriftfarbe ist Blau fenster.etikett.pack() fenster.title (’Formen’) #Ueberschrift leinwand=Canvas(fenster,width=800,height=600,bg=“yellow“) #Mithilfe von Canvas-Objekten werden Kreise, Rechtecke, Linien oder Textobjekte generiert leinwand.pack() rechteck=leinwand.create_rectangle(40,20,160,80,fill=“Moccasin“) kreis=leinwand.create_line(270,290,450,350,width=10,fill=“Lightblue“) vieleck=leinwand.create_polygon(500,80,500,120,600,120,500,80, fill =“white“) streckenzug=leinwand.create_line(270,290,450,350,300,200, arrow = LAST, width =10, fill = “blue“) #andere Werte fuer arrow: #FIRST, BOTH spruch=leinwand.create_text(300,50,text=“Aller Anfang ist schwer!“), font=(’Arial’,14), fill=“green“) fenster.mainloop()