Greetings all!! This is my first post and I am going to probably be vague at first, but, I will try my best to be specific. I am a very GREEN scripter/programmer, so please be as descriptive as possible. Ok, enough excuses, on with my question!
Here is my issue: I am trying to build a menu for the following script to make it more "user friendly". Nothing fancy, just a simple add data and look up the entered results. The problem is that when I run my modified version with this snippet (please see attachment for original and my modified versions): [code] class MenuInput: # ask user to input data and store to be passed to manageable variables. def addName(self): print "To add a name, please input he following information: " self.enter = phoneentry() self.name = raw_input("Name: ") self.number = raw_input("Number: ") self.get = int(raw_input("What type of number is this? (choose one): \n 1. Home:\n 2. Work:\n 3. Cell:\n : ")) def numberType(self, get = 1): if self.get == 1: self.returnType = HOME #return self.getType elif self.gete == 2: self.returnType = WORK #return self.getType elif self.get == 3: self.returnType = FAX #return self.getType return self.returnType self.type = numberType(self.get) self.enter(self.name, self.number, self.returnType) def display(self): print "Enter a name to look up: (leave blank to exit)" self.Name = str(raw_input("Name: ")) print "%s has the following information: " % self.Name if self.Name != "": foo = phonedb() for entry in foo.lookup(self.Name): print '%-40s %s (%s)' % (entry.name, entry.number, entry.showtype()) print [/code] when I instantiate and run it with: [code] menu = MenuInput() menu.addName() [/code] and enter the information asked, I am given this runtime error: [error] To add a name, please input he following information: Name: Bryan Number: 1234567 What type of number is this? (choose one): 1. Home: 2. Work: 3. Cell: : 1 Traceback (most recent call last): File "examples\testpy\my_object_modified.py", line 101, in <module> menu.addName() File "examples\testpy\my_object_modified.py", line 85, in addName self.type = numberType(self.get) File "examples\testpy\my_object_modified.py", line 74, in numberType if self.get == 1: AttributeError: 'int' object has no attribute 'get' >>> [/error] I "think" that this has something to do with passing the results or possibly my functions are not properly calling (proper terminology?) each other. Now what/where am I wrong? As this is part of an object oriented programming class, I wanted the menu constructed inherent to the class. Thank you in advance. --Bryan ____________________________________________________________________________________ Get easy, one-click access to your favorites. Make Yahoo! your homepage. http://www.yahoo.com/r/hs
import shelve import string UNKNOWN = 0 HOME = 1 WORK = 2 FAX = 3 CELL = 4 class phoneentry: def __init__(self, name = 'Unknown', number = 'Unknown', types = UNKNOWN): self.name = name self.number = number self.type = types # create string representation def __repr__(self): return('%s:%d' % ( self.name, self.type )) # fuzzy compare or two items def __cmp__(self, that): this = string.lower(str(self)) that = string.lower(that) if string.find(this, that) >= 0: return(0) return(cmp(this, that)) def showtype(self): if self.type == UNKNOWN: return('Unknown') if self.type == HOME: return('Home') if self.type == WORK: return('Work') if self.type == FAX: return('Fax') if self.type == CELL: return('Cellular') class phonedb: def __init__(self, dbname = 'phonedata'): self.dbname = dbname; self.shelve = shelve.open(self.dbname); def __del__(self): self.shelve.close() self.shelve = None def add(self, name, number, types = HOME): e = phoneentry(name, number, types) self.shelve[str(e)] = e def lookup(self, string): list = [] for key in self.shelve.keys(): e = self.shelve[key] if cmp(e, string) == 0: list.append(e) return(list) class MenuInput: # ask user to input data and store to be passed to manageable variables. def addName(self): print "To add a name, please input he following information: " self.enter = phoneentry() self.name = raw_input("Name: ") self.number = raw_input("Number: ") self.get = int(raw_input("What type of number is this? (choose one): \n 1. Home:\n 2. Work:\n 3. Cell:\n : ")) def numberType(self, get = 1): if self.get == 1: self.returnType = HOME #return self.getType elif self.gete == 2: self.returnType = WOR #return self.getType elif self.get == 3: self.returnType = FAX #return self.getType return self.returnType self.type = numberType(self.get) self.enter(self.name, self.number, self.returnType) def display(self): print "Enter a name to look up: (leave blank to exit)" self.Name = str(raw_input("Name: ")) print "%s has the following information: " % self.Name if self.Name != "": foo = phonedb() for entry in foo.lookup(self.Name): print '%-40s %s (%s)' % (entry.name, entry.number, entry.showtype()) print menu = MenuInput() menu.addName()
#!/usr/bin/python # import shelve import string UNKNOWN = 0 WORK = 2 FAX = 3 CELL = 4 class phoneentry: def __init__(self, name = 'Unknown', number = 'Unknown', type = UNKNOWN): self.name = name self.number = number self.type = type # create string representation def __repr__(self): return('%s:%d' % ( self.name, self.type )) # fuzzy compare or two items def __cmp__(self, that): this = string.lower(str(self)) that = string.lower(that) if string.find(this, that) >= 0: return(0) return(cmp(this, that)) def showtype(self): if self.type == UNKNOWN: return('Unknown') if self.type == HOME: return('Home') if self.type == WORK: return('Work') if self.type == FAX: return('Fax') if self.type == CELL: return('Cellular') class phonedb: def __init__(self, dbname = 'phonedata'): self.dbname = dbname; self.shelve = shelve.open(self.dbname); def __del__(self): self.shelve.close() self.shelve = None def add(self, name, number, type = HOME): e = phoneentry(name, number, type) self.shelve[str(e)] = e def lookup(self, string): list = [] for key in self.shelve.keys(): e = self.shelve[key] if cmp(e, string) == 0: list.append(e) return(list) # if not being loaded as a module, run a small test if __name__ == '__main__': foo = phonedb() foo.add('Sean Reifschneider', '970-555-1111', HOME) foo.add('Sean Reifschneider', '970-555-2222', CELL) foo.add('Evelyn Mitchell', '970-555-1111', HOME) print 'First lookup:' for entry in foo.lookup('reifsch'): print '%-40s %s (%s)' % ( entry.name, entry.number, entry.showtype() ) print print 'Second lookup:' for entry in foo.lookup('e'): print '%-40s %s (%s)' % ( entry.name, entry.number, entry.showtype() )
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor