Programmieren im Großen

Werbung
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
Herunterladen