鼻屎炖蘑菇 发表于 2021-10-12 17:03:31

字典课后作业问题求助

print('|--- 新建用户:A ---|')
print('|--- 登录账号:B---|')
print('|--- 退出程序:C---|')


contact={'林声宇':'19679930915','符淑莲':'13876116083','小甲鱼':'23456'}
instr=(input("\n请输入相关指令:"))
if instr=='A':
       name = input('请输入用户姓名:')
while True:
      if name in contact:
         name=input("此用户名已经被使用,请重新输入:")
         key = input("请输入密码:")
         contact.setdefault(name, key)
         break
      else:
         key=input("请输入密码:")
         contact.setdefault(name,key)
         break
print("注册成功,赶紧试试登录吧!")
if instr == 'B':
   name = input('请输入联系人姓名:')
   while True:
       if name not in contact:
         name=input("此用户名不存在,请重新输入:")
         continue
       else:
         break
   key=input("请输入密码:")
   pwd=contact.get(name)
   if key==pwd:
            print("欢迎进入系统!")
   else:
         print("密码错误!")
if instr == 'C':
    print("欢迎进入系统!")
--------------------------------------------
运行:
Traceback (most recent call last):
File "E:/_Keil uVision3/89997.py", line 11, in <module>
    if name in contact:
NameError: name 'name' is not defined
(求问各位大佬 这里的报错是什么意思呢?为什么我输入指令A就可以运行程序,输入B和C就会报错,name没定义是啥意思???)

suchocolate 发表于 2021-10-12 17:52:47

本帖最后由 suchocolate 于 2021-10-12 18:11 编辑

缩进问题:
if 和while同级了,如果输入的不是A,执行到while里面时,name就没有赋值,所以报错。
应该这样写:


contact = {'林声宇': '19679930915', '符淑莲': '13876116083', '小甲鱼': '23456'}
while True:
    print('')
    print('|--- 新建用户:A ---|')
    print('|--- 登录账号:B---|')
    print('|--- 退出程序:C---|')
    instr = input("\n请输入相关指令:")
    if instr in ['a', 'A']:
      name = input('请输入用户姓名:')
      while True:
            if name in contact:
                name = input('此用户名已经被使用,请重新输入:')
            else:
                contact = input("请输入密码:")
                print("注册成功,赶紧试试登录吧!")
                break
    elif instr in ['b', 'B']:
      name = input('请输入用户姓名:')
      while True:
            if name not in contact:
                name = input('此用户名不存在,请重新输入:')
            else:
                if contact == input("请输入密码:"):
                  print("登录成功!")
                  break
                else:
                  print("密码不正确!")
    elif instr in ['c', 'C']:
      print("退出程序")
      exit(0)

鼻屎炖蘑菇 发表于 2021-10-13 10:41:49

自我解答一波,我写的原程序第一段if和while同级了,所以输入的指令不为A时,会先执行第一段里面的while,但是while里面的if name in contact的name在没有执行instr==A时,name没有被定义,所以会出现报错,name 'name' not difine,因为没有input name,所以第一个while里面的name是没有被定义的。解决方法是将第一段的while等级缩进,缩于if里面,程序便可以执行。
print('|--- 新建用户:A ---|')
print('|--- 登录账号:B---|')
print('|--- 退出程序:C---|')


contact={'林声宇':'19679930915','符淑莲':'13876116083','小甲鱼':'23456'}
instr=(input("\n请输入相关指令:"))
if instr=='A':
       name = input('请输入用户姓名:')
       while True:
         if name in contact:
          name=input("此用户名已经被使用,请重新输入:")
          key = input("请输入密码:")
          contact.setdefault(name, key)
          break
         else:
          key=input("请输入密码:")
          contact.setdefault(name,key)
          break
       print("注册成功,赶紧试试登录吧!")
if instr == 'B':
   name = input('请输入联系人姓名:')
   while True:
       if name not in contact:
         name=input("此用户名不存在,请重新输入:")
         continue
       else:
         break
   key=input("请输入密码:")
   pwd=contact.get(name)
   if key==pwd:
            print("欢迎进入系统!")
   else:
         print("密码错误!")
if instr == 'C':
    print("欢迎进入系统!")

页: [1]
查看完整版本: 字典课后作业问题求助