免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4940 | 回复: 7
打印 上一主题 下一主题

Python简明教程最后的地址薄程序代码(仅供新人参考,老鸟飘过) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-02 16:52 |只看该作者 |正序浏览
本帖最后由 qing8932087 于 2010-03-02 17:00 编辑

程序中难免存在BUG和冗余的代码,还请大牛看到后能给予点拨
  1. #!/usr/bin/python
  2. # coding: utf-8
  3. # filename: addbook_1.py

  4. import cPickle as p

  5. class Person:

  6.     u'''仅献给Pyhon初学者,老鸟飘过。相信学过Python的人一定都看过Python简明教程,
  7.     文章的最后作者给我们留下了一道练习,对,就是这个地址簿程序。当我们写完这个程序的时候
  8.     我们就可以说自己是一位Python程序员了,但就这样一道看似简单的问题可能会让我们这些
  9.     初学者有种蜀道难的感觉,相信大家都有过这样的感觉,毕竟是名新手,才接触都会有这样的感觉。
  10.     与其说程序是写出来的不如说是改出来的。现在我把这个地址簿程序发出来仅供新手朋友们
  11.     做个参考,但看过之后一定要用自己的思路另写一份哦!\n'''

  12.     def __init__ (self):
  13.         self.info = ''
  14.         self.name = ''
  15.         self.dict = {self.name: self.info}
  16.         try:
  17.             self.f = open ('test.data', 'w')
  18.         except:
  19.             print u'''已在本程序根目录生成数据文件'test.data'!'''

  20.     def __del__ (self):
  21.         self.f.close

  22.     def printall (self):
  23.         print u'姓名\t个人信息'
  24.         for self.name, self.info in self.dict.items():
  25.             print '%s\t%s' % (self.name, self.info)

  26.     def dele (self):
  27.         self.name = raw_input(u'请输入想删除的联系人姓名:')
  28.         if self.name in self.dict.keys():
  29.             del self.dict[self.name]
  30.             print u'删除成功!\n'
  31.             p.dump(self.dict, self.f)
  32.             
  33.         else:
  34.             print '数据库中没有该联系人的信息,请检查输入是否有误!\n'

  35.     def add (self):
  36.         self.name = raw_input(u'请输入想添加的联系人姓名:')
  37.         if self.name in self.dict.keys():
  38.             print u'数据库中已经有该联系人的信息,请确认输入无误!\n'

  39.         else:
  40.             self.info = raw_input(u'请输入联系人信息,如email,tel等以空格间隔:')
  41.             self.dict[self.name] = self.info
  42.             print u'添加成功!\n'
  43.             p.dump(self.dict, self.f)

  44.     def edit (self):
  45.         self.name = raw_input(u'请输入要修改的联系人姓名:')
  46.         if self.name in self.dict.keys():
  47.             print u'姓名输入正确!'
  48.             self.info = raw_input(u'请输入要修改的联系人信息:')
  49.             self.dict [self.name] = self.info
  50.             print u'修改成功!\n'
  51.             print u'现在该联系人的信息为: 姓名 %s 电话 %s \n' % (self.name, self.person)
  52.             p.dump(self.dict, self.f)
  53.         else:
  54.             print u'数据库中没有该联系人的信息,请检查输入是否有误!\n'

  55.     def search (self):
  56.         self.name = raw_input(u'请输入想要搜索的联系人姓名:')
  57.         if self.name in self.dict.keys():
  58.             print u'你查询的联系人姓名是: %s 个人信息是: %s\n' % (self.name, self.dict[self.name])

  59.         else:
  60.             print u'数据库中没有该联系人的信息,请检查输入是否有误!\n'

  61. if __name__ == '__main__':
  62.             
  63.     print Person.__doc__
  64.     person = Person ()

  65.     while True:
  66.         answer = raw_input(u'1.浏览联系人-2.删除联系人-3.添加联系人-4.修改联系人电话-5.搜索联系人-6.退出本程序:')
  67.         if answer == '1':
  68.             person.printall()
  69.         elif answer == '2':
  70.             person.dele()
  71.         elif answer == '3':
  72.             person.add()
  73.         elif answer == '4':
  74.             person.edit()
  75.         elif answer == '5':
  76.             person.search()
  77.         elif answer == '6':
  78.             break
  79.         else:
  80.             print u'请按提示输入操作数字!\n'
  81.    
  82. print u'谢谢使用,下次再见!'
复制代码

论坛徽章:
0
8 [报告]
发表于 2015-10-29 14:07 |只看该作者
你好,运行以上程序。添加联系人,退出程序后,再运行程序,结果先前添加的联系人信息被清空了,如何才能保留修改的地址薄休息,而不是每次都初始化。
def __init__ (self):
        self.info = ''
        self.name = ''
        self.dict = {self.name: self.info}
尝试部分只修改为:
def __init__(self,name,self):
        self.name=name
        self.info=self
        self.dict={self.name:self.info}
运行后就 报错
person=Person()
TypeError: __init__() takes exactly 3 arguments (1 given)
新手学习python,请大神们指导下。

论坛徽章:
0
7 [报告]
发表于 2010-04-04 16:36 |只看该作者
呵呵,这个是在python2.6下写的,用2.6应该是不会出错的

