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

Reply via email to