要求:

编写一个简单的通讯录

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 == '':
add()
continue
if x == '':
showall()
continue
if x == '':
print "谢谢使用!"
exit()
continue
if x == '':
name = raw_input("请输入所要查找的联系人姓名:")
search(name)
continue
if x == '':
name = raw_input("请输入所要删除的联系人姓名:")
delete(name)
continue
if x == '':
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

Python初学者笔记(4)-简单的通讯录的更多相关文章

  1. Python学习笔记2-flask-sqlalchemy 简单笔记

    flask-sqlalchemy 简单笔记 字数 阅读 评论 喜欢 flask-sqlalchemy SQLAlchemy已经成为了python世界里面orm的标准,flask是一个轻巧的web框架, ...

  2. Python初学者笔记(3):输出列表中的奇数/奇数项,字符串中的偶数项,字符串大小写转换

    [1]a=[8,13,11,6,26,19,24]1)请输出列表a中的奇数项2)请输出列表a中的奇数 解:1) a=[8,13,11,6,26,19,24] print a[::2] Result:& ...

  3. Python学习笔记_03:简单操作MongoDB数据库

    目录 1. 插入文档 2. 查询文档 3. 更新文档 4. 删除文档   1. 插入文档 # -*- coding: UTF-8 -*- import datetime from pymongo im ...

  4. python初学者笔记(2):阿拉伯数字转换成中文大写

    题:输入一个数字,转换成中文大写的写法 可运行的程序(Python 2.7.9): # -*- coding: utf-8 -*- #在python2的py文件里面写中文,必须要添加一行声明文件编码的 ...

  5. Python初学者笔记:打印出斐波那契数列的前10项

    问题:斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列.费波那西数列.费波拿契数.费氏数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.- ...

  6. python初学者-水仙花数简单算法

    输出"水仙花数".所谓水仙花是指一个3位数的十进制数,其各位数字的立方和等于该数本身.例如:153是水仙花数. 用for循环实现水仙花数的计算图如下所示: 1 for i in r ...

  7. 近期Python学习笔记

    近期Python 学习笔记--一篇文入门python 作者:Pleiades_Antares(www.cnblogs.com/irischen) 写在前面的话 想学Python已经许久,一年多以前(应 ...

  8. 致 Python 初学者们!

    ​ 前言 在 Python 进阶的过程中,相信很多同学应该大致上学习了很多 Python 的基础知识,也正在努力成长.在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫.我非常理解你们所面临的处 ...

  9. Python机器学习笔记:SVM(1)——SVM概述

    前言 整理SVM(support vector machine)的笔记是一个非常麻烦的事情,一方面这个东西本来就不好理解,要深入学习需要花费大量的时间和精力,另一方面我本身也是个初学者,整理起来难免思 ...

随机推荐

  1. Android——TabWidget

    1.activity_tabwidget.xml <?xml version="1.0" encoding="utf-8"?><TabHost ...

  2. 解决eclipse中出现Resource is out of sync with the file system问题

    解决eclipse中出现Resource is out of sync with the file system问题 . 分类: 嵌入式开发平台和环境相关 2011-12-27 16:18 4872人 ...

  3. 【转】appium_python_API文档

    1.contextscontexts(self): Returns the contexts within the current session. 返回当前会话中的上下文,使用后可以识别H5页面的控 ...

  4. 支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 摘要:Twitter出道之初只是个奋斗在RoR上的小站点,而如今已拥有1.5亿的活跃 ...

  5. asp.net(c#)中如何在前端用js写条件查询,且不用调用存储过程

    前端页面(源): <dx:ASPxButton ID="ASPxButton_Select" runat="server" Text="查询&q ...

  6. C#中messagebox用法

    [函数] <整型> MessageBox(<字符串 Text, <字符串> Title, <整型> nType,MessageBoxIcon);[函数说明] ...

  7. C# 特性 Attribute

    特性就是在类的类名称.属性.方法等上面加一个标记,使这些类.属性.方法等具有某些统一的特征,从而达到某些特殊的需要.举个小栗子:方法的异常捕捉,你是否还在某些可能出现异常的地方(例如数据库的操作.文件 ...

  8. javascript设计模式-桥接模式

    在系统中,某些类由于自身逻辑,具有两个或两个以上维度的变化,如何使得该类型可以沿多个方向变化,但又不引入额外的复杂度,这就是桥接模式要解决的问题. 定义:桥接模式(Bridge),将抽象部分与它的实现 ...

  9. 深入了解Qt(三)之元signal和slot

    深入了解Qt主要内容来源于Inside Qt系列,本文做了部分删改,以便于理解.在此向原作者表示感谢! 在Qt 信号和槽函数这篇文章中已经详细地介绍了信号和槽的使用及注意事项.在这里对其使用方面的知识 ...

  10. js 获取当前日期时间 格式为 yyyy-mm-dd hh:MM:ss

    ------------------------------------------------------------------------------------ js 获取当前日期时间 格式为 ...