鱼C论坛

 找回密码
 立即注册
查看: 1699|回复: 15

[已解决]代码中有两处问题

[复制链接]
发表于 2022-4-10 20:23:44 | 显示全部楼层 |阅读模式

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

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

x

初学者,看不懂哪里出了问题,大佬帮忙看一下,解决问题的10鱼币
程序目的:电话簿,有录入(其中包含修改),打印用户列表,查询,删除四大板块
出现的两出问题:
        1,第51行,系统没有报错,但只有我的电话号码位数为8时才会正常运行,其它各种情况(包括11位)都会打印后面的"电话号码的长度为8或11位,请从头重新输入!!!"
        2,第70行,系统报错,具体如下图

第二个问题的图片

第二个问题的图片


完整代码如下:

  1. '''豆嘉木电话簿'''

  2. print("-------欢迎使用豆嘉木电话簿-------")
  3. book = {}
  4. man = "男"
  5. woman = "女"
  6. choicelist = [0,"性别","电话号码","家庭住址"]

  7. while True:
  8.     p = int(input("录入按1,打印用户列表按2,查询按3,删除按4,退出按0:"))                  #录入部分
  9.     if p != 1 and 2 and 3 and 0:
  10.         print("请按要求输入!!!")
  11.     elif p == 1:
  12.         print("-----录入模式-----")
  13.         name = input("请输入用户名:")
  14.         if name in book:                                                        #穿插修改部分
  15.             o = int(input("电话簿中已有{}用户,是否修改?(是1/否2)".format(name)))
  16.             if 0 == 2:
  17.                 print("已结束本轮")
  18.                 continue
  19.             elif o == 1:
  20.                 while s == 1:
  21.                     choice = int(input("请问修改哪一项(性别按1,电话号码按2,家庭住址按3,退出按0):"))
  22.                     if choice != 1 or 2 or 3 or 0:
  23.                         print("请按要求输入!!!")
  24.                         s = 1
  25.                     elif choice == 0:
  26.                         print("已结束本轮循环")
  27.                         s = 0
  28.                     else:
  29.                         book[name][choicelist[choice]] = input("请输入{}的修改值:".format(choicelist[choice]))
  30.                         s = input("是否继续修改,不需要按0,需要随意:")
  31.                         if s == '0':
  32.                             s = 0
  33.                             continue
  34.                         else:
  35.                             s = 1
  36.                 print("-----修改完毕-----")
  37.                 continue
  38.         gender = int(input("{}性别(男1/女2/未知3):".format(name)))
  39.         if gender != 1 and 2 and 3:
  40.             print("请正确输入!!!")
  41.             continue
  42.         elif gender == 3:
  43.             gender = "未知"
  44.         elif gender == 2:
  45.             gender = "女"
  46.         else:
  47.             gender = "男"
  48.         phonenum = input("{}的电话号码:".format(name))
  49.         if len(phonenum) != 8 and 11:
  50.             print("电话号码的长度为8或11位,请从头重新输入!!!")
  51.             continue
  52.         home = input("{}的家庭住址(若未知按1):".format(name))
  53.         if home == 1:
  54.             home = "未知"
  55.         book = book.update({name:{"用户名:":name,"性别:":gender,"电话号码:":phonenum,"家庭住址":home}})
  56.         print("-----录入完毕-----")
  57.     elif p == 2:
  58.         print("-----打印模式-----")
  59.         print("电话簿中的用户共有{}位,分别为".format(len(book)))
  60.         menberslen = len(book)
  61.         members = list(book.keys())
  62.         for i in range(0,len(book)):
  63.             print(members[i])
  64.         print("-----打印完毕-----")
  65.     elif p == 3:
  66.         print("-----查询模式-----")
  67.         check = input("请输入查询对象的名称:")
  68.         if check not in book:
  69.             print("{}不在电话簿中,可先打印用户列表,再重新输入".format(delmem))
  70.         else:
  71.             print("用户名:{} \n性别:{} \n电话号码:{} \n家庭住址:{}".format(book[check]['用户名'],book[check]['性别'],
  72.                                                               book[check]['电话号码'],book[check]['家庭住址']))
  73.     elif p == 4:
  74.         print("-----删除模式-----")
  75.         delmem = input("需要删除哪一个用户(退出按0):")
  76.         if delmem == 0:
  77.             print("-----退出删除模式-----")
  78.         elif delmem not in book:
  79.             print("{}不在电话簿中,可先打印用户列表,再重新输入".format(delmem))
  80.             continue
  81.         else:
  82.             del book[delmem]
  83.         print("-----删除完毕-----")
  84.     elif p == 0:
  85.         print("-----程序终止-----")
  86.         break
