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
更多学习笔记欢迎访问:DuShuSir.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能