用python写最简单通讯录,Python初学者笔记(5)-简单的通讯录

要求:

编写一个简单的通讯录

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起作用。

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值