豆嘉木 发表于 2022-4-10 20:23:44

代码中有两处问题


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



完整代码如下:

'''豆嘉木电话簿'''

print("-------欢迎使用豆嘉木电话簿-------")
book = {}
man = "男"
woman = "女"
choicelist =

while True:
    p = int(input("录入按1,打印用户列表按2,查询按3,删除按4,退出按0:"))                  #录入部分
    if p != 1 and 2 and 3 and 0:
      print("请按要求输入!!!")
    elif p == 1:
      print("-----录入模式-----")
      name = input("请输入用户名:")
      if name in book:                                                      #穿插修改部分
            o = int(input("电话簿中已有{}用户,是否修改?(是1/否2)".format(name)))
            if 0 == 2:
                print("已结束本轮")
                continue
            elif o == 1:
                while s == 1:
                  choice = int(input("请问修改哪一项(性别按1,电话号码按2,家庭住址按3,退出按0):"))
                  if choice != 1 or 2 or 3 or 0:
                        print("请按要求输入!!!")
                        s = 1
                  elif choice == 0:
                        print("已结束本轮循环")
                        s = 0
                  else:
                        book] = input("请输入{}的修改值:".format(choicelist))
                        s = input("是否继续修改,不需要按0,需要随意:")
                        if s == '0':
                            s = 0
                            continue
                        else:
                            s = 1
                print("-----修改完毕-----")
                continue
      gender = int(input("{}性别(男1/女2/未知3):".format(name)))
      if gender != 1 and 2 and 3:
            print("请正确输入!!!")
            continue
      elif gender == 3:
            gender = "未知"
      elif gender == 2:
            gender = "女"
      else:
            gender = "男"
      phonenum = input("{}的电话号码:".format(name))
      if len(phonenum) != 8 and 11:
            print("电话号码的长度为8或11位,请从头重新输入!!!")
            continue
      home = input("{}的家庭住址(若未知按1):".format(name))
      if home == 1:
            home = "未知"
      book = book.update({name:{"用户名:":name,"性别:":gender,"电话号码:":phonenum,"家庭住址":home}})
      print("-----录入完毕-----")
    elif p == 2:
      print("-----打印模式-----")
      print("电话簿中的用户共有{}位,分别为".format(len(book)))
      menberslen = len(book)
      members = list(book.keys())
      for i in range(0,len(book)):
            print(members)
      print("-----打印完毕-----")
    elif p == 3:
      print("-----查询模式-----")
      check = input("请输入查询对象的名称:")
      if check not in book:
            print("{}不在电话簿中,可先打印用户列表,再重新输入".format(delmem))
      else:
            print("用户名:{} \n性别:{} \n电话号码:{} \n家庭住址:{}".format(book['用户名'],book['性别'],
                                                            book['电话号码'],book['家庭住址']))
    elif p == 4:
      print("-----删除模式-----")
      delmem = input("需要删除哪一个用户(退出按0):")
      if delmem == 0:
            print("-----退出删除模式-----")
      elif delmem not in book:
            print("{}不在电话簿中,可先打印用户列表,再重新输入".format(delmem))
            continue
      else:
            del book
      print("-----删除完毕-----")
    elif p == 0:
      print("-----程序终止-----")
      break

wp231957 发表于 2022-4-10 20:32:54

delmem是啥鸟

豆嘉木 发表于 2022-4-10 20:46:08

wp231957 发表于 2022-4-10 20:32
delmem是啥鸟

变量名

wp231957 发表于 2022-4-10 20:49:24

豆嘉木 发表于 2022-4-10 20:46
变量名

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

豆嘉木 发表于 2022-4-10 20:59:32

第二个报错问题已靠自己修复,第一个问题还没解决

豆嘉木 发表于 2022-4-10 21:01:23

wp231957 发表于 2022-4-10 20:49
但你前面并没有这个变量啊

嗯我自己改好了,刚看到你的,先给你5鱼币{:5_101:},大佬再帮我看看第一个问题,这我是真没看懂

wp231957 发表于 2022-4-10 21:04:55

本帖最后由 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:
??
嗯,不知道你想表达啥,所以不知道咋改

豆嘉木 发表于 2022-4-10 22:33:04

wp231957 发表于 2022-4-10 21:04
if len(phonenum) != 8 and 11:
这个是有问题的,有些想当然
试一试


还是不行

豆嘉木 发表于 2022-4-10 22:52:23

wp231957 发表于 2022-4-10 21:04
if len(phonenum) != 8 and 11:
这个是有问题的,有些想当然
试一试


我把8位的删掉了,暂时解决问题,谢了,5个鱼币给你

wp231957 发表于 2022-4-11 04:50:18

