鱼C论坛

 找回密码
 立即注册
查看: 2004|回复: 7

[已解决]想做一个通讯录程序,结果一直解决不了异常

[复制链接]
发表于 2017-8-21 17:42:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import pickle as p
  2. #打开存储文件
  3. fileName = 'Contact_Information.txt'
  4. with open(fileName,'wb+') as f:
  5.     #把存储信息的字典弄进去
  6.     contactDict = {'example':'19890604590'}
  7.     p.dump(contactDict,f)
  8.     #加载文件
  9.     p.load(f)
  10. #定义一个存储信息的类
  11.     class Information:


  12.         #添加联系人
  13.         def addContact(self,name,contact):

  14.             self.name = name
  15.             self.contact = contact

  16.             if name in contactDict:

  17.                 temp = input('联系人已存在,是否要修改联系人?(YES/NO):')
  18.                 answers1 = ['YES', 'yes', 'Yes']
  19.                 answers2 = ['NO', 'no', 'No']

  20.                 if temp in answers1:
  21.                     contactDict[name] = contact
  22.                     p.dump(contactDict, f)
  23.                     print('您已成功修改联系人')
  24.                 if temp in answers2:
  25.                     print('您已取消修改联系人')
  26.                 else:
  27.                     print('输入有误')

  28.             else:
  29.                 contactDict[name] = contact
  30.                 f.write(contactDict)
  31.         #修改联系人
  32.         def  modifyContact(self,name,contact):

  33.             if name in contactDict:

  34.                 temp = input('联系人已存在,是否要修改联系人?(YES/NO):')
  35.                 answers1 = ['YES','yes','Yes']
  36.                 answers2 = ['NO','no','No']

  37.                 if temp in answers1:
  38.                     contactDict[name] = contact
  39.                     p.dump(contactDict[name],f)
  40.                     print('您已成功修改联系人')
  41.                 if temp in answers2:
  42.                     print('您已取消修改联系人')
  43.                 else:
  44.                     print('输入有误')

  45.             else:
  46.                 print('您输入的联系人不存在')
  47.         #删除联系人
  48.         def deleteContact(self,name):

  49.             if name in contactDict:

  50.                 temp = input('是否要删除联系人?(YES/NO):')
  51.                 answers1 = ['YES','yes','Yes']
  52.                 answers2 = ['NO','no','No']

  53.                 if temp in answers1:
  54.                     del contactDict[name]
  55.                     p.dump(contactDict,f)

  56.                     print('您已成功删除联系人')
  57.                 if temp in answers2:
  58.                     print('您已取消删除联系人')
  59.                 else:
  60.                     print('输入有误')

  61.             else:
  62.                 print('您输入的联系人不存在')
  63.         #搜索联系人
  64.         def sreachContact(self,name):

  65.             if name in contactDict:
  66.                 print(name,':',contactDict[name])

  67.             else:
  68.                 print('您输入的联系人不存在')





  69.     print('|--- 欢迎进入通讯录程序 ---|\n|--- 1:搜索联系人资料  ---|\n|--- 2:添加新的联系人  ---|\n|--- 3:删除已有联系人  ---|\n|--- 4:修改已有联系人  ---|\n|--- 5:退出通讯录程序  ---|')
  70.     #实例化类
  71.     information = Information()


  72.     while True:
  73.         instr = int(input('\n请输入相关的指令代码:'))
  74.         if instr == 1:
  75.             name1 = input('请输入联系人姓名:')
  76.             information.sreachContact(name1)

  77.         if instr == 2:
  78.             name2 = input('请输入联系人姓名:')
  79.             contact2 = input('请输入联系人联系方式:')
  80.             information.addContact(name2,contact2)

  81.         if instr == 3:
  82.             name3 = input('请输入联系人姓名:')
  83.             information.deleteContact(name3)

  84.         if instr == 4:
  85.             name4 = input('请输入联系人姓名:')
  86.             contact4 = input('请输入联系人联系方式:')
  87.             information.modifyContact(name4,contact4)

  88.         if instr == 5:
  89.             break

  90.     print('|--- 感谢使用通讯录程序 ---|',)



复制代码

  1. Traceback (most recent call last):
  2.   File "/Users/luoziqian/PycharmProjects/PythonProgram/命令行地址薄程序.py", line 9, in <module>
  3.     p.load(f)
  4. EOFError: Ran out of input
复制代码


