Programmieren im Großen

Werbung
Grundlagen der Informatik
Wintersemester 2005/06
Prof. Bernhard Jung
Passworte für Web-Formulare in den Übungen!
Prof. B. Jung
Grundlagen der Informatik, WS 2005/06
1
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
Prof. B. Jung
Grundlagen der Informatik, WS 2005/06
import
über import-Anweisung kann man Module (Python-Skripte) in
andere Skripte importieren
Definitionen von Funktionen (und Klassen) anderer Module werden so
im aktuellen Modul verfügbar
import-Anweisungen o.ä. kommen in allen gängigen
Programmiersprachen vor
Formen (Python)
import modul1, modul2, …
Zugriff mit auf Definitionen mittels modul1.definition
from modul import name1, name2, …
importiert nur die benannten Definitionen des Moduls
Zugriff auf Definitionen ohne Erwähnung des Modulnamens
from modul import *
importiert alle Definitionen des Moduls
Zugriff auf Definitionen ohne Erwähnung des Modulnamens
Prof. B. Jung
Grundlagen der Informatik, WS 2005/06
2
import
Beispiel: Gewünscht ist Verwendung der Funktionen des PythonSkripts (Moduls) "primzahlen.py" in anderem Python-Skript
"""Funktionen fuer Primzahlen"""
primzahlen.py
primzahlen.py
def prim(n):
"Testet, ob n Primzahl ist"
for teiler in range(2,n):
if n % teiler == 0:
return False
return True
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, WS 2005/06
Prof. B. Jung
import
! " #$%
Zugriff des Moduls
primzahlen
Zugriff mit
Modulname
Zugriff ohne
Modulname
Fehler
Prof. B. Jung
>>> 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
>>>
Grundlagen der Informatik, WS 2005/06
3
import
! " #&%
Zugriff 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
import
Grundlagen der Informatik, WS 2005/06
! " #'%
Zugriff aller Funktionen
aus Modul primzahlen
Zugriffe auf beide
Funktionen des Moduls
ok
Prof. B. Jung
>>> from primzahlen import *
>>> prim(9)
False
>>> primListe(13)
[2, 3, 5, 7, 11, 13]
>>>
Grundlagen der Informatik, WS 2005/06
4
import
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, WS 2005/06
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, WS 2005/06
5
*
+
)
,
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, WS 2005/06
*
+
)
,
>>> 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, WS 2005/06
6
*
+
)
,
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, WS 2005/06
*
+
)
,
>>> 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, WS 2005/06
7
#
0
-
!
%
) .
/ ,
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
1
(.
2
3
!3 -
Prof. B. Jung
Grundlagen der Informatik, WS 2005/06
2+
#(
4
)
5 "%
Grundlagen der Informatik, WS 2005/06
8
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, WS 2005/06
)
Eingabe in der Python-Shell
raw_input()
Achtung: Interaktive Eingabe
funktioniert nicht in
JES-Interpreter
Rückgabewert ist immer vom Typ String
input()
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, WS 2005/06
9
(
)
! "
>>> 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, WS 2005/06
4
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, WS 2005/06
10
6.
.
+
4
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, WS 2005/06
(4
+
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.
print >> f, 10
print >> f, "Hallo Welt"
print >> f, "%x" % 15 # Ausgabe als Hexadezimalzahl
Prof. B. Jung
Grundlagen der Informatik, WS 2005/06
11
(4
+
! " #
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
(4
Grundlagen der Informatik, WS 2005/06
+
! " #"
%
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, WS 2005/06
12
4
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, WS 2005/06
4
! "
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, WS 2005/06
13
,
")
Problem bisher beim Einlesen
read-Funktionen liefern nur Strings
Einlesen anderer Datentypen erfordert explizite Konvertierung
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, WS 2005/06
")
! "
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, WS 2005/06
14
Herunterladen