题目:

一个文本通讯录要求:

  1. 内容含有:姓名,电话(手机,座机),qq,email
  2. 存储功能实现:通过命令行输入后保存到文件
  3. 读取功能和兼容性:自己程序能读出其他同学创建的通讯录

答案:

#!/usr/bin/env python
#!encoding:utf-8
#filename:contacts_list.py
#QUESTION FROM:http://uliweb.clkg.org/tutorial/view_chapter/183import pickle, pprint
import os, sysdef create_contact(file_path): #初始化通讯录文本exist = os.path.isfile(file_path)if exist:os.remove(file_path)#如果已经存在则删除通讯录,下一步重新建立print "remove old conntact list successfully ! "init_contact = {'lijyt':{'cellphone':'13990000343','tel':'0512-86565544','qq':'45453242','e-mail':'erew@126.com'},'zhanw':{'cellphone':'15992222343','tel':'0523-89565544','qq':'89545445','e-mail':'ujjy@126.com'},'dongf':{'cellphone':'18905555343','tel':'0545-84565544','qq':'12453242','e-mail':'zxzc@126.com'}}f = open(file_path,'w')pickle.dump(init_contact,f)     f.close()print "create new contact list successfully !" def load_contact(file_path):#通讯录加载函数exist = os.path.isfile(file_path)#检查文件是否存在,不存在则退出if not exist:print "The file %s is not exist! check again " % file_pathexitf = open(file_path,'r')contact = pickle.load(f)pprint.pprint(contact)f.close()def add_contact(file_path):#增加用户函数(是否可以先写增加的dict,再通过update更新到contact?)exist = os.path.isfile(file_path)#检查文件是否存在,不存在则退出if not exist:print "The file %s is not exist! check again " % file_pathexitf = open(file_path,'a+')contact = pickle.load(f)#加载通讯录#打开通讯录文本后进行新的用户添加输入name = raw_input('>> name:' )contact[name] = {}cellphone = raw_input('>> cellphone:' )contact[name]['cellphone'] = cellphoneqq = raw_input('>> qq:' )contact[name]['qq'] = qqtel = raw_input('>> tel:' )contact[name]['tel'] = tele_mail = raw_input('>> e-mail:' )contact[name]['e-mail'] = e_mailf.close()#写入文本中f = open(file_path,'w+')pickle.dump(contact,f)#重写通讯录f.close()def menu_choice():#选择查询还是增加用户信息等print " *******Welcome to use this python contact_list******* "usage =  '''FUNCTION YOU CAN USE:(1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search"(2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding"(3)READING SOMEONE'S CONTACT LIST? INPUT: "reading"(4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset"'''print usage,'\n'try:choice = raw_input('input your choice refered before >>')if choice  == 'reading':#一对if else选择进行读取自己的还是别人的conactinput_dir = raw_input('input someone contact list file path (eg: E:\python\list1.txt)\n >>>')path_others = r'%s' % input_dirload_contact(path_others)else:in_put = raw_input('input your contact list file path (eg: E:\python\list1.txt)\n >>>')path = r'%s' % in_put#path = r'E:\study\python\tmp\contact_list1.txt'if choice == 'search':load_contact(path)elif choice == 'adding':add_contact(path)elif choice == 'reset':create_contact(path)else:print '''retry to run the program!%s''' % usageexcept:print "something wrong!"while True:menu_choice()

实现情况:

根据题目的要求,基本功能应该都实现了,剩下的只是兼容性及容错性的问题,个人觉得可以进行改进的方面如下:

1)对dict的更新,可否用update去实现,并同步到文本?反复加载或者重写对大数据处理可能就变慢了

2)对于读取他人的通讯录,需要进行严格的限制,否则不符合pickle的格式,导致无法读取,有无其他更好的兼容方法?

3)有几个地方可以循环的更流畅,每次选择时,可否只输入一次目录地址,如果没有选择reading,都按默认选项来?这样可以方便反复增加用户,这个应该容易,循环嵌套问题。

4)查询时,可否按名字查询,或者其它选择方式?可以更加明确目标。

5)对某个用户进行删除,该如何做呢?

其它就是过程简化方面的了,暂时想到上面的想法。

下面运行起来看下结果如何:

输出:

