要求:

编写一个简单的通讯录

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. php 通过PATH_SEPARATOR判断当前服务器系统类型

    PATH_SEPARATOR是php中的一个预定义常量,我们可以直接echo这个常量,在linux系统中,该常量输出":",在windows系统中,该常量输出";&quo ...

  2. 03-position和anchorPoint

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  3. Android中MenuInflater实例

    我们知道,LayoutInflater是用来实例化整个布局文件,而MenuInflater是用来实例化Menu目录下的Menu布局文件的. 传统意义上的菜单定义需要Override Activity的 ...

  4. Flash视频播放器开发经验总结

    HTTP协议更优 目前几乎所有的视频点播网站全部采用HTTP协议传输数据.因为相对于诸如RTMP等协议来说,HTTP协议是无状态的,数据传输完毕就断开连接,这样服务器就可以腾出资源来服务更多的用户.而 ...

  5. 将Excel中数据导入数据库(二)

    在上篇文章中介绍到将Excel中数据导入到数据库中,但上篇文章例子只出现了nvachar类型,且数据量很小.今天碰到将Excel中数据导入数据库中的Excel有6419行,其中每行均有48个字段,有i ...

  6. No.007 Reverse Integer

    7. Reverse Integer Total Accepted: 153147 Total Submissions: 644103 Difficulty: Easy Reverse digits ...

  7. PAT1024. Palindromic Number

    //自己方法只能拿到15分后边老是又过不了的点,用了网上别人的方法,用库函数的翻转reverse(),参数分别是起始位置个结束位置,注意只能在原存储空间翻转,即比较对称时,再生请一个空间,将原来字符串 ...

  8. Artifacts Gallery - Seahorse Collector, The

    Artifacts Gallery - Seahorse Collector, The

  9. 常用的几种 SQLServer 分页查询方式实现

    SQLServer 的数据分页: 假设现在有这样的一张表:CREATE TABLE test( id int primary key not null identity, names varchar( ...

  10. 解决 FastReport 使用存储过程 找不到临时表问题

    在存储过程最开始加入:以下命令就可以了 SET FMTONLY OFF 有时候在执行SQL查询语句时,仅仅需要知道检索的元数据,而不是具体的数据行,可以设置SET FMTONLY ON. SET FM ...