Hilfe benötigt: Dictonaries
Verfasst: Mittwoch 21. Juni 2006, 20:18
So habe ja gesagt melde mich wenn ich's gar nicht schaffe... was leider auch so ist... Ich habe mal versucht mit meine eigenes kommandozeilenbasiertes Adressbuch zu schreiben.... Das ganze sah erst so aus...(Hierbei funkte mir auch immer nach der Ausgabe von der Adresse, Alter und so ein 'None' rein):
Soweit so gut... Dann habe ich beschlosen dem ganezen mal ein Menü zu geben mit den Funktionen Anzeigen des Buches, Beenden und einer kleinen Suchfunktion... Das sieht wei folt aus:
So nun gibt´s folgende Probleme:
1. Immer wenn das Menü erscheint gibt´s unter Option 5 ein 'None'
2. Bei Option 1 wird immer '<__main__.Person instance at 0x00B845A8>' statt 'bsp' angezeigt
3. bei 2 kommt immer nur Name nicht im Adressbuch wenn ich nach Bsp suche... Ebenso bei 3
Alles in allem das einzigste was funktioniert ist Option 5 (die aber ausgezeichnet ) und 4, wenn auch mit einem unschoenen 'None'... Wäre nett wenn Ihr mir helfen könntet, weil mir macht´s schon Spaß... Aber ist auch frustrierend, wenn man nur "Hallo Welt!" schreiben kann und bei so etwas kapitulieren muss.... Also bitte helft mir!.....[/code]
Code: Alles auswählen
import cPickle as p
personendatei = 'personenliste.data' # Datei in die, die Liste nachher gespeichert werden soll.
class Person:
'''Stellt eine Person da.'''
def __init__(self, name, alter, position, adresse):
self.name = name
self.alter = alter
self.position = position
self.adresse = adresse
print 'Person %s initialisiert' % self.name
def auskunft(self):
'''Gibt genauere Daten über die Person aus'''
print 'Name: "%s" Alter: "%s" Position: "%s" Adresse: "%s"' %(self.name, self.alter, self.position, self.adresse)
xyz = Person('xyz', 1, '?', '?')
efe = Person('efe', 1, '?', '?')
gtg = Person('gtg', 1, '?', '?')
# 'Ab' steht für 'A'dress'b'uch
ab = { 'xyz' : 'xyz@web.de' '12313',
'efe' : 'efe@arcor.de',
'gtg' : 'gtg@gmx.de',
}
f = file(personendatei, 'w')
p.dump(ab, f) #speichern der Liste
f.close()
del ab # lösche das Adressbuch
# Wieder einlesen des Adressbuches aus der Datei
f = file(personendatei)
gespeicherteliste = p.load(f)
print gespeicherteliste
print xyz.auskunft()
print efe.auskunft()
print gtg.auskunft()
Code: Alles auswählen
import cPickle as p
personendatei = 'personenliste.data' # Datei in die, die Liste nachher gespeichert werden soll.
class Person:
'''Stellt eine Person da.'''
def __init__(self, name, alter, position, adresse):
self.name = name
self.alter = alter
self.position = position
self.adresse = adresse
print 'Person %s initialisiert' % self.name
def auskunft(self):
'''Gibt genauere Daten über die Person aus'''
print 'Name: "%s" Alter: "%s" Position: "%s" Adresse: "%s"' %(self.name, self.alter, self.position, self.adresse)
bsp = Person('bsp', 1, 'xyz', 'uvw')
# 'Ab' steht für 'A'dress'b'uch
ab = { bsp : 'bsp@bsp.bsp'
}
f = file(personendatei, 'w')
p.dump(ab, f) #speichern der Liste
f.close()
del ab # Loeschen des Adressbuches
# Wieder einlesen des Adressbuches aus der Datei
f = file(personendatei)
gl = p.load(f) # GL steht fuer GespeicherteListe
def menu():
print 'Willkommen bei Ihrem Adressbuch! Druecken Sie die ...'
print '1 um das(komplette!) Adressbuch einzusehen'
print '2 um einen Namen im Adressbuch zu suchen'
print '3 um genauere Info´s ueber die Leute in Ihrem Adressbuch zu erhalten'
print '4 um das Menue nocheinmal anzuzeiegen'
print '5 um das Programm zu beenden'
option = 0
print menu()
while True:
option = input('Geben Sie nun bitte eine der Zahlen ein! ')
if option == 1:
if len(gl) >= 0:
for name, email in gl.items():
print '%s hat folgende E-Mail-Adresse: %s' % (name, email)
else:
print 'Das Adressbuch hat leider noch keine Eintraege'
elif option == 2:
suchname = raw_input('Geben Sie bitte den Namen ein, den Sie im Adressbuch suchen moechten: ')
if gl.has_key(suchname):
print '%s hat die E-Mail-Adresse %s' % (suchname, gl.suchname)
else:
print 'Name nicht im Adressbuch! Ueberpruefen Sie ggf. die Schreibweise!'
elif option == 3:
if len(gl) >= 0:
info_name = raw_input('Geben Sie den Namen ein zu dem Sie genaueres wissen wollen: ')
if info_name in gl:
info.name.auskunft()
else:
print 'Name nicht im Adressbuch! Ueberpruefen Sie ggf. die Schreibweise!'
else:
print 'Ihr Adressbuch hat leider noch keine Eintraege!'
elif option == 4:
print menu()
elif option == 5:
print 'Auf Wiedersehn!'
break
else:
print 'Nichtgültige Eingabe! Bitte waehlen Sie erneut!'
1. Immer wenn das Menü erscheint gibt´s unter Option 5 ein 'None'
2. Bei Option 1 wird immer '<__main__.Person instance at 0x00B845A8>' statt 'bsp' angezeigt
3. bei 2 kommt immer nur Name nicht im Adressbuch wenn ich nach Bsp suche... Ebenso bei 3
Alles in allem das einzigste was funktioniert ist Option 5 (die aber ausgezeichnet ) und 4, wenn auch mit einem unschoenen 'None'... Wäre nett wenn Ihr mir helfen könntet, weil mir macht´s schon Spaß... Aber ist auch frustrierend, wenn man nur "Hallo Welt!" schreiben kann und bei so etwas kapitulieren muss.... Also bitte helft mir!.....[/code]