鱼C论坛

 找回密码
 立即注册
查看: 2761|回复: 8

[已解决]求助,关于通讯录程序

[复制链接]
发表于 2021-10-24 16:07:03 | 显示全部楼层 |阅读模式

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

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

x
第25讲课后作业,动动手那里的通讯录程序有个问题,就是之前输入的姓名、电话在第二次打开程序后均不存在了,因为每次打开程序,都会把字典重置为空字典,请问如何解决这个问题,即保存之前输入的姓名、电话?
最佳答案
2021-10-25 15:50:43
本帖最后由 jackz007 于 2021-10-25 16:12 编辑
  1. #coding:gbk

  2. fn , fc = 'data.txt', False
  3. contacts = dict()
  4. try:
  5.     f = open(fn)
  6.     for x in f:
  7.         if x . strip():
  8.             a , b = x . strip() . split(' , ')
  9.             contacts[a . strip()] = b . strip()
  10.     f . close()
  11. except:
  12.     pass         

  13. print('|--- 欢迎进入通讯录程序 ---|')
  14. print('|--- 1:查询联系人资料  ---|')
  15. print('|--- 2:插入新的联系人  ---|')
  16. print('|--- 3:删除已有联系人  ---|')
  17. print('|--- 4:退出通讯录程序  ---|')

  18. while 1:
  19.     instr = int(input('\n请输入相关的指令代码:'))
  20.    
  21.     if instr == 1:
  22.         name = input('请输入联系人姓名:')
  23.         if name in contacts:
  24.             print(name + ' : ' + contacts[name])
  25.         else:
  26.             print('您输入的姓名不再通讯录中!')

  27.     if instr == 2:
  28.         name = input('请输入联系人姓名:')
  29.         if name in contacts:
  30.             print('您输入的姓名在通讯录中已存在 -->> ', end='')
  31.             print(name + ' : ' + contacts[name])
  32.             if input('是否修改用户资料(YES/NO):') == 'YES':
  33.                 contacts[name] = input('请输入用户联系电话:')
  34.         else:
  35.             contacts[name] = input('请输入用户联系电话:')
  36.             fc = True
  37.     if instr == 3:
  38.         name = input('请输入联系人姓名:')
  39.         if name in contacts:
  40.             del(contacts[name])         # 也可以使用dict.pop()
  41.             fc = True
  42.         else:
  43.             print('您输入的联系人不存在。')
  44.             
  45.     if instr == 4:
  46.         if fc:
  47.             f = open(fn , 'wt')
  48.             for a , b in contacts . items():
  49.                 f . write(a + ' , ' + b + '\n')
  50.             f . close()
  51.         break

  52. print('|--- 感谢使用通讯录程序 ---|')
复制代码

        运行实况:
  1. D:\0002.Exercise\Python>python tx.py
  2. |--- 欢迎进入通讯录程序 ---|
  3. |--- 1:查询联系人资料  ---|
  4. |--- 2:插入新的联系人  ---|
  5. |--- 3:删除已有联系人  ---|
  6. |--- 4:退出通讯录程序  ---|

  7. 请输入相关的指令代码:2
  8. 请输入联系人姓名:abc
  9. 请输入用户联系电话:123

  10. 请输入相关的指令代码:2
  11. 请输入联系人姓名:cde
  12. 请输入用户联系电话:234

  13. 请输入相关的指令代码:2
  14. 请输入联系人姓名:def
  15. 请输入用户联系电话:345

  16. 请输入相关的指令代码:2
  17. 请输入联系人姓名:efg
  18. 请输入用户联系电话:456

  19. 请输入相关的指令代码:4
  20. |--- 感谢使用通讯录程序 ---|

  21. D:\0002.Exercise\Python>python tx.py
  22. |--- 欢迎进入通讯录程序 ---|
  23. |--- 1:查询联系人资料  ---|
  24. |--- 2:插入新的联系人  ---|
  25. |--- 3:删除已有联系人  ---|
  26. |--- 4:退出通讯录程序  ---|

  27. 请输入相关的指令代码:1
  28. 请输入联系人姓名:cde
  29. cde : 234

  30. 请输入相关的指令代码:1
  31. 请输入联系人姓名:efg
  32. efg : 456

  33. 请输入相关的指令代码:4
  34. |--- 感谢使用通讯录程序 ---|

  35. D:\0002.Exercise\Python>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-24 16:39:20 | 显示全部楼层
       你在问什么?Python 还是 C/C++,你的代码在哪里?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-25 10:26:26 | 显示全部楼层
jackz007 发表于 2021-10-24 16:39
你在问什么?Python 还是 C/C++,你的代码在哪里?

《零基础学习python》第25讲课后作业。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-25 10:28:22 | 显示全部楼层
liujie6704 发表于 2021-10-25 10:26
《零基础学习python》第25讲课后作业。

     这个作业的内容是什么,你的代码在哪里?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-25 12:45:58 | 显示全部楼层
jackz007 发表于 2021-10-25 10:28
这个作业的内容是什么,你的代码在哪里?


print('|--- 欢迎进入通讯录程序 ---|')
print('|--- 1:查询联系人资料  ---|')
print('|--- 2:插入新的联系人  ---|')
print('|--- 3:删除已有联系人  ---|')
print('|--- 4:退出通讯录程序  ---|')

contacts = dict()

