Python初学者笔记(4)-简单的通讯录
要求:
编写一个简单的通讯录
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 " 显示所有联系人: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)-简单的通讯录的更多相关文章
- Python学习笔记2-flask-sqlalchemy 简单笔记
flask-sqlalchemy 简单笔记 字数 阅读 评论 喜欢 flask-sqlalchemy SQLAlchemy已经成为了python世界里面orm的标准,flask是一个轻巧的web框架, ...
- 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:& ...
- Python学习笔记_03:简单操作MongoDB数据库
目录 1. 插入文档 2. 查询文档 3. 更新文档 4. 删除文档 1. 插入文档 # -*- coding: UTF-8 -*- import datetime from pymongo im ...
- python初学者笔记(2):阿拉伯数字转换成中文大写
题:输入一个数字,转换成中文大写的写法 可运行的程序(Python 2.7.9): # -*- coding: utf-8 -*- #在python2的py文件里面写中文,必须要添加一行声明文件编码的 ...
- Python初学者笔记:打印出斐波那契数列的前10项
问题:斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列.费波那西数列.费波拿契数.费氏数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.- ...
- python初学者-水仙花数简单算法
输出"水仙花数".所谓水仙花是指一个3位数的十进制数,其各位数字的立方和等于该数本身.例如:153是水仙花数. 用for循环实现水仙花数的计算图如下所示: 1 for i in r ...
- 近期Python学习笔记
近期Python 学习笔记--一篇文入门python 作者:Pleiades_Antares(www.cnblogs.com/irischen) 写在前面的话 想学Python已经许久,一年多以前(应 ...
- 致 Python 初学者们!
前言 在 Python 进阶的过程中,相信很多同学应该大致上学习了很多 Python 的基础知识,也正在努力成长.在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫.我非常理解你们所面临的处 ...
- Python机器学习笔记:SVM(1)——SVM概述
前言 整理SVM(support vector machine)的笔记是一个非常麻烦的事情,一方面这个东西本来就不好理解,要深入学习需要花费大量的时间和精力,另一方面我本身也是个初学者,整理起来难免思 ...
随机推荐
- php 获取图片主要颜色的方法
本文章向码农们介绍php 获取图片主要颜色的方法,主要涉及php针对图片的相关操作技巧,需要的码农可以参考一下. $i = imagecreatefromjpeg("image.jpg&qu ...
- js和jQuery前台校验文件大小
1.支持Google 不支持IE <script type="text/javascript" src="${pageContext.request.context ...
- bochs安装一系列问题
http://blog.chinaunix.net/uid-23817499-id-3418083.html http://www.mouseos.com/os/tools/bochs.html ...
- 双系统下恢复Ubuntu引导菜单
引言 使用双系统的时候,我们经常重装Windows!那么有没有一种办法:只重装Windows而不重装Ubuntu呢? 在使用Win XP/Ubuntu双系统时,这个问题很好解决!但是在使用Win7(包 ...
- How I came to find Linux
http://ianmurdock.com/post/how-i-came-to-find-linux/ lan murdock August 17, 2015 I saw my first Sun ...
- Flex 播放视频
Flex提供视频控件(VideoDisplay Control)播放图像和声音. 视频控件只支持播放,暂停和停止功能.不提供倒退和前进功能.只支持播放FLV格式的影片. 1. 视频控件标签 对应的MX ...
- Java基础——多线程
Java中多线程的应用是非常多的,我们在Java中又该如何去创建线程呢? http://www.jianshu.com/p/40d4c7aebd66 一.常用的有三种方法来创建多线程 新建一个类继承自 ...
- oracle学习系列之三 (约束)
主键约束:外键约束:唯一性约束:检查约束:默认值约束 -——————五大约束 一. 主键约束: --创建表的主键约束 create table student (student_id number ...
- java排序练习
public void testSort3(){ List<String> str=new ArrayList<String>(); String st="12345 ...
- android 3D旋转效果实现
一说到3D,可能第一反应就是使用OpenGL ES....但是,实现这么个小功能,要动用这玩意,莫名的恐惧啊!!!!至今也没弄明白这个怎么玩... 好吧,幸亏还有个Camera类可以帮助我们,据说底层 ...