Python im Informatikunterricht Lernumgebung Stifte und Mäuse Stifte und Mäuse mit Python Grundlagen zur Arbeit mit Python und SuM Universität Dortmund, Ingo Linkweiler, -1- Python im Informatikunterricht Lernumgebung Stifte und Mäuse WH: Stifte und Mäuse= Objektorientierte Lernumgebung mit vordefinierte Klassen: Bildschirm Stift Maus Anwendung Tastatur Buntstift Universität Dortmund, Ingo Linkweiler, -2- Ereignisanwendung Python im Informatikunterricht Lernumgebung Stifte und Mäuse Beispiele Python = Interpreter = Interaktiv Arbeiten mit Python Interaktiv im Interpreter Text-Editor Universität Dortmund, Ingo Linkweiler, -3- Integrierte Umgebungen Python im Informatikunterricht Lernumgebung Stifte und Mäuse Python-Interaktiv > python Python 2.2.2 (#37, Oct 14 2002, 17:02 Type "help", "copyright", "credits" Starten des Interpreters >>> from sum import * Import der Bibliothek >>> bild=Bildschirm() >>> maus=Maus() >>> stift=Stift() Erzeugen von Instanzen >>> stift.runter() >>> stift.bewegeBis(100,100) >>> .... Aufrufen von Methoden Universität Dortmund, Ingo Linkweiler, -4- Python im Informatikunterricht Lernumgebung Stifte und Mäuse Grundlagen zum Arbeiten mit Python Variablen / Wertzuweisungen • Dynamik: Variablen müssen nicht deklariert werden • Typ wird bei Zuweisung festgelegt. Beispiel: >>> zahl=1 >>> preis=5.98 >>> name="Thomas" Universität Dortmund, Ingo Linkweiler, -5- Python im Informatikunterricht Lernumgebung Stifte und Mäuse Operatoren ( +,-,*,/ ) == != oder <> <, <=, >, >= not, or,and für Addition, Subtraktion, Multiplikation, Division für Vergleiche auf Gleichheit für Vergleiche auf Ungleich für weitere Vergleiche >>> print 2*(3+4) 14 Universität Dortmund, Ingo Linkweiler, -6- Python im Informatikunterricht Lernumgebung Stifte und Mäuse Fallunterscheidungen Anweisungsblöcke müssen eingerückt werden !!! if x<0: print "x ist negativ" elif x==0: print "x ist Null" else: print "x ist positiv" Universität Dortmund, Ingo Linkweiler, -7- Python im Informatikunterricht Lernumgebung Stifte und Mäuse Schleifen x=1 while x<10: x=x+1 Einrücken ! Universität Dortmund, Ingo Linkweiler, -8- Python im Informatikunterricht Lernumgebung Stifte und Mäuse Objekte und Methoden bild=Bildschirm() stift=Buntstift() Name der Klasse. Methode (Nachricht) stift.runter() stift.bewegeBis(100,150) stift.hoch() Universität Dortmund, Ingo Linkweiler, -9- Parameter Python im Informatikunterricht Lernumgebung Stifte und Mäuse Ausprobieren ! Ein kleiner Kreis (o. a.) soll solange an der Mausposition gezeichnet werden, bis die Maustaste gedrückt wird. Ideen für Erweiterungen: Tastendruck wechselt Farbe, Größe o. a. Universität Dortmund, Ingo Linkweiler, -10- Python im Informatikunterricht Lernumgebung Stifte und Mäuse OOP mit Python Klasse: Modell, vereinfachte Darstellung von realen Dingen. Beschreibung durch Attribute (Eigenschaften) und Methoden (Aufträge und Anfragen) In Python: • Automatische Objekt- und Speicherverwaltung • Keine „Destruktoren“ nötig • Dynamik: Keine Deklarationen von Variablen und Attributen erforderlich • Alle Parameter polymorph • keine Zeiger (Pointer) Zeitersparnis ! Universität Dortmund, Ingo Linkweiler, -11- Python im Informatikunterricht Lernumgebung Stifte und Mäuse OOP mit Python Klasse: Beschreibung durch Attribute (Eigenschaften) und Methoden (Aufträge und Anfragen) class Person: def __init__(self, name): self.name=name def setzeAdr(self, adresse): self.adresse=adresse self ist immer erster Parameter, gefolgt von weiteren optionalen Parametern Attribute innerhalb der Klasse werden mit self notiert. Dynamische Typisierung def datenAusgeben(self): print self.name, self.adresse def liesAdresse(self): return self.adresse Rückgaben mit return Universität Dortmund, Ingo Linkweiler, -12- Python im Informatikunterricht Lernumgebung Stifte und Mäuse OOP mit Python class Person: def __init__(self, name): self.name=name p=Person("Heinz") def setzeAdr(self, adresse): self.adresse=adresse p.setzeAdr("Dortmund") def datenAusgeben(self): print self.name, self.adresse p.datenAusgeben() def liesAdresse(self): return self.adresse Heinz Dortmund print p.liesAdresse() Dortmund Universität Dortmund, Ingo Linkweiler, -13- Python im Informatikunterricht Lernumgebung Stifte und Mäuse Workshop-Projekt:Realisierung des Spieleklassikers Pong! Klasse Buntball: Klasse Tennisball: Klasse Spieler: Darstellung eines farbigen, bewegbaren Balls Erweiterung des Balls um Methoden für Richtungswechsel und Spielfeldbegrenzung Darstellung eines bewegbaren Spielers Kollisionstest mit Ball __init__() gibFrei() setzeFarbe(farbe) zeichne() bewege() bewegeBis(h,v) imSpielfeld() nachRechts() nachLinks() schneller() zeichne() bewegehoch() bewegerunter() trifft(ball) Universität Dortmund, Ingo Linkweiler, -14- Python im Informatikunterricht Lernumgebung Stifte und Mäuse Python Werkzeuge • Python Win / Active Python • IDLE • Große, freie Internet-Bibliotheken • CGI • Boa (Wie Delphi) • Zope • WingIde • Apache • PyNassi • Niki / Karel der Roboter • Turtle • Gato Universität Dortmund, Ingo Linkweiler, -15- Python im Informatikunterricht Lernumgebung Stifte und Mäuse Python Features • Listen • Tupel • Hashes • Strings • Dynamik • gute Lesbarkeit • leicht erlernbar • kostenlos Universität Dortmund, Ingo Linkweiler, -16- Python im Informatikunterricht Lernumgebung Stifte und Mäuse Diskussion Ingo Linkweiler www.ingo-linkweiler.de/diplom [email protected] www.python.org Universität Dortmund, Ingo Linkweiler, -17- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses Python-Syntax: integrierte Datentypen >>> >>> >>> >>> zahl = 3.141 tupel = (7, 42) text = 'Hallo.' print text*2 Dynamische Typisierung Hallo. Hallo. >>> komplex = complex(5,-2) >>> hash = {1: 'abc', 2: 'def' >>> liste = [0,1,2,3,4,5] >>> print liste[2:5] [2,3,4] } Notation für erweiterte Datentypen >>> print liste[:3] [0,1,2] for i in liste: tuwas(i) Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -18- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses Stifte & Mäuse: Java ....... vs. ....... Python public class RechteckProgramm4 { //Deklarationsteil private Bildschirm bildschirm; private Stift stift; private Maus maus; public void fuehreAus() { bildschirm=new Bildschirm(); stift = new Stift(); maus = new Maus(); stift.hoch(); stift.bewegeBis(20,20); stift.zeichneRechteck(100,100); while (!maus.istGedrueckt()){;} maus.gibFrei(); maus=null; stift.gibFrei(); stift=null; bildschirm.gibFrei(); bildschirm=null } } bildschirm = Bildschirm() stift = Stift() maus = Maus() stift.hoch(); stift.bewegeBis(20,20) stift.zeichneRechteck(100,100) while not maus.IstGedrueckt(): pass maus.GibFrei() stift.GibFrei() bildschirm.GibFrei() Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -19- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses Einfach zum Ziel - Java vs. Python Static? Public? Args? Void? Java class HelloWorld { public static void main(String[] args) { System.out.println("Hallo Welt."); } } Python print 'Hallo Welt.' Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -20- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses Pascal vs. Python Pascal Python program Test; var i: integer; i:=0; begin while i<10 do ; begin i:=i+1; writeln(i); end; writeln('fertig.'); ? Keine Deklaration u. Zeilentrenner, Blockbildung durch Einrücken i=0 while i<10: i=i+1 print i print 'Fertig.' end. Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -21- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses Schnelle Entwicklung = Baukastenprinzip aus der Prototypentwicklung & Spielwarenabteilung. Idee: Kombination fertiger Bausteine / Komponenten zu etwas Neuem. Beispiel: Lesen einer Webseite per HTTP: import urllib datei = urllib.urlopen("http://www.uni-dortmund.de") text = datei.read() datei.close() Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -22- Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses Beispiel: E-Mail versenden. import smtplib def eingabe(prompt): return raw_input(prompt).strip() smtphost fromaddr toaddrs subject msgtext = = = = = eingabe("Adresse des Mailservers: ") eingabe("Von........: ") eingabe("An.........: ") eingabe("Betreff....: ") eingabe("Nachricht..: ") # Erzeuge den Mail-Header msg = ("From: %s\r\n To: %s\r\n Subject: %s\r\n\r\n" % (fromaddr, toaddrs, subject) ) # Nachricht anhängen msg = msg + msgtext server = smtplib.SMTP(smtphost) server.sendmail(fromaddr, toaddrs, msg) server.quit() Diplomarbeit, Universität Dortmund, Ingo Linkweiler, -23- Python im Informatikunterricht Lernumgebung Stifte und Mäuse Diplomarbeit Schnelle Softwareentwicklung Interessen professioneller Entwickler GUI-Entwurf Rapid Prototyping Generatoren Bibliotheken Dokumentation Wiederverwendung … Portabilität Teamarbeit Lesbarkeit Fehlertoleranz … ? Schüler, Ausbilder Grundlagen Erlernbarkeit Algorithmen Leichte Syntax Orthogonalität … Gemeinsamkeiten? Konflikte? Universität Dortmund, Ingo Linkweiler, -24- Python im Informatikunterricht Lernumgebung Stifte und Mäuse Diskussion Universität Dortmund, Ingo Linkweiler, -25- Python im Informatikunterricht Lernumgebung Stifte und Mäuse Umfrage zur Lesbarkeit Universität Dortmund, Ingo Linkweiler, -26-