要求:
编写一个简单的通讯录
1、通讯录包含至少包含姓名、电话号码、电子邮箱;2、通讯录的信息能够保存在本地磁盘;3、通讯录查找特定人员的信息;4、通讯录能够修改特定人员的信息;5、通讯录能够删除特定人员的信息;6、通讯录能完全显示所有人的信息
方法:Python 2.7.9 / Windows
# -*- coding: gbk -*- import os,sys import cPickle as p #判断通讯录是否存在,不存在则创建通讯录 if os.path.exists('contacts.dat')==False: f = file('contacts.dat','wb') temp = {'total':0} p.dump(temp,f) f.close() print "\n本地磁盘尚无通讯录,新通讯录创建成功!\n" else: pass #添加联系人 def add(): f = file('contacts.dat','rb') a = p.load(f) f.close() name = raw_input('请输入所要添加联系人的姓名:') if a.has_key(name): print "\n联系人已存在,添加失败!请改名~" else: tel = raw_input('请输入电话号码:') email = raw_input('请输入所要添加联系人的电子邮件(example@example.com):') list = [tel,email] information = {name:list} a['total'] += 1 a.update(information) f = file('contacts.dat','wb') p.dump(a,f) f.close() print '添加成功!' #显示所以联系人 def showall(): f = file('contacts.dat','rb') a = p.load(f) print "一共有{}个联系人.\n".format(a['total']) print "{:<8}\t{:<15}\t{:<30}".format('姓名','电话号码','电子邮箱') for key in a.keys(): if key != 'total': print "{:<8}\t{:<15}\t{:<30}".format(key,a[key][0],a[key][1]) f.close() #退出通讯录 def exit(): sys.exit() #查找 def search(name): f = file('contacts.dat','rb') a = p.load(f) if a.has_key(name): print "{}的号码是:{}".format(name,a[name][0]) print "{}的电子邮箱是:s{}".format(name,a[name][1]) else: print "联系人不存在!" f.close() #删除 def delete(name): f = file('contacts.dat','rb') a = p.load(f) f.close() if a.has_key(name): a.pop(name) a['total'] -= 1 f = file('contacts.dat','wb') p.dump(a,f) f.close() print "删除成功!" else: print "联系人不存在!无法删除!" #修改 def modify(name): f = file('contacts.dat','rb') a = p.load(f) f.close() if a.has_key(name): tel = raw_input("请输入修改后的号码:") a[name][0] = tel email = raw_input("请输入修改后的邮箱:") a[name][1] = email f = file('contacts.dat','wb') p.dump(a,f) f.close() print "修改成功!" else: print "联系人不存在!" #界面 def menu(): print print "****************************" print " 显示菜单提示信息:*" print " 显示所有联系人:0" print " 查找联系人:1" print " 添加联系人:2" print " 删除联系人:3" print " 更改联系人资料:4" print " 退出通讯录:5" print "****************************" #主程序 while True: menu() x=raw_input("\n请输入您的选择菜单号:") if x == '2': add() continue if x == '0': showall() continue if x == '5': print "谢谢使用!" exit() continue if x == '1': name = raw_input("请输入所要查找的联系人姓名:") search(name) continue if x == '3': name = raw_input("请输入所要删除的联系人姓名:") delete(name) continue if x == '4': name = raw_input("请输入所要修改的联系人姓名:") modify(name) continue if x == '*': menu() else: print "输入的选项不存在,请重新输入!" continue
结果:
>>>
****************************
显示菜单提示信息:*
显示所有联系人:0
查找联系人:1
添加联系人:2
删除联系人:3
更改联系人资料:4
退出通讯录:5
****************************
其余功能显示正常。
说明:Windows平台下,开头声明# -*- coding: gbk -*-显示中文正常
本来网上查询中文乱码问题,应该是使用# -*- coding: utf-8 -*-的开头声明,后发现这个声明不管用,后改用gbk起作用。
更深入的内容有待后续研究,欢迎大家讨论!
源自:DuShuSir.com