Termin 9:
Programmieren im Großen
Grundlagen der Informatik
Sommersemester 2006
Prof. Bernhard Jung
Übersicht
Programmiertechniken in Python
Import von Modulen
import-Anweisung
Ausgewählte Module der Python Standardbibliothek
Ein- und Ausgabe
Lesen und Schreiben in Dateien
Modul pickle
Hauptlernziel
• Techniken für das "Programmieren im Großen" kennen lernen und verstehen:
• Module / Bibliotheken
• Ein- und Ausgabe
Prof. B. Jung
Grundlagen der Informatik, SS 2006
1
Programmieren im Großen
import - Anweisung
mittels import-Anweisung kann man Module (Python-Skripte) in andere
Skripte importieren
import-Anweisungen o.ä. gibt es in allen gängigen Programmiersprachen
Import von
Definitionen von Funktionen (und Klassen) anderer Module werden so im
aktuellen Modul verfügbar
Standardmodulen (ausgeliefert mit Python-Distribution)
selbst geschriebenen Skripten
Formen (Python)
import modul1, modul2, …
from modul import name1, name2, …
importiert nur die benannten Funktionsdefinitionen des Moduls
Zugriff auf Definitionen ohne Erwähnung des Modulnamens
from modul import *
Zugriff auf Funktionsdefinitionen mittels modul1.definition
importiert alle Definitionen des Moduls
Zugriff auf Definitionen ohne Erwähnung des Modulnamens
Beispiele …
Prof. B. Jung
Grundlagen der Informatik, SS 2006
Programmieren im Großen
import - Anweisung
Beispiel: Gewünscht ist Verwendung der Funktionen des PythonSkripts (Moduls) "primzahlen.py" in anderem Python-Skript
"""Funktionen fuer Primzahlen"""
def prim(n):
"Testet, ob n Primzahl ist"
for teiler in range(2,n):
if n % teiler == 0:
return False
return True
primzahlen.py
primzahlen.py
def primListe(n):
u"liefert eine Liste der Primzahlen kleiner gleich n"
if n < 2:
return []
result = []
for zahl in range(2, n+1):
if prim(zahl):
result.append(zahl)
return result Grundlagen der Informatik, SS 2006
Prof. B. Jung
2
Programmieren im Großen
import – Anweisung, Beispiel (1)
Import des Moduls
primzahlen
Zugriff mit
Modulname
Zugriff ohne
Modulname
Æ Fehler
>>> import primzahlen
>>> primzahlen.prim(5)
True
>>> primzahlen.prim(8)
False
>>> prim(8)
Traceback (most recent call last):
File "<pyshell#8>", line 1, in -toplevelprim(8)
NameError: name 'prim' is not defined
>>>
Prof. B. Jung
Grundlagen der Informatik, SS 2006
Programmieren im Großen
import – Anweisung, Beispiel (2)
Import der Funktion prim
aus Modul primzahlen
Zugriff ohne
Modulname
Æ jetzt ok
>>> from primzahlen import prim
>>> prim(9)
False
>>> l = primListe(8)
Zugriff auf nicht
importierte Funktion
Æ Fehler
Traceback (most recent call last):
File "<pyshell#12>", line 1, in -toplevell = primListe(8)
NameError: name 'primListe' is not defined
>>>
Prof. B. Jung
Grundlagen der Informatik, SS 2006
3
Programmieren im Großen
import – Anweisung, Beispiel (3)
Import aller Funktionen
aus Modul primzahlen
Zugriffe auf beide
Funktionen des Moduls
Prof. B. Jung
>>> from primzahlen import *
>>> prim(9)
False
>>> primListe(13)
[2, 3, 5, 7, 11, 13]
>>>
Grundlagen der Informatik, SS 2006
Programmieren im Großen
import – Anweisung
Wo sucht Python die zu importierenden Module?
im aktuellen Verzeichnis
wo zuletzt eine .py – Datei geöffnet wurde
in den Verzeichnissen der sys.path Variable
Inspektion in IDLE: File >> Path Browser
Inspektion der sys.path Variable …
Prof. B. Jung
Grundlagen der Informatik, SS 2006
4
Inspektion und Erweitern von sys.path
>>> import sys
>>> sys.path
['C:\\Python24\\Lib\\idlelib', 'C:\\WINDOWS\\system32\\python24.zip', 'C:\\Python24',
'C:\\Python24\\DLLs', 'C:\\Python24\\lib', 'C:\\Python24\\lib\\plat-win',
'C:\\Python24\\lib\\lib-tk', 'C:\\Python24\\lib\\site-packages', 'C:\\Python24\\lib\\sitepackages\\win32', 'C:\\Python24\\lib\\site-packages\\win32\\lib', 'C:\\Python24\\lib\\sitepackages\\Pythonwin', 'C:\\Python24\\lib\\site-packages\\wx-2.6-msw-unicode']
>>> sys.path.append(r'C:\Dokumente und Einstellungen\Jung\Eigene
Dateien\MyPythonPrograms')
>>> sys.path
['C:\\Python24\\Lib\\idlelib', 'C:\\WINDOWS\\system32\\python24.zip', 'C:\\Python24',
'C:\\Python24\\DLLs', 'C:\\Python24\\lib', 'C:\\Python24\\lib\\plat-win',
'C:\\Python24\\lib\\lib-tk', 'C:\\Python24\\lib\\site-packages', 'C:\\Python24\\lib\\sitepackages\\win32', 'C:\\Python24\\lib\\site-packages\\win32\\lib', 'C:\\Python24\\lib\\sitepackages\\Pythonwin', 'C:\\Python24\\lib\\site-packages\\wx-2.6-msw-unicode',
'C:\\Dokumente und Einstellungen\\Jung\\Eigene Dateien\\MyPythonPrograms']
>>> import primzahlen
>>>
Prof. B. Jung
Grundlagen der Informatik, SS 2006
Standardbibliotheken in Python – welche gibt es?
IDLE: Help > Python Docs
Prof. B. Jung
Grundlagen der Informatik, SS 2006
5
Standardbibliotheken in Python – welche gibt es?
Prof. B. Jung
Grundlagen der Informatik, SS 2006
Ausgewählte Standardbibliotheken:
Modul math
Definition von Konstanten
pi
e
Definition mathematischer Funktionen
ceil(x) – x wird aufgerundet
floor(x) – x wird abgerundet
sin(x), cos(x), tan(x) – Sinus, Cosinus, Tangens von x
asin(x), acos(x), atan(x)
degrees(x), radians(x)-Konversion zw. Bogenmaß und Grad
fabs(x) – Betrag von x (als float)
log(x), log10(x) – Logarithmus von x zur Basis 2 bzw. 10
…
Prof. B. Jung
Grundlagen der Informatik, SS 2006
6
Ausgewählte Standardbibliotheken:
Modul math
>>> from math import *
>>> fabs(-1.1)
1.1000000000000001
>>> pi
3.1415926535897931
>>> cos(pi)
-1.0
>>> sin(pi/2)
1.0
>>> floor(8.5)
8.0
>>> ceil(8.5)
9.0
>>> acos(0.5)
1.0471975511965976
>>>
Prof. B. Jung
Grundlagen der Informatik, SS 2006
Ausgewählte Standardbibliotheken:
Modul random
Funktionen
randint(a, b) – liefert zufällige Integer-Zahl zw. a und b
(inklusive)
random() – liefert zufällige Realzahl zwischen 0 und 1
uniform(a,b) - liefert zufällige Realzahl zw. a und b (inklusive)
choice(Sammlung) – liefert ein zufälliges Element der
Sammlung (z.B. Liste, Menge)
sample( Sammlung, k) – liefert k Zufallselemente aus
Sammlung
…
Prof. B. Jung
Grundlagen der Informatik, SS 2006
7
Ausgewählte Standardbibliotheken:
Modul random
>>> from random import *
>>> random()
0.79513661012444292
>>> random()
0.93153037147896656
>>> randint(30,39)
36
>>> sample( ['a', 'b', 'c', 'd', 'e'], 3)
['b', 'a', 'c']
>>> sample( ['a', 'b', 'c', 'd', 'e'], 3)
['c', 'a', 'b']
>>> sample( range(50), 10)
[23, 14, 43, 6, 29, 42, 24, 18, 28, 8]
Prof. B. Jung
Grundlagen der Informatik, SS 2006
Auswahl Python-Bibliotheken für Multimedia
(in Jython andere Multimedia-Bibliotheken)
Tkinter
graphische Benutzeroberflächen
Bilder
Winsound
Sound auf Windows-Plattform
>>> import winsound
>>> winsound.PlaySound(r'C:\Dokumente und
Einstellungen\Jung\Eigene Dateien\Sounds\techno_mono.wav',
winsound.SND_ASYNC )
>>>
Prof. B. Jung
Grundlagen der Informatik, SS 2006
8
Ein- und Ausgabe: Übersicht
Interaktive Ein- und Ausgabe in Python-Interpreter
Ausgabe: print
auch formatierte Ausgabe (siehe auch Übungen), z.B.
>>> print '%1.3f' % 1.2
1.200
Eingabe: input(), raw_input()
Ein- und Ausgabe von / in Dateien
Datenbanken
später
Prof. B. Jung
Grundlagen der Informatik, SS 2006
Interaktive Eingabe
Eingabe in der Python-Shell
raw_input()
input()
Achtung: Interaktive Eingabe
funktioniert nicht in
JES-Interpreter
Rückgabewert ist immer vom Typ String
Typ des Rückgabewerts entsprechend Eingabewert
>>> i = input("Geben Sie eine Zahl ein: ")
Geben Sie eine Zahl ein: 10
>>> print type(i), i + 1
<type 'int'> 11
>>> i = raw_input("Geben Sie eine Zahl ein: ")
Geben Sie eine Zahl ein: 10
>>> print type(i), i + 1
<type 'str'>
Traceback (most recent call last):
File "<pyshell#34>", line 1, in -toplevelprint type(i), i + 1
TypeError: cannot concatenate 'str' and 'int' objects
>>>
Prof. B. Jung
Grundlagen der Informatik, SS 2006
9
Interaktive Eingabe - Beispiele
>>> name = raw_input("Geben Sie Ihren Namen ein: ")
Geben Sie Ihren Namen ein: Jung
>>> print name
Jung
>>> type(name)
<type 'str'>
>>> zahl = raw_input("Geben Sie einen Wert ein: ")
Geben Sie einen Wert ein: 10
>>> print zahl
10
>>> type(zahl)
<type 'str'>
>>> zahl = input("Geben Sie einen Wert ein: ")
Geben Sie einen Wert ein: 10
>>> type(zahl)
<type 'int'>
>>> a = input()
[1,2,3]
>>> type(a)
<type 'list'>
>>>
Prof. B. Jung
Grundlagen der Informatik, SS 2006
Arbeiten mit Dateien
Ziel: Verfügbarkeit von Daten auch nach Beendigung eines
Programms
Æ Speichern der Daten in Dateien
Prinzipielles Vorgehen beim Arbeiten mit Dateien
1.
2.
3.
Öffnen der Datei
(wiederholtes) Lesen bzw. Schreiben von Daten
Schließen der Datei
Prof. B. Jung
Grundlagen der Informatik, SS 2006
10
Öffnen und Schließen von Dateien
f = open(filename, mode)
Erzeugt ein Objekt f vom Typ file
Mode
r – Datei zum Lesen öffnen. Die Datei muss existieren.
w – Datei zum Schreiben öffnen. Existiert eine gleichnamige Datei, wird sie
gelöscht.
a – Schreiben am Ende einer Datei. Die Datei muss existieren.
r+ - Lesen und Schreiben. Die Datei muss existieren.
w+ - Lesen und Schreiben. Existiert eine gleichnamige Datei, wird sie
gelöscht.
a+ - Lesen und Schreiben am Ende einer Datei. Die Datei muss existieren.
f.close()
Anwendung der Methode close() auf das file-Objekt f
Prof. B. Jung
Grundlagen der Informatik, SS 2006
In Dateien Schreiben
Schreiben von Strings
f.write(String)
f.writeLines([String1, String2, … ])
Schreiben verschiedener Datentypen mittels print
Ausgabe erscheint in Datei wie bei print im Interpreter
print >> f, data
z.B.
Prof. B. Jung
print >> f, 10
print >> f, "Hallo Welt"
print >> f, "%x" % 15 # Ausgabe als Hexadezimalzahl
Grundlagen der Informatik, SS 2006
11
In Dateien Schreiben – Beispiel (write)
def saveList(filename,list):
f = open(filename, 'w') #
for i in list:
f.write( str(i) )
#
f.write( "\n")
#
f.close()
#
Übergabe des Dateinamen
als Raw-String
open file for writing
write each list element as string
start a new line
close the file
Verzeichnis c:\temp muss existieren
>>> saveList(r'c:\temp\list1.txt', [1,'zwei', 3.0])
>>>
Prof. B. Jung
Grundlagen der Informatik, SS 2006
In Dateien Schreiben – Beispiel (print)
def saveList2(filename,list):
f = open(filename, 'w') # open file for writing
for i in list:
print >> f, i
# print each list element to the file
f.close()
# close the file
Übergabe des Dateinamen
als normaler String
Verzeichnis c:\temp muss existieren
>>> saveList2('c:\\temp\\list2.txt', [1,'zwei', 3.0, (1,2) ])
>>>
Prof. B. Jung
Grundlagen der Informatik, SS 2006
12
Aus Dateien Lesen
Methoden
f.read() – gibt die ganze Datei zurück (als String)
f.read(n) – liest n Zeichen
f.readline() – liest eine Zeile (d.h. bis '\n')
f.readlines() – gibt eine Liste zurück; jedes Element ist eine
Zeile der gelesenen Datei f
Prof. B. Jung
Grundlagen der Informatik, SS 2006
Aus Dateien Lesen - Beispiel
def readList(filename):
f = open(filename, 'r') # open file for reading
lines = f.readlines()
# read all lines
f.close()
return lines
Datei c:\temp\list2.txt muss existieren
>>> readList2(r'c:\temp\list2.txt')
['1\n', 'zwei\n', '3.0\n', '(1, 2)\n']
>>>
Rückgabe: Liste von Strings
Prof. B. Jung
Grundlagen der Informatik, SS 2006
13
Ein- und Ausgabe mit dem Modul pickle
Problem bisher beim Einlesen
read-Funktionen liefern nur Strings
Einlesen anderer Datentypen erfordert explizite Konvertierung
>>> i = int('1')
>>> j = int('2\n')
>>> print i, j
1 2
z.B. mittels int(), float()-Funktionen
für komplexe Datentypen (Listen, Mengen, Objekte) noch komplexer
fehleranfällig!
Modul pickle (etwa: Einpökeln):
ermöglicht Speichern und anschließendes Auslesen beliebiger Objekte
ohne explizite Konvertierung
Funktionen
dump(data, file)
# schreibe Daten data in Datei file
load(file) # lädt Daten aus Datei; Rückgabe als ein Objekt
Mögl. Nachteil: gespeicherte Dateiinhalte nicht mehr unbedingt verständlich
Prof. B. Jung
Grundlagen der Informatik, SS 2006
Modul pickle - Beispiel
def saveWithPickle(filename, obj):
f = open(filename, 'w') # open file for writing
from pickle import dump
dump(obj, f)
f.close()
def readWithPickle(filename):
f = open(filename, 'r') # open file for reading
from pickle import load
obj = load(f)
f.close()
return obj
>>> saveWithPickle(r'c:\temp\list3.txt', ['eins', 2, 3.0, {"otto":1}] )
>>> readWithPickle(r'c:\temp\list3.txt')
['eins', 2, 3.0, {'otto': 1}]
>>>
Prof. B. Jung
Grundlagen der Informatik, SS 2006
14