豆嘉木 发表于 2022-4-10 22:33
还是不行

用and连

半岛铁盒python 发表于 2022-4-11 14:20:58

delmen这个名字你没有声明

QQ小鱼 发表于 2022-4-11 21:09:35

你70行的代码修复了吗?在线学习。你的字典的建立和写入,我不是很懂,明明逻辑很正确都是,我自己操作就是会出错a = {}
a = a.update({'1':{'2':'l','3':'k'}})
a
a ='这里a怎么没有东西'

QQ小鱼 发表于 2022-4-12 17:01:23

兄弟,你的代码,我给你优化了
你自己看看
import os
import pickle

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


def entering(book):
    print("-----录入模式-----")
    name = input("请输入用户名:")
    if name in book:# 穿插修改部分
      name = int(input("电话簿中已有{}用户,是否修改?(是1/否2)".format(name)))
      if name != 1:
            print("已结束本轮")
      elif name == 1:
            s = 1
            while s:
                nam = input("请输入要修改的用户名:")
                if nam not in book:
                  nam = input('用户不存在,请重新输入要修改的用户名:')
                choice = int(input("请问修改哪一项(按1性别,按2电话号码,按3家庭住址,按0退出):"))
                if choice not in :
                  print("请按要求输入!!!")
                  s = 1
                  continue
                elif choice == 0:
                  print("已结束本轮循环")
                  s = 0
                else:
                  book] = input("请输入{}的修改值:".format(choice_list))
                  s = input("是否继续修改,需要按0,不需要随意:")
                  if s == '0':
                        s = 1
                        continue
                  else:
                        s = 0
            print("-----修改完毕-----")
            with open('E:/通讯.pkl', 'wb') as f:
                pickle.dump(book, f)
    else:
      gender = int(input("{}性别(男1/女2/未知3):".format(name)))
      while gender not in :
            print("请正确输入!!!")
            gender = int(input("{}性别(男1/女2/未知3):".format(name)))
            if gender in :
                break
      if gender == 3:
            gender = "未知"
      elif gender == 2:
            gender = "女"
      else:
            gender = "男"
      phonenum = input("{}的电话号码:".format(name))
      while len(phonenum) != 11:
            print("电话号码的长度为8或11位,请重新输入!!!")
            phonenum = input("{}的电话号码:".format(name))
            if len(phonenum) == 11:
                break
      home = input("{}的家庭住址(若未知按1):".format(name))
      if home == '1':
            home = '未知'
      book = {'用户名': name, '性别': gender, '电话号码': phonenum, '家庭住址': home}

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

'''豆嘉木电话簿'''

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

choice_list =
while True:
    p = int(input("按1是录入,按2是查询按,按3是删除,按0退出:"))# 录入部分
    if p not in :
      print("请按要求输入!!!")
    elif p == 1:
      entering(book)

    elif p == 2:
      print("-----查询模式-----")
      check = input("请输入查询对象的名称:")
      if check not in book:
            while 1:
                check = int(input("%s不在电话簿中,请问是否增加联系人(是1/否2):"%check))
                if check == 1:
                  entering(book)
                  break
                else:
                  break
      else:
            print('用户名:%s \n性别:%s \n电话号码:%s \n家庭住址:%s'%(book['用户名'], book['性别'],
                                                            book['电话号码'], book['家庭住址']))
    elif p == 3:
      print("-----删除模式-----")
      delmem = input("需要删除哪一个用户(退出按0):")
      if delmem == 0:
            print("-----退出删除模式-----")
      elif delmem not in book:
            delmem = int(input("%s不在电话簿中,请问是否增加联系人(是1/否2):" %delmem))
            if delmem == 1:
                entering(book)
      else:
            del book
      with open('E:/通讯.pkl', 'wb') as f:
            pickle.dump(book, f)
      print("-----删除完毕-----")

    elif p == 0:
      print("-----程序终止-----")
      break

豆嘉木 发表于 2022-4-12 21:55:10

半岛铁盒python 发表于 2022-4-11 14:20
delmen这个名字你没有声明

嗯是的,现在修复了

豆嘉木 发表于 2022-4-12 21:56:21

QQ小鱼 发表于 2022-4-12 17:01
兄弟,你的代码,我给你优化了
你自己看看

兄弟谢谢,我还没学到永久储存。不过已经修复了

QQ小鱼 发表于 2022-4-13 09:25:28

豆嘉木 发表于 2022-4-12 21:56
兄弟谢谢,我还没学到永久储存。不过已经修复了

你要把O和0分清楚,你对字典很熟悉啊!我在你身上学到了不少,很有想法的程序
页: [1]
查看完整版本: 代码中有两处问题