|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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()
|
|