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
i.linkweiler@gmx.de
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-