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)的笔记是一个非常麻烦的事情,一方面这个东西本来就不好理解,要深入学习需要花费大量的时间和精力,另一方面我本身也是个初学者,整理起来难免思 ...
随机推荐
- Spark1.0源码编译
编译方式一:mavenexport MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M -XX:ReservedCodeCacheSize=512m"m ...
- redis学习(3)redis.conf配置文件详解
# Redis 配置文件 # 当配置中需要配置内存大小时,可以使用 1k, 5GB, 4M 等类似的格式,其转换方式如下(不区分大小写) # # 1k => 1000 bytes # 1kb ...
- java 中的原始类型与原始封装类型
Java 提供两种不同的类型:引用类型和原始类型(或内置类型).比如:Int是java的原始数据类型,Integer是java为int提供的封装类.Java为每个原始类型提供了封装类,常见的原始与 ...
- 解决ScrollView下嵌套ListView、GridView显示不全的问题
/** * 自定义gridview,解决ListView中嵌套gridview显示不正常的问题(1行半) * @author wangyx * @version 1.0.0 2012-9-14 */ ...
- c# 利用 两个TREEVIEW控件完成TEENODE的鼠标拖动操作
功能说明: 我们有两个TREEVIEW控件——TREEVIEW1,TREEVIEW2.Treeview1内有三个NODE,Treeview2内有三个NODE.将Treeview1内的NODE拖动到Tr ...
- Validform使用
原文链接:http://validform.rjboy.cn/document.html Validform v5.3.2 文档 Validform使用入门 绑定附加属性 初始化参数说明 Validf ...
- ntfs安全权限和共享权限的区别
win xp 最大分区32G,最大文件大小4G. 共享权限是为网络用户设置的,NTFS权限是对文件夹设置的. 用户对文件夹有什么权限就是看NTFS权限的设置. 如果一个文件夹设置成共享,其具体的权限还 ...
- MyBatis学习系列三——结合Spring
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...
- Android IOS WebRTC 音视频开发总结(三三)-- Periscope介绍
本文主要介绍Periscope,文章来自博客园RTC.Blacker,支持原创,转载请说明出处. 可能国内很多人没听说过Periscope,这可是现在Twitter上很火的一个APP,先看看人家自己是 ...
- 手机连接wifi自动弹窗的原理及其实现方案
一.手机连上wifi后会自动弹窗的原理 生活中,有很多需要认证的路由器,手机连接wifi热点后会自动弹出一个网页,让用户输入账号和密码,比如星巴克,肯地基,麦当劳,甚至是火车站和机场的候车室.其实这是 ...