while 1:
    instr = int(input('\n请输入相关的指令代码:'))
   
    if instr == 1:
        name = input('请输入联系人姓名:')
        if name in contacts:
            print(name + ' : ' + contacts[name])
        else:
            print('您输入的姓名不再通讯录中!')

    if instr == 2:
        name = input('请输入联系人姓名:')
        if name in contacts:
            print('您输入的姓名在通讯录中已存在 -->> ', end='')
            print(name + ' : ' + contacts[name])
            if input('是否修改用户资料(YES/NO):') == 'YES':
                contacts[name] = input('请输入用户联系电话:')
        else:
            contacts[name] = input('请输入用户联系电话:')

    if instr == 3:
        name = input('请输入联系人姓名:')
        if name in contacts:
            del(contacts[name])         # 也可以使用dict.pop()
        else:
            print('您输入的联系人不存在。')
            
    if instr == 4:
        break

print('|--- 感谢使用通讯录程序 ---|')
   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-25 13:12:05 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-10-25 13:13 编辑

兄弟,首先你必须了解什么是程序语言,无论是 C/C++ 或 Python 或 Java,代码只是代码啊,最终还是看你想把代码变成什么东西啊,比如电脑新软体、网页、手机游戏、电脑游戏等等.....,在还没有变成这些东西之前,它只是个代码而已,编译器或解释器只是负责诠译你的代码给系统知道而已,并不算完成新软体或游戏啊,你所运行的所有数据,在你关闭代码同时销毁,不可能储存的(除非设置数据库保存,或储存在 .txt 文件里),这些都是基本知识,在学习程序语言前就应该需要了解这些。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-25 13:27:54 | 显示全部楼层
这个不是你代码的问题,
简单的说:你每次写入的姓名、电话之类的数据信息的有效周期就是在你程序运行的期间,
当你结束这个程序,这个程序运行期间保存的数据都会被删除。

你可以想想,要是你每次写的代码,运行中生成的数据,在结束运行后,不被删除,一直保存在你的电脑里,
那么随着你的代码写的越来越多,运行后产生的数据也越来越多,占用的电脑内存也就越来越多,
这样就会导致你的电脑就会越来越卡,所以程序运行期间保存的数据在程序结束后都会被删除。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-25 15:50:43 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-10-25 16:12 编辑
  1. #coding:gbk

  2. fn , fc = 'data.txt', False
  3. contacts = dict()
  4. try:
  5.     f = open(fn)
  6.     for x in f:
  7.         if x . strip():
  8.             a , b = x . strip() . split(' , ')
  9.             contacts[a . strip()] = b . strip()
  10.     f . close()
  11. except:
  12.     pass         

  13. print('|--- 欢迎进入通讯录程序 ---|')
  14. print('|--- 1:查询联系人资料  ---|')
  15. print('|--- 2:插入新的联系人  ---|')
  16. print('|--- 3:删除已有联系人  ---|')
  17. print('|--- 4:退出通讯录程序  ---|')

  18. while 1:
  19.     instr = int(input('\n请输入相关的指令代码:'))
  20.    
  21.     if instr == 1:
  22.         name = input('请输入联系人姓名:')
  23.         if name in contacts:
  24.             print(name + ' : ' + contacts[name])
  25.         else:
  26.             print('您输入的姓名不再通讯录中!')

  27.     if instr == 2:
  28.         name = input('请输入联系人姓名:')
  29.         if name in contacts:
  30.             print('您输入的姓名在通讯录中已存在 -->> ', end='')
  31.             print(name + ' : ' + contacts[name])
  32.             if input('是否修改用户资料(YES/NO):') == 'YES':
  33.                 contacts[name] = input('请输入用户联系电话:')
  34.         else:
  35.             contacts[name] = input('请输入用户联系电话:')
  36.             fc = True
  37.     if instr == 3:
  38.         name = input('请输入联系人姓名:')
  39.         if name in contacts:
  40.             del(contacts[name])         # 也可以使用dict.pop()
  41.             fc = True
  42.         else:
  43.             print('您输入的联系人不存在。')
  44.             
  45.     if instr == 4:
  46.         if fc:
  47.             f = open(fn , 'wt')
  48.             for a , b in contacts . items():
  49.                 f . write(a + ' , ' + b + '\n')
  50.             f . close()
  51.         break

  52. print('|--- 感谢使用通讯录程序 ---|')
复制代码

        运行实况:
  1. D:\0002.Exercise\Python>python tx.py
  2. |--- 欢迎进入通讯录程序 ---|
  3. |--- 1:查询联系人资料  ---|
  4. |--- 2:插入新的联系人  ---|
  5. |--- 3:删除已有联系人  ---|
  6. |--- 4:退出通讯录程序  ---|

  7. 请输入相关的指令代码:2
  8. 请输入联系人姓名:abc
  9. 请输入用户联系电话:123

  10. 请输入相关的指令代码:2
  11. 请输入联系人姓名:cde
  12. 请输入用户联系电话:234

  13. 请输入相关的指令代码:2
  14. 请输入联系人姓名:def
  15. 请输入用户联系电话:345

  16. 请输入相关的指令代码:2
  17. 请输入联系人姓名:efg
  18. 请输入用户联系电话:456

  19. 请输入相关的指令代码:4
  20. |--- 感谢使用通讯录程序 ---|

  21. D:\0002.Exercise\Python>python tx.py
  22. |--- 欢迎进入通讯录程序 ---|
  23. |--- 1:查询联系人资料  ---|
  24. |--- 2:插入新的联系人  ---|
  25. |--- 3:删除已有联系人  ---|
  26. |--- 4:退出通讯录程序  ---|

  27. 请输入相关的指令代码:1
  28. 请输入联系人姓名:cde
  29. cde : 234

  30. 请输入相关的指令代码:1
  31. 请输入联系人姓名:efg
  32. efg : 456

  33. 请输入相关的指令代码:4
  34. |--- 感谢使用通讯录程序 ---|

  35. D:\0002.Exercise\Python>
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-27 15:50:57 | 显示全部楼层

谢谢1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 10:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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