Python初学者笔记(4)-简单的通讯录

要求:

编写一个简单的通讯录

1、通讯录包含至少包含姓名、电话号码、电子邮箱;2、通讯录的信息能够保存在本地磁盘;3、通讯录查找特定人员的信息;4、通讯录能够修改特定人员的信息;5、通讯录能够删除特定人员的信息;6、通讯录能完全显示所有人的信息

 

方法:Python 2.7.9 / Windows

  1 # -*- coding: gbk -*-
  2 
  3 import os,sys
  4 import cPickle as p
  5 
  6 #判断通讯录是否存在,不存在则创建通讯录
  7 if os.path.exists('contacts.dat')==False:
  8     f = file('contacts.dat','wb')
  9     temp = {'total':0}
 10     p.dump(temp,f)
 11     f.close()
 12     print "\n本地磁盘尚无通讯录,新通讯录创建成功!\n"
 13 else:
 14     pass
 15 
 16 #添加联系人
 17 def add():
 18     f = file('contacts.dat','rb')
 19     a = p.load(f)
 20     f.close()
 21     name = raw_input('请输入所要添加联系人的姓名:')
 22     if a.has_key(name):
 23         print "\n联系人已存在,添加失败!请改名~"
 24     else:
 25         tel = raw_input('请输入电话号码:')
 26         email = raw_input('请输入所要添加联系人的电子邮件(example@example.com):')
 27         list = [tel,email]
 28         information = {name:list}
 29         a['total'] += 1
 30         a.update(information)
 31         f = file('contacts.dat','wb')
 32         p.dump(a,f)
 33         f.close()
 34         print '添加成功!'
 35 
 36 #显示所以联系人
 37 def showall():
 38     f = file('contacts.dat','rb')
 39     a = p.load(f)
 40     print "一共有{}个联系人.\n".format(a['total'])
 41     print "{:<8}\t{:<15}\t{:<30}".format('姓名','电话号码','电子邮箱')
 42     for key in a.keys():
 43         if key != 'total':
 44             print "{:<8}\t{:<15}\t{:<30}".format(key,a[key][0],a[key][1])
 45     f.close()
 46 
 47 #退出通讯录
 48 def exit():
 49     sys.exit()
 50 
 51 #查找
 52 def search(name):
 53     f = file('contacts.dat','rb')
 54     a = p.load(f)
 55     if a.has_key(name):
 56         print "{}的号码是:{}".format(name,a[name][0])
 57         print "{}的电子邮箱是:s{}".format(name,a[name][1])
 58     else:
 59         print "联系人不存在!"
 60     f.close()
 61 
 62 #删除
 63 def delete(name):
 64     f = file('contacts.dat','rb')
 65     a = p.load(f)
 66     f.close()
 67     if a.has_key(name):
 68         a.pop(name)
 69         a['total'] -= 1
 70         f = file('contacts.dat','wb')
 71         p.dump(a,f)
 72         f.close()
 73         print "删除成功!"
 74     else:
 75         print "联系人不存在!无法删除!"
 76 
 77 #修改
 78 def modify(name):
 79     f = file('contacts.dat','rb')
 80     a = p.load(f)
 81     f.close()
 82     if a.has_key(name):
 83         tel = raw_input("请输入修改后的号码:")
 84         a[name][0] = tel
 85         email = raw_input("请输入修改后的邮箱:")
 86         a[name][1] = email
 87         f = file('contacts.dat','wb')
 88         p.dump(a,f)
 89         f.close()
 90         print "修改成功!"
 91     else:
 92         print "联系人不存在!"
 93 
 94 #界面
 95 def menu():
 96     print
 97     print "****************************"
 98     print "     显示菜单提示信息:*"
 99     print "     显示所有联系人:0"
100     print "     查找联系人:1"
101     print "     添加联系人:2"
102     print "     删除联系人:3"
103     print "     更改联系人资料:4"
104     print "     退出通讯录:5"
105     print "****************************"
106 
107 #主程序
108 while True:
109     menu()
110     x=raw_input("\n请输入您的选择菜单号:")
111     if x == '2':
112         add()
113         continue
114     if x == '0':
115         showall()
116         continue
117     if x == '5':
118         print "谢谢使用!"
119         exit()
120         continue
121     if x == '1':
122         name = raw_input("请输入所要查找的联系人姓名:")
123         search(name)
124         continue
125     if x == '3':
126         name = raw_input("请输入所要删除的联系人姓名:")
127         delete(name)
128         continue
129     if x == '4':
130         name = raw_input("请输入所要修改的联系人姓名:")
131         modify(name)
132         continue
133     if x == '*':
134         menu()
135     else:
136         print "输入的选项不存在,请重新输入!"
137         continue

 

结果:

>>>

****************************
显示菜单提示信息:*
显示所有联系人:0
查找联系人:1
添加联系人:2
删除联系人:3
更改联系人资料:4
退出通讯录:5
****************************

其余功能显示正常。

 

说明:Windows平台下,开头声明# -*- coding: gbk -*-显示中文正常

本来网上查询中文乱码问题,应该是使用# -*- coding: utf-8 -*-的开头声明,后发现这个声明不管用,后改用gbk起作用。

更深入的内容有待后续研究,欢迎大家讨论!

 

源自:DuShuSir.com

posted @ 2017-01-04 16:14  独书先生  阅读(4275)  评论(0编辑  收藏  举报