要求:
编写一个简单的通讯录
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