>>> ================================ RESTART ================================
>>> *******Welcome to use this python contact_list******* FUNCTION YOU CAN USE:(1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search"(2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding"(3)READING SOMEONE'S CONTACT LIST? INPUT: "reading"(4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset"input your choice refered before >>search
input your contact list file path (eg: E:\python\list1.txt)>>>D:\test_tmp
The file D:\test_tmp is not exist! check again
something wrong!*******Welcome to use this python contact_list******* FUNCTION YOU CAN USE:(1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search"(2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding"(3)READING SOMEONE'S CONTACT LIST? INPUT: "reading"(4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset"input your choice refered before >>reset
input your contact list file path (eg: E:\python\list1.txt)>>>D:\test_tmp\contact_list.txt
create new contact list successfully !*******Welcome to use this python contact_list******* FUNCTION YOU CAN USE:(1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search"(2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding"(3)READING SOMEONE'S CONTACT LIST? INPUT: "reading"(4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset"input your choice refered before >>search
input your contact list file path (eg: E:\python\list1.txt)>>>D:\test_tmp\contact_list.txt
{'dongf': {'cellphone': '18905555343','e-mail': 'zxzc@126.com','qq': '12453242','tel': '0545-84565544'},'lijyt': {'cellphone': '13990000343','e-mail': 'erew@126.com','qq': '45453242','tel': '0512-86565544'},'zhanw': {'cellphone': '15992222343','e-mail': 'ujjy@126.com','qq': '89545445','tel': '0523-89565544'}}*******Welcome to use this python contact_list******* FUNCTION YOU CAN USE:(1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search"(2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding"(3)READING SOMEONE'S CONTACT LIST? INPUT: "reading"(4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset"input your choice refered before >>adding
input your contact list file path (eg: E:\python\list1.txt)>>>D:\test_tmp\contact_list.txt
>> name:boys
>> cellphone:13487677868
>> qq:3454554655
>> tel:0513-65546567
>> e-mail:56ert@163.com*******Welcome to use this python contact_list******* FUNCTION YOU CAN USE:(1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search"(2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding"(3)READING SOMEONE'S CONTACT LIST? INPUT: "reading"(4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset"input your choice refered before >>search
input your contact list file path (eg: E:\python\list1.txt)>>>D:\test_tmp\contact_list.txt
{'boys': {'cellphone': '13487677868','e-mail': '56ert@163.com','qq': '3454554655','tel': '0513-65546567'},'dongf': {'cellphone': '18905555343','e-mail': 'zxzc@126.com','qq': '12453242','tel': '0545-84565544'},'lijyt': {'cellphone': '13990000343','e-mail': 'erew@126.com','qq': '45453242','tel': '0512-86565544'},'zhanw': {'cellphone': '15992222343','e-mail': 'ujjy@126.com','qq': '89545445','tel': '0523-89565544'}}*******Welcome to use this python contact_list******* FUNCTION YOU CAN USE:(1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search"(2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding"(3)READING SOMEONE'S CONTACT LIST? INPUT: "reading"(4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset"input your choice refered before >>reading
input someone contact list file path (eg: E:\python\list1.txt)>>>D:\test_tmp\contact_list.txt
{'boys': {'cellphone': '13487677868','e-mail': '56ert@163.com','qq': '3454554655','tel': '0513-65546567'},'dongf': {'cellphone': '18905555343','e-mail': 'zxzc@126.com','qq': '12453242','tel': '0545-84565544'},'lijyt': {'cellphone': '13990000343','e-mail': 'erew@126.com','qq': '45453242','tel': '0512-86565544'},'zhanw': {'cellphone': '15992222343','e-mail': 'ujjy@126.com','qq': '89545445','tel': '0523-89565544'}}*******Welcome to use this python contact_list******* FUNCTION YOU CAN USE:(1)SEARCH SOMEONE INFOR ON THE CONTACT,INPUT: "search"(2)ADDING SOMEONE INFOR ON THE CONTACT,INPUT: "adding"(3)READING SOMEONE'S CONTACT LIST? INPUT: "reading"(4)(!ATTENTION)RESET CONTACT_LIST OR INITIALIZE: "reset"input your choice refered before >>

上面执行的步骤是:

1、文件不存在

2、创建contact list

3、查询

4、增加用户

5、查询是否增加

6、读取其它通讯录(实际中用的是原来的)

整个流程基本是走完了,看样子还行。

总结:

这个程序中用到的知识:

1、文件的操作(打开,移除,创建)

2、pickle模块的使用,加载与生成

3、字典的初始化,增删

4、输入与字典赋值

5、循环的使用if else,while,异常处理等

一个作业题---用python创建一个通讯录相关推荐

  1. python 创建一个空向量,python 创建一个空向量_python 创建一维的0向量实例

    python 创建一维的0向量实例 第一种方法: A=[0]*8 第二种方法: import numpy as np A=np.zeros(8) 以上这篇python 创建一维的0向量实例就是小编分享 ...

  2. 【LINUX】——linux如何使用Python创建一个web服务

    问:linux如何使用Python创建一个web服务? 答:一句话,Python! 一句代码: /usr/local/bin/python -m SimpleHTTPServer 8686 > ...

  3. python词云改颜色_使用Python创建一个与图像颜色匹配的词云

    原标题:使用Python创建一个与图像颜色匹配的词云 来自:https://www.linuxmi.com/ 我用Python造了一个词云.不过这次创建的是与图像颜色匹配的词云. 使用Python w ...

  4. python创建一个空的dataframe_python 创建一个空dataframe 然后添加行数据的实例

    实例如下所示: import pandas as pd import re import math dframe1 = pd.read_excel("window regulator分析报告 ...

  5. Python 创建一个二维列表

    Python 创建一个二维列表 空二维列表 lis=[[] for i in range(5)]for i in range(5):lis.append([]) 普通二维列表 lis=[[i for ...

  6. 用python创建一个新文件_Python创建文件和追加文件内容实例

    一.用Python创建一个新文件,内容是从0到9的整数, 每个数字占一行: 代码如下: #python >>>f=open('f.txt','w') # r只读,w可写,a追加 &g ...

  7. python创建一个文件并写入_python创建文件并写入

    python怎么以追加的方式写文件? Python 3.5 想将从1到10写入一个文件并且自动换行 现在需要一个写文件方法,将selenium的脚本运行结果写入test_result.log文件中 首 ...

  8. python建立一个简单的server_使用Python创建一个简易的Web Server

    Python 2.x中自带了SimpleHTTPServer模块,到Python3.x中,该模块被合并到了http.server模块中.使用该模块,可以快速创建一个简易的Web服务器. 我们在C:\U ...

  9. python创建一个列表_Python创建一个元素都为0的列表实例

    Python创建一个元素都为0的列表实例 实现创建一个元素都为0的列表: l=10 lis=[0]*l lis 输出结果: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 以上这篇Pyt ...

最新文章

  1. Element el-switch 组件样式修改 将文字显示到组件内
  2. python 代理ip验证_python爬虫成长之路(二):抓取代理IP并多线程验证
  3. 蓝桥杯java第七届决赛第一题--愤怒小鸟
  4. ITK:使用平面结构元素腐蚀二进制图像
  5. 方程的解_NOI导刊2010提高(01) 组合数
  6. java 入门程序_自学 Java 怎么入门?
  7. 大厂,君子好逑?大厂面试题你能过吗
  8. Spring整合mybatis
  9. refprop物性库_refprop 9.1 下载-refprop(制冷剂物性查询运算软件)附中文教程 9.1 最新免费版 - 河东下载站...
  10. Matlab 输入输出操作
  11. Linux安装Nexus3
  12. nmake命令(windows下的makefile)
  13. NanoMsg框架|C#中Nanomsg的PAIR和BUS使用
  14. linux 文件大小单位显示
  15. 中小企业安全路由器防火墙
  16. 想知道如何图片转文字?这几个方法你别错过
  17. android仿微信 进度条,Android开发之模仿微信打开网页的进度条效果(高仿)
  18. 【C++】%d,%05d,%-5d,%.5d的区分
  19. 轻开商贸企业入门级电子商务 B2C网站公共版
  20. virtualxposed使用教程_使用VirtualXposed修改手游

热门文章

  1. STM32CUBE+自平衡车实践篇3.4-STM32cueb配置编码器+车轮速度测量代码实现
  2. ch341a刷写华擎(ASROCK)主板BIOS教程
  3. 计算机考研与就业的利弊分析,考研还是工作?两种选择的利弊分析,让你做出正确选择!...
  4. 关于计算机应用梦想作文,我为梦想而努力700字作文,为梦想而奋斗作文800字
  5. 2021年重庆高考成绩分数段查询,2021重庆高考总成绩一分一段表出炉
  6. 【Nginx 快速入门】反向代理、负载均衡、动静分离
  7. 五子棋ai:极大极小搜索和α-β剪枝算法的思想和实现(qt和c++)(四)算杀模块的简单实现
  8. 辅材先生之打开传统向互联网+辅材这把锁
  9. 第十周 项目一(4)哈夫曼编码的算法验证
  10. 快牙网传——轻松传文件