|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
小甲鱼老师的作业题循环出现在不同的课节,帮我们温故知新,我干脆优化客户体验做了个可保存的 通讯录,省的每次打开要从头输入.
用到了pickle 模块, 但是发现 pickle 用 'rb' 模式打开就不能写入,用'wb'模式就不能读取, 网上看 有人用JASON 解决字典存入文档的问题,
我直接用''搬箱子''靠中间变量过了, 就是想知道是不是有还没学到的办法 能直接解决读写同时进行,
另外,我铺代码可以看到,有许多行重复语句, 只是在输出打印时表述有些不同, 我感觉应该是能用函数形式减少代码量, 然后打印内容
按变量 形式 每次调用挂不同内容即可. 但是实践了一晚上, 没有成功,总是报缩进错误或者 段落不明 类似的错误, 因为我开始是把
if, else 分段了, 一半在函数里,一半是出了函数调用部分接上. 看到报错后,我试着整段包入函数,但是还是不给过. 不知道在构造函数时,是不是
有什么格式或语法框架上的要求
- import pickle
- import os
- '''def input_part(express, result): # 函数调用不成功, 提示缩进错误类
- if name in contacts:
- print ('%s 的联系方式是: ' %(name) +str(contacts[name]))
- update=input(express)
- if update in[ 'yes','YES','Y','y']:
- contacts[name]=str(input('请输入电话号码:'))
- else:
- continue
- else:
- print (result)'''
- '''def update_part(express): # 函数调用不成功,是否涉及到嵌套函数,
- update=input(express) #重复段内容2
- if update in[ 'yes','YES','Y','y']:
- contacts[name]=str(input('请输入电话号码:'))
- else:
- continue'''
- print('| 欢迎进入选择界面|')
- print('| 1, 查询联系人 |')
- print('| 2, 添加联系人 |')
- print('| 3. 删除联系人 |')
- print('| 4. 退出 |')
- if not os.path.exists('D:\\Python33\\35contact.pkl'): #若没有就创建
- with open('D:\\Python33\\35contact.pkl', 'wb') as f: # 'wb' 塞个空字典创建
- contacts=dict( )
- pickle.dump(contacts, f)
- f.close()
- fnew=open('D:\\Python33\\35contact.pkl', 'rb') # 若有了就读取 缓存到contacts 中
- contacts=pickle.load(fnew)
- fnew.close # 发现做了'rb' 就不能写, 做了'wb'就不给读
- fnewnew=open('D:\\Python33\\35contact.pkl','wb')
- while 1:
- select =int(input('请选择要使用功能:' ))
- if select==1:
- name=input('请输入姓名:') #重复段内容1
- if name in contacts:
- print ('%s 的联系方式是: ' %(name) +str(contacts[name]))
- update=input(' 需要修改%s的联系方式吗?' %(name))
- if update in[ 'yes','YES','Y','y']:
- contacts[name]=str(input('请输入电话号码:'))
- else:
- continue
- else:
- print ('%s 的联系方式不存在' %(name))
- update=input('需要添加%s 的联系方式吗?' %(name)) #重复段内容2
- if update in[ 'yes','YES','Y','y']:
- contacts[name]=str(input('请输入电话号码:'))
- else:
- continue
- if select==2:
- #input_part(' 需要修改%s的联系方式吗?' %(name))
- name=input('请输入姓名:') #重复段内容1
- if name in contacts:
- print ('%s 的联系方式是: ' %(name) +str(contacts[name]))
- update=input(' 需要修改%s的联系方式吗?' %(name)) # 重复段内容2
- if update in[ 'yes','YES','Y','y']:
- contacts[name]=str(input('请输入电话号码:'))
- else:
- continue
- if name not in contacts:
- #update_part('需要添加%s 的联系方式吗?' %(name))
- update=input('需要添加%s 的联系方式吗?' %(name)) #重复段内容2
- if update in[ 'yes','YES','Y','y']:
- contacts[name]=str(input('请输入电话号码:'))
- else:
- continue
- if select==3:
- name=input('请输入姓名:') #重复段内容1
- if name in contacts:
- print ('%s 的联系方式是: ' %(name) +str(contacts[name]))
- update=input(' 需要删除%s的联系方式吗?' %(name)) # 重复段内容2
- if update in[ 'yes','YES','Y','y']:
- contacts.pop(name)
- print ('%s 的联系方式已删除' %(name))
- continue
- else:
- continue
- if name not in contacts:
- print ('%s 的联系方式不存在' %(name))
- continue
- if select==4:
- update=input('确定要退出吗?')
- if update in[ 'yes','YES','Y','y']:
- pickle.dump(contacts,fnewnew)
- fnewnew.close()
- break
- else:
- continue
- fcheck=open ('D:\\Python33\\35contact.pkl','rb') # 测试输出保存结果
- detail=pickle.load(fcheck)
- print (detail)
- fcheck.close()
复制代码
|
|