论坛徽章:
0
6 [报告]
发表于 2010-03-09 19:16 |只看该作者
哦,我明白了,添加的信息被重新初始化了

论坛徽章:
0
5 [报告]
发表于 2010-03-09 17:33 |只看该作者
本帖最后由 xiaomayi0323 于 2010-03-09 17:36 编辑

依据楼主修改的,编辑器使用Ulipad,可以正常运行。
这段代码还有个问题,添加联系人,退出程序后,再运行程序,结果先前添加的联系人信息被清空了,但我并没有执行删除操作。
  1. #!/usr/bin/python
  2. # coding: gb2312
  3. # filename: addbook_1.py

  4. import cPickle as p

  5. class Person:

  6.     '''仅献给Pyhon初学者,老鸟飘过。相信学过Python的人一定都看过Python简明教程,
  7.     文章的最后作者给我们留下了一道练习,对,就是这个地址簿程序。当我们写完这个程序的时候
  8.     我们就可以说自己是一位Python程序员了,但就这样一道看似简单的问题可能会让我们这些
  9.     初学者有种蜀道难的感觉,相信大家都有过这样的感觉,毕竟是名新手,才接触都会有这样的感觉。
  10.     与其说程序是写出来的不如说是改出来的。现在我把这个地址簿程序发出来仅供新手朋友们
  11.     做个参考,但看过之后一定要用自己的思路另写一份哦!'''

  12.     def __init__ (self):
  13.         self.info = ''
  14.         self.name = ''
  15.         self.dict = {self.name: self.info}
  16.         try:
  17.             self.f = open ('test.data', 'w')
  18.         except:
  19.             print '已在本程序根目录生成数据文件'

  20. #    def __del__ (self):
  21. #        self.f.close

  22.     def printall (self):
  23.         print '姓名\t个人信息'
  24.         for self.name, self.info in self.dict.items():
  25.             print '%s\t%s' % (self.name, self.info)

  26.     def dele (self):
  27.         self.name = raw_input('请输入想删除的联系人姓名:')
  28.         if self.name in self.dict.keys():
  29.             del self.dict[self.name]
  30.             print '删除成功!\n'
  31.             p.dump(self.dict, self.f)
  32.             
  33.         else:
  34.             print '数据库中没有该联系人的信息,请检查输入是否有误!\n'

  35.     def add (self):
  36.         self.name = raw_input('请输入想添加的联系人姓名:')
  37.         if self.name in self.dict.keys():
  38.             print '数据库中已经有该联系人的信息,请确认输入无误!\n'

  39.         else:
  40.             self.info = raw_input('请输入联系人信息,如email,tel等以空格间隔:')
  41.             self.dict[self.name] = self.info
  42.             print '添加成功!\n'
  43.             p.dump(self.dict, self.f)

  44.     def edit (self):
  45.         self.name = raw_input('请输入要修改的联系人姓名:')
  46.         if self.name in self.dict.keys():
  47.             print '姓名输入正确!'
  48.             self.info = raw_input('请输入要修改的联系人信息:')
  49.             self.dict [self.name] = self.info
  50.             print '修改成功!\n'
  51.             print '现在该联系人的信息为: 姓名 %s 电话 %s \n' % (self.name, self.info)
  52.             p.dump(self.dict, self.f)
  53.         else:
  54.             print '数据库中没有该联系人的信息,请检查输入是否有误!\n'

  55.     def search (self):
  56.         self.name = raw_input('请输入想要搜索的联系人姓名:')
  57.         if self.name in self.dict.keys():
  58.             print '你查询的联系人姓名是: %s 个人信息是: %s\n' % (self.name, self.dict[self.name])

  59.         else:
  60.             print '数据库中没有该联系人的信息,请检查输入是否有误!\n'

  61. if __name__ == '__main__':
  62.             
  63.     print Person.__doc__
  64.     person = Person ()

  65.     while True:
  66.         answer = raw_input('1.浏览联系人-2.删除联系人-3.添加联系人-4.修改联系人电话-5.搜索联系人-6.退出本程序:')
  67.         if answer == '1':
  68.             person.printall()
  69.         elif answer == '2':
  70.             person.dele()
  71.         elif answer == '3':
  72.             person.add()
  73.         elif answer == '4':
  74.             person.edit()
  75.         elif answer == '5':
  76.             person.search()
  77.         elif answer == '6':
  78.             break
  79.         else:
  80.             print '请按提示输入操作数字!\n'
  81.    
  82. print '谢谢使用,下次再见!'
复制代码

论坛徽章:
0
4 [报告]
发表于 2010-03-09 17:32 |只看该作者
还有一处错误
编辑联系人时,输入修改后的联系人信息,输入回车,系统报错

论坛徽章:
0
3 [报告]
发表于 2010-03-09 15:30 |只看该作者
运行脚本,报错
File "...\addbook.py", line 76, in <module>
    print Person.__doc__
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(12

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015年迎新春徽章
日期:2015-03-04 09:57:09
2 [报告]
发表于 2010-03-05 19:59 |只看该作者
不错,不错。
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP