电话簿数据库帮助 - Python

时间:2012-09-08 16:36:54

标签: python database python-2.7

我是编程新手并且有一份工作,我已经工作了一段时间。我理解定义功能和许多基础知识,但此时我有点碰壁。

我试图弄明白这一点,并且真的不明白这个班级'功能还没有。我很欣赏这个人的任何帮助;还有一些python资源的帮助,可以模拟如何/为什么使用类。


你现在已经在工作的数据库项目上工作了一段时间。你的老板鼓励你用Python编写数据库。你不同意,认为Python不是一种数据库语言,但你的老板坚持通过提供下面的源代码来获取样本电话数据库。

他要求你做两件事:

  1. 评估现有的源代码并对其进行扩展,使其对公司的经理有用。 (您不需要GUI界面,只需处理数据库方面:数据输入和检索 - 当然您必须让程序运行或正常工作

  2. 他希望您批判性地将Python评估为数据库工具。


  3. 将下面的示例代码导入Python IDLE并对其进行增强,运行并调试。添加功能,通过提供简单的数据输入和检索,使其成为更真实的数据库工具。

    import shelve
    import string
    
    UNKNOWN = 0
    HOME = 1
    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() )
    

    我不确定我是否走在正确的轨道上,但到目前为止我还有:

    def openPB():
        foo = phonedb()
        print 'Please select an option:'
        print '1 - Lookup'
        print '2 - Add'
        print '3 - Delete'
        print '4 - Quit'
        entry=int(raw_input('>> '))
        if entry==1:
                namelookup=raw_input('Please enter a name: ')
                for entry in foo.lookup(namelookup):
                        print '%-40s %s (%s)' % (entry.name, entry.number, entry.showtype() )
        elif entry==2:
                name=raw_input('Name: ')
                number=raw_input('Number: ')
                showtype=input('Type (UNKNOWN, HOME, WORK, FAX, CELL): \n>> ')
                for entry in foo.add(name, number, showtype):           #Trying to figure out this part
                        print '%-40s %s (%s)'% (entry.name, entry.number, entry.showtype() )
        elif entry==3:
                delname=raw_input('Please enter a name to delete: ')
                #                                                       #Trying to figure out this part
                print "Contact '%s' has been deleted" (delname)
        elif entry==4:
                print "Phone book is now closed"
                quit
        else:
                print "Your entry was not recognized."
                openPB()
    
    openPB()
    

1 个答案:

答案 0 :(得分:0)

Learn Python the Hard WayDive into Python和内置Python Tutorial对于开始学习Python的人来说都是非常好的资源。我开始学习时也使用了Beginning Python