Ich habe jetzt mein erstes "eigenes Programm" geschrieben. Wie der Name schon sagt ist es ein Telefonbuch, wo man Personen mit ihren Infos speichern, aufrufen, löschen etc. kann.
Das Programm funktioniert soweit, doch ich habe ein paar Fragen.
a) Ich wollte ermöglichen, dass nicht jede Person alle Einträge besitzt (z.B. jemand hat kein Handy), und habe dies mit all diesen if-Statements gelöst. Gibt es für solche Fälle eine elegantere Lösung?
Ihr dürft auch gern sagen, dass der ganze Programm-Ansatz falsch ist =P.
b) Wenn man bei Input() ein "x" eintippt, möchte ich, dass durch das h=False der while-loop beendet wird, das neue Dict gedumped und das File geschlossen wird. Allerdings scheint das Programm immer noch zu meinen, h = True. Weshalb?
Wenn ich gleich h = False als command eingebe, kommt ein IOError zurück: "p.dump(p_b, f) IOError: [Errno 9] Bad file descriptor" ? =/
c) Bei der Adresse möchte ich, dass man als input Strasse\nStadt eingeben kann und dies dann auf zwei Zeilen angezeigt wird... ich verstehe nicht ganz weshalb dies hier nicht geschieht. Meine erste Programmversion benutzte eine Liste statt einem Dictionary, und bei dieser hat es die Adresse korrekt angezeigt.
Der Code:
Code: Alles auswählen
# Filename: Phonebook.py
import cPickle as p
class Entry:
'''Entry in the Phonebook'''
def __init__(self, name, t_number = "", m_number = "", job="", address="", e_address=""):
self.name = name
self.t = t_number
self.m = m_number
self.job = job
self.address=address
self.e_add = e_address
print "(Initialized %s's entry)" % self.name
def tell(self):
'''Tell details of entry'''
print 'Name: %s \n' % self.name
if self.t != "":
print 'Tel. Number: %s' % self.t
if self.m != "":
print 'Mob. Number: %s \n' % self.m
if self.job != "":
print 'Occupation: %s \n' % self.job
if self.address != "":
print 'Address: %s \n' % self.address
if self.e_add != "":
print 'Email: %s \n' % self.e_add
class Interactive:
'''Manages all input from user'''
def Input(self):
new = raw_input ("For new entry, press n;\nTo delete entry, press d;\n\
To show details of entry, enter name;\n\
For entire Phonebook, press e;\nTo exit, press x:\n")
if new == "n":
name = raw_input("Name:")
t_n = raw_input("Tel. number:")
m_n = raw_input("Mob. number:")
job = raw_input("Occupation:")
address = raw_input("Address:")
e_address = raw_input("Email:")
temp = Entry(name, t_n, m_n, job, address, e_address)
p_b[name] = temp
if new == "d":
name = raw_input("Which entry would you like to delete?:")
del p_b[name]
if p_b.has_key(new):
p_b[new].tell()
if new == "e":
for i in p_b.keys():
p_b[i].tell()
print "*********************************************"
if new == "x":
h = False
phonebookfile = "phonebook.data"
i = Interactive()
try:
f = open(phonebookfile)
p_b = p.load(f)
except IOError:
Phonebook = {}
p_b = Phonebook
f = open(phonebookfile, "w")
h=True
while h:
a = raw_input("Press Enter to continue...or enter new command:\n")
if a == "":
i.Input()
else:
exec(a)
p.dump(p_b, f)
f.close()
lg Seeker