会出现一大堆错误
题目要求:
我会建议你先解决这样一个问题:
创建你自己的命令行地址簿程序。在这个程序中,你可以添加、修改、删除和搜 索你的联系人(朋友、家人和同事等等)以及它们的信息(诸如电子邮件地址和/或 电话号码)。这些详细信息应该被保存下来以便以后提取。
思考一下我们到目前为止所学的各种东西的话,你会觉得这个问题其实相当简 单。如果你仍然希望知道该从何处入手的话,那么这里也有一个提示。 提示(先不要读): 建一个类来表示人的信息。用字典来存储人的对象,可以将名字作为其键值。用 pickle 模块将对 象永久地存在磁盘上。用字典的内置方法实现增加,删除和修改联系人的信息。

大佬快来啊
最佳答案
2017-8-21 19:10:35
2017-08-21_190836.png
  1. import pickle as p
  2. #打开存储文件
  3. fileName = 'Contact_Information.txt'
  4. with open(fileName,'wb+') as f:
  5.     #把存储信息的字典弄进去
  6.     contactDict = {'example':'19890604590'}
  7.     p.dump(contactDict,f)
  8.     f.seek(0) #写入文件后,文件指针指向了最后,如果要继续操作,应该把文件指针
  9.             #指回合适的位置,这里f.seek(0)指回文件头
  10.     #加载文件
  11.     p.load(f)
  12. #定义一个存储信息的类
  13.     class Information:


  14.         #添加联系人
  15.         def addContact(self,name,contact):

  16.             self.name = name
  17.             self.contact = contact

  18.             if name in contactDict:

  19.                 temp = input('联系人已存在,是否要修改联系人?(YES/NO):')
  20.                 answers1 = ['YES', 'yes', 'Yes']
  21.                 answers2 = ['NO', 'no', 'No']

  22.                 if temp in answers1:
  23.                     contactDict[name] = contact
  24.                     p.dump(contactDict, f)
  25.                     print('您已成功修改联系人')
  26.                 if temp in answers2:
  27.                     print('您已取消修改联系人')
  28.                 else:
  29.                     print('输入有误')

  30.             else:
  31.                 contactDict[name] = contact
  32.                 f.write(contactDict)
  33.         #修改联系人
  34.         def  modifyContact(self,name,contact):

  35.             if name in contactDict:

  36.                 temp = input('联系人已存在,是否要修改联系人?(YES/NO):')
  37.                 answers1 = ['YES','yes','Yes']
  38.                 answers2 = ['NO','no','No']

  39.                 if temp in answers1:
  40.                     contactDict[name] = contact
  41.                     p.dump(contactDict[name],f)
  42.                     print('您已成功修改联系人')
  43.                 if temp in answers2:
  44.                     print('您已取消修改联系人')
  45.                 else:
  46.                     print('输入有误')

  47.             else:
  48.                 print('您输入的联系人不存在')
  49.         #删除联系人
  50.         def deleteContact(self,name):

  51.             if name in contactDict:

  52.                 temp = input('是否要删除联系人?(YES/NO):')
  53.                 answers1 = ['YES','yes','Yes']
  54.                 answers2 = ['NO','no','No']

  55.                 if temp in answers1:
  56.                     del contactDict[name]
  57.                     p.dump(contactDict,f)

  58.                     print('您已成功删除联系人')
  59.                 if temp in answers2:
  60.                     print('您已取消删除联系人')
  61.                 else:
  62.                     print('输入有误')

  63.             else:
  64.                 print('您输入的联系人不存在')
  65.         #搜索联系人
  66.         def sreachContact(self,name):

  67.             if name in contactDict:
  68.                 print(name,':',contactDict[name])

  69.             else:
  70.                 print('您输入的联系人不存在')





  71.     print('|--- 欢迎进入通讯录程序 ---|\n|--- 1:搜索联系人资料  ---|\n|--- 2:添加新的联系人  ---|\n|--- 3:删除已有联系人  ---|\n|--- 4:修改已有联系人  ---|\n|--- 5:退出通讯录程序  ---|')
  72.     #实例化类
  73.     information = Information()


  74.     while True:
  75.         instr = int(input('\n请输入相关的指令代码:'))
  76.         if instr == 1:
  77.             name1 = input('请输入联系人姓名:')
  78.             information.sreachContact(name1)

  79.         if instr == 2:
  80.             name2 = input('请输入联系人姓名:')
  81.             contact2 = input('请输入联系人联系方式:')
  82.             information.addContact(name2,contact2)

  83.         if instr == 3:
  84.             name3 = input('请输入联系人姓名:')
  85.             information.deleteContact(name3)

  86.         if instr == 4:
  87.             name4 = input('请输入联系人姓名:')
  88.             contact4 = input('请输入联系人联系方式:')
  89.             information.modifyContact(name4,contact4)

  90.         if instr == 5:
  91.             break

  92.     print('|--- 感谢使用通讯录程序 ---|',)