复制代码
最佳答案
2022-4-12 17:01:23
兄弟,你的代码,我给你优化了
你自己看看
  1. import os
  2. import pickle

  3. if not os.path.exists('E:/通讯.pkl'):
  4.     with open('E:/通讯.pkl', 'wb') as f:
  5.         pickle.dump({},f)
  6. else:
  7.     with open('E:/通讯.pkl', 'rb') as f:
  8.         book = pickle.load(f)


  9. def entering(book):
  10.     print("-----录入模式-----")
  11.     name = input("请输入用户名:")
  12.     if name in book:  # 穿插修改部分
  13.         name = int(input("电话簿中已有{}用户,是否修改?(是1/否2)".format(name)))
  14.         if name != 1:
  15.             print("已结束本轮")
  16.         elif name == 1:
  17.             s = 1
  18.             while s:
  19.                 nam = input("请输入要修改的用户名:")
  20.                 if nam not in book:
  21.                     nam = input('用户不存在,请重新输入要修改的用户名:')
  22.                 choice = int(input("请问修改哪一项(按1性别,按2电话号码,按3家庭住址,按0退出):"))
  23.                 if choice not in [1, 2, 3, 0]:
  24.                     print("请按要求输入!!!")
  25.                     s = 1
  26.                     continue
  27.                 elif choice == 0:
  28.                     print("已结束本轮循环")
  29.                     s = 0
  30.                 else:
  31.                     book[nam][choice_list[choice]] = input("请输入{}的修改值:".format(choice_list[choice]))
  32.                     s = input("是否继续修改,需要按0,不需要随意:")
  33.                     if s == '0':
  34.                         s = 1
  35.                         continue
  36.                     else:
  37.                         s = 0
  38.             print("-----修改完毕-----")
  39.             with open('E:/通讯.pkl', 'wb') as f:
  40.                 pickle.dump(book, f)
  41.     else:
  42.         gender = int(input("{}性别(男1/女2/未知3):".format(name)))
  43.         while gender not in [1, 2, 3]:
  44.             print("请正确输入!!!")
  45.             gender = int(input("{}性别(男1/女2/未知3):".format(name)))
  46.             if gender in [1, 2, 3]:
  47.                 break
  48.         if gender == 3:
  49.             gender = "未知"
  50.         elif gender == 2:
  51.             gender = "女"
  52.         else:
  53.             gender = "男"
  54.         phonenum = input("{}的电话号码:".format(name))
  55.         while len(phonenum) != 11:
  56.             print("电话号码的长度为8或11位,请重新输入!!!")
  57.             phonenum = input("{}的电话号码:".format(name))
  58.             if len(phonenum) == 11:
  59.                 break
  60.         home = input("{}的家庭住址(若未知按1):".format(name))
  61.         if home == '1':
  62.             home = '未知'
  63.         book[name] = {'用户名': name, '性别': gender, '电话号码': phonenum, '家庭住址': home}

  64.         print("-----录入完毕-----")
  65.         with open('E:/通讯.pkl', 'wb') as f:
  66.             pickle.dump(book, f)
  67.     return book

  68. '''豆嘉木电话簿'''

  69. print("-------欢迎使用豆嘉木电话簿-------")

  70. choice_list = [0, '性别', '电话号码', '家庭住址']
  71. while True:
  72.     p = int(input("按1是录入,按2是查询按,按3是删除,按0退出:"))  # 录入部分
  73.     if p not in [1, 2, 3, 0]:
  74.         print("请按要求输入!!!")
  75.     elif p == 1:
  76.         entering(book)

  77.     elif p == 2:
  78.         print("-----查询模式-----")
  79.         check = input("请输入查询对象的名称:")
  80.         if check not in book:
  81.             while 1:
  82.                 check = int(input("%s不在电话簿中,请问是否增加联系人(是1/否2):"%check))
  83.                 if check == 1:
  84.                     entering(book)
  85.                     break
  86.                 else:
  87.                     break
  88.         else:
  89.             print('用户名:%s \n性别:%s \n电话号码:%s \n家庭住址:%s'%(book[check]['用户名'], book[check]['性别'],
  90.                                                               book[check]['电话号码'], book[check]['家庭住址']))
  91.     elif p == 3:
  92.         print("-----删除模式-----")
  93.         delmem = input("需要删除哪一个用户(退出按0):")
  94.         if delmem == 0:
  95.             print("-----退出删除模式-----")
  96.         elif delmem not in book:
  97.             delmem = int(input("%s不在电话簿中,请问是否增加联系人(是1/否2):" %delmem))
  98.             if delmem == 1:
  99.                 entering(book)
  100.         else:
  101.             del book[delmem]
  102.         with open('E:/通讯.pkl', 'wb') as f:
  103.             pickle.dump(book, f)
  104.         print("-----删除完毕-----")

  105.     elif p == 0:
  106.         print("-----程序终止-----")
  107.         break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-4-10 20:32:54 From FishC Mobile | 显示全部楼层
