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 - [email protected]
http://mail.python.org/mailman/listinfo/tutor