一个作业题---用python创建一个通讯录
来源:互联网 发布:可用端口号范围 编辑:程序博客网 时间:2024/06/12 00:32
题目:
一个文本通讯录要求:
- 内容含有:姓名,电话(手机,座机),qq,email
- 存储功能实现:通过命令行输入后保存到文件
- 读取功能和兼容性:自己程序能读出其他同学创建的通讯录
#!/usr/bin/env python#!encoding:utf-8#filename:contacts_list.py#QUESTION FROM:http://uliweb.clkg.org/tutorial/view_chapter/183import pickle, pprintimport os, sys def 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_path exit f = 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_path exit f = open(file_path,'a+') contact = pickle.load(f)#加载通讯录 #打开通讯录文本后进行新的用户添加输入 name = raw_input('>> name:' ) contact[name] = {} cellphone = raw_input('>> cellphone:' ) contact[name]['cellphone'] = cellphone qq = raw_input('>> qq:' ) contact[name]['qq'] = qq tel = raw_input('>> tel:' ) contact[name]['tel'] = tel e_mail = raw_input('>> e-mail:' ) contact[name]['e-mail'] = e_mail f.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选择进行读取自己的还是别人的conact input_dir = raw_input('input someone contact list file path (eg: E:\python\list1.txt)\n >>>') path_others = r'%s' % input_dir load_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 ''' % usage except: 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 >>searchinput your contact list file path (eg: E:\python\list1.txt) >>>D:\test_tmpThe 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 >>resetinput your contact list file path (eg: E:\python\list1.txt) >>>D:\test_tmp\contact_list.txtcreate 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 >>searchinput 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 >>addinginput 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 >>searchinput 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 >>readinginput 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创建一个通讯录
- 一个计算机网络的作业题
- 创建一个通讯录小项目代码
- 一个简单的python程序实例(通讯录)
- 创建一个python项目
- 创建一个类Python
- oc 通讯录作业题
- 编程练习 ==> 一个作业题
- C++ 重写了一个学生管理程序(作业题)
- 用python字典写的一个简单的通讯录小系统
- 用C语言实现一个通讯录
- 用C++实现一个简单的通讯录
- 写一个通讯录
- 一个C++通讯录代码
- 用链表实现一个通讯录
- 一个简单的通讯录
- 实现一个小型通讯录
- 实现一个通讯录
- Nexus远程Maven仓库索引下载教程
- RHEL 6 安装 chrome [备忘]
- SNMP in NexnetaStor
- 【Python】基于PyUnit的自动化单元测试框架,PyUnitGUI
- 使用开源的Slidingmenu库 facebook、人人网、everynote、Google+
- 一个作业题---用python创建一个通讯录
- 编程之美 2.17 数组循环移位
- 542 - France '98 (概率 dp)
- 如何对时间进行简单加减运算
- 随便写点
- 逻辑题:题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单
- 初识windows编程之多线程
- NSString反向查找字符串
- iOS学习系列 - 扩展机制category与associative