复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-8-21 17:42:47 | 显示全部楼层
a
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-21 18:03:13 | 显示全部楼层
等晚上再来仔细看。不过我直接从你的Traceback看了你第9行。
用pickle.load()的话要先用 rb 模式打开目标文件噢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 19:10:35 | 显示全部楼层    本楼为最佳答案   
2017-08-21_190836.png
  1. import pickle as p
  2. #打开存储文件
  3. fileName = 'Contact_Information.txt'
  4. with open(fileName,'wb+') as f:
  5.     #把存储信息的字典弄进去
  6.     contactDict = {'example':'19890604590'}
  7.     p.dump(contactDict,f)
  8.     f.seek(0) #写入文件后,文件指针指向了最后,如果要继续操作,应该把文件指针
  9.             #指回合适的位置,这里f.seek(0)指回文件头
  10.     #加载文件
  11.     p.load(f)
  12. #定义一个存储信息的类
  13.     class Information:


  14.         #添加联系人
  15.         def addContact(self,name,contact):

  16.             self.name = name
  17.             self.contact = contact

  18.             if name in contactDict:

  19.                 temp = input('联系人已存在,是否要修改联系人?(YES/NO):')
  20.                 answers1 = ['YES', 'yes', 'Yes']
  21.                 answers2 = ['NO', 'no', 'No']

  22.                 if temp in answers1:
  23.                     contactDict[name] = contact
  24.                     p.dump(contactDict, f)
  25.                     print('您已成功修改联系人')
  26.                 if temp in answers2:
  27.                     print('您已取消修改联系人')
  28.                 else:
  29.                     print('输入有误')

  30.             else:
  31.                 contactDict[name] = contact
  32.                 f.write(contactDict)
  33.         #修改联系人
  34.         def  modifyContact(self,name,contact):

  35.             if name in contactDict:

  36.                 temp = input('联系人已存在,是否要修改联系人?(YES/NO):')
  37.                 answers1 = ['YES','yes','Yes']
  38.                 answers2 = ['NO','no','No']

  39.                 if temp in answers1:
  40.                     contactDict[name] = contact
  41.                     p.dump(contactDict[name],f)
  42.                     print('您已成功修改联系人')
  43.                 if temp in answers2:
  44.                     print('您已取消修改联系人')
  45.                 else:
  46.                     print('输入有误')

  47.             else:
  48.                 print('您输入的联系人不存在')
  49.         #删除联系人
  50.         def deleteContact(self,name):

  51.             if name in contactDict:

  52.                 temp = input('是否要删除联系人?(YES/NO):')
  53.                 answers1 = ['YES','yes','Yes']
  54.                 answers2 = ['NO','no','No']

  55.                 if temp in answers1:
  56.                     del contactDict[name]
  57.                     p.dump(contactDict,f)

  58.                     print('您已成功删除联系人')
  59.                 if temp in answers2:
  60.                     print('您已取消删除联系人')
  61.                 else:
  62.                     print('输入有误')

  63.             else:
  64.                 print('您输入的联系人不存在')
  65.         #搜索联系人
  66.         def sreachContact(self,name):

  67.             if name in contactDict:
  68.                 print(name,':',contactDict[name])

  69.             else:
  70.                 print('您输入的联系人不存在')





  71.     print('|--- 欢迎进入通讯录程序 ---|\n|--- 1:搜索联系人资料  ---|\n|--- 2:添加新的联系人  ---|\n|--- 3:删除已有联系人  ---|\n|--- 4:修改已有联系人  ---|\n|--- 5:退出通讯录程序  ---|')
  72.     #实例化类
  73.     information = Information()


  74.     while True:
  75.         instr = int(input('\n请输入相关的指令代码:'))
  76.         if instr == 1:
  77.             name1 = input('请输入联系人姓名:')
  78.             information.sreachContact(name1)

  79.         if instr == 2:
  80.             name2 = input('请输入联系人姓名:')
  81.             contact2 = input('请输入联系人联系方式:')
  82.             information.addContact(name2,contact2)

  83.         if instr == 3:
  84.             name3 = input('请输入联系人姓名:')
  85.             information.deleteContact(name3)

  86.         if instr == 4:
  87.             name4 = input('请输入联系人姓名:')
  88.             contact4 = input('请输入联系人联系方式:')
  89.             information.modifyContact(name4,contact4)

  90.         if instr == 5:
  91.             break

  92.     print('|--- 感谢使用通讯录程序 ---|',)


复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-21 21:40:08 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-22 13:40:25 | 显示全部楼层
nexthunghung 发表于 2017-8-21 21:40
看我之前发的一帖子,哈哈,也是通讯录哦

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-22 13:41:08 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-22 13:46:10 | 显示全部楼层
本帖最后由 elderBi 于 2017-8-22 13:53 编辑

对不起,我没好好看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-1 17:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表