delmem是啥鸟
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-10 20:46:08 | 显示全部楼层

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

使用道具 举报

发表于 2022-4-10 20:49:24 From FishC Mobile | 显示全部楼层
豆嘉木 发表于 2022-4-10 20:46
变量名

但你前面并没有这个变量啊

评分

参与人数 1鱼币 +5 收起 理由
豆嘉木 + 5 感谢楼主无私奉献!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2022-4-10 20:59:32 | 显示全部楼层
第二个报错问题已靠自己修复,第一个问题还没解决
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-10 21:01:23 | 显示全部楼层
wp231957 发表于 2022-4-10 20:49
但你前面并没有这个变量啊

嗯我自己改好了,刚看到你的,先给你5鱼币,大佬再帮我看看第一个问题,这我是真没看懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-10 21:04:55 From FishC Mobile | 显示全部楼层
本帖最后由 wp231957 于 2022-4-10 21:09 编辑
豆嘉木 发表于 2022-4-10 21:01
嗯我自己改好了,刚看到你的,先给你5鱼币,大佬再帮我看看第一个问题,这我是真没看懂


if len(phonenum) != 8 and 11:
这个是有问题的,有些想当然
试一试
if len(phonenum) != 8 or len(phonenum) != 11:
??
嗯,不知道你想表达啥,所以不知道咋改

评分

参与人数 1鱼币 +5 收起 理由
豆嘉木 + 5 感谢楼主无私奉献!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2022-4-10 22:33:04 | 显示全部楼层
wp231957 发表于 2022-4-10 21:04
if len(phonenum) != 8 and 11:
这个是有问题的,有些想当然
试一试

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

使用道具 举报

 楼主| 发表于 2022-4-10 22:52:23 | 显示全部楼层
wp231957 发表于 2022-4-10 21:04
if len(phonenum) != 8 and 11:
这个是有问题的,有些想当然
试一试

我把8位的删掉了,暂时解决问题,谢了,5个鱼币给你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-11 04:50:18 From FishC Mobile | 显示全部楼层
豆嘉木 发表于 2022-4-10 22:33
还是不行

用and连
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-4-11 14:20:58 | 显示全部楼层
delmen这个名字你没有声明
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-11 21:09:35 | 显示全部楼层
你70行的代码修复了吗?在线学习。你的字典的建立和写入,我不是很懂,明明逻辑很正确都是,我自己操作就是会出错
  1. a = {}
  2. a = a.update({'1':{'2':'l','3':'k'}})
  3. a
  4. a ='这里a怎么没有东西'
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-12 17:01:23 | 显示全部楼层    本楼为最佳答案   
兄弟,你的代码,我给你优化了
你自己看看
  1. import os
  2. import pickle

  3. if not os.path.exists('E:/通讯.pkl'):
  4.     with open('E:/通讯.pkl', 'wb') as f:
  5.         pickle.dump({},f)
  6. else:
  7.     with open('E:/通讯.pkl', 'rb') as f:
  8.         book = pickle.load(f)


  9. def entering(book):
  10.     print("-----录入模式-----")
  11.     name = input("请输入用户名:")
  12.     if name in book:  # 穿插修改部分
  13.         name = int(input("电话簿中已有{}用户,是否修改?(是1/否2)".format(name)))
  14.         if name != 1:
  15.             print("已结束本轮")
  16.         elif name == 1:
  17.             s = 1
  18.             while s:
  19.                 nam = input("请输入要修改的用户名:")
  20.                 if nam not in book:
  21.                     nam = input('用户不存在,请重新输入要修改的用户名:')
  22.                 choice = int(input("请问修改哪一项(按1性别,按2电话号码,按3家庭住址,按0退出):"))
  23.                 if choice not in [1, 2, 3, 0]:
  24.                     print("请按要求输入!!!")
  25.                     s = 1
  26.                     continue
  27.                 elif choice == 0:
  28.                     print("已结束本轮循环")
  29.                     s = 0
  30.                 else:
  31.                     book[nam][choice_list[choice]] = input("请输入{}的修改值:".format(choice_list[choice]))
  32.                     s = input("是否继续修改,需要按0,不需要随意:")
  33.                     if s == '0':
  34.                         s = 1
  35.                         continue
  36.                     else:
  37.                         s = 0
  38.             print("-----修改完毕-----")
  39.             with open('E:/通讯.pkl', 'wb') as f:
  40.                 pickle.dump(book, f)
  41.     else:
  42.         gender = int(input("{}性别(男1/女2/未知3):".format(name)))
  43.         while gender not in [1, 2, 3]:
  44.             print("请正确输入!!!")
  45.             gender = int(input("{}性别(男1/女2/未知3):".format(name)))
  46.             if gender in [1, 2, 3]:
  47.                 break
  48.         if gender == 3:
  49.             gender = "未知"
  50.         elif gender == 2:
  51.             gender = "女"
  52.         else:
  53.             gender = "男"
  54.         phonenum = input("{}的电话号码:".format(name))
  55.         while len(phonenum) != 11:
  56.             print("电话号码的长度为8或11位,请重新输入!!!")
  57.             phonenum = input("{}的电话号码:".format(name))
  58.             if len(phonenum) == 11:
  59.                 break
  60.         home = input("{}的家庭住址(若未知按1):".format(name))
  61.         if home == '1':
  62.             home = '未知'
  63.         book[name] = {'用户名': name, '性别': gender, '电话号码': phonenum, '家庭住址': home}

  64.         print("-----录入完毕-----")
  65.         with open('E:/通讯.pkl', 'wb') as f:
  66.             pickle.dump(book, f)
  67.     return book

  68. '''豆嘉木电话簿'''

  69. print("-------欢迎使用豆嘉木电话簿-------")

  70. choice_list = [0, '性别', '电话号码', '家庭住址']
  71. while True:
  72.     p = int(input("按1是录入,按2是查询按,按3是删除,按0退出:"))  # 录入部分
  73.     if p not in [1, 2, 3, 0]:
  74.         print("请按要求输入!!!")
  75.     elif p == 1:
  76.         entering(book)

  77.     elif p == 2:
  78.         print("-----查询模式-----")
  79.         check = input("请输入查询对象的名称:")
  80.         if check not in book:
  81.             while 1:
  82.                 check = int(input("%s不在电话簿中,请问是否增加联系人(是1/否2):"%check))
  83.                 if check == 1:
  84.                     entering(book)
  85.                     break
  86.                 else:
  87.                     break
  88.         else:
  89.             print('用户名:%s \n性别:%s \n电话号码:%s \n家庭住址:%s'%(book[check]['用户名'], book[check]['性别'],
  90.                                                               book[check]['电话号码'], book[check]['家庭住址']))
  91.     elif p == 3:
  92.         print("-----删除模式-----")
  93.         delmem = input("需要删除哪一个用户(退出按0):")
  94.         if delmem == 0:
  95.             print("-----退出删除模式-----")
  96.         elif delmem not in book:
  97.             delmem = int(input("%s不在电话簿中,请问是否增加联系人(是1/否2):" %delmem))
  98.             if delmem == 1:
  99.                 entering(book)
  100.         else:
  101.             del book[delmem]
  102.         with open('E:/通讯.pkl', 'wb') as f:
  103.             pickle.dump(book, f)
  104.         print("-----删除完毕-----")

  105.     elif p == 0:
  106.         print("-----程序终止-----")
  107.         break
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-12 21:55:10 | 显示全部楼层
半岛铁盒python 发表于 2022-4-11 14:20
delmen这个名字你没有声明

嗯是的,现在修复了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-12 21:56:21 | 显示全部楼层
QQ小鱼 发表于 2022-4-12 17:01
兄弟,你的代码,我给你优化了
你自己看看

兄弟谢谢,我还没学到永久储存。不过已经修复了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-13 09:25:28 | 显示全部楼层
豆嘉木 发表于 2022-4-12 21:56
兄弟谢谢,我还没学到永久储存。不过已经修复了


你要把O和0分清楚,你对字典很熟悉啊!我在你身上学到了不少,很有想法的程序
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-29 08:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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