鱼C论坛

 找回密码
 立即注册
查看: 1138|回复: 2

[已解决]字典课后作业问题求助

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

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

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

x
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没定义是啥意思???)
最佳答案
2021-10-12 17:52:47
本帖最后由 suchocolate 于 2021-10-12 18:11 编辑

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


  1. contact = {'林声宇': '19679930915', '符淑莲': '13876116083', '小甲鱼': '23456'}
  2. while True:
  3.     print('')
  4.     print('|--- 新建用户:A ---|')
  5.     print('|--- 登录账号:B  ---|')
  6.     print('|--- 退出程序:C  ---|')
  7.     instr = input("\n请输入相关指令:")
  8.     if instr in ['a', 'A']:
  9.         name = input('请输入用户姓名:')
  10.         while True:
  11.             if name in contact:
  12.                 name = input('此用户名已经被使用,请重新输入:')
  13.             else:
  14.                 contact[name] = input("请输入密码:")
  15.                 print("注册成功,赶紧试试登录吧!")
  16.                 break
  17.     elif instr in ['b', 'B']:
  18.         name = input('请输入用户姓名:')
  19.         while True:
  20.             if name not in contact:
  21.                 name = input('此用户名不存在,请重新输入:')
  22.             else:
  23.                 if contact[name] == input("请输入密码:"):
  24.                     print("登录成功!")
  25.                     break
  26.                 else:
  27.                     print("密码不正确!")
  28.     elif instr in ['c', 'C']:
  29.         print("退出程序")
  30.         exit(0)

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-12 17:52:47 | 显示全部楼层    本楼为最佳答案   
本帖最后由 suchocolate 于 2021-10-12 18:11 编辑

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


  1. contact = {'林声宇': '19679930915', '符淑莲': '13876116083', '小甲鱼': '23456'}
  2. while True:
  3.     print('')
  4.     print('|--- 新建用户:A ---|')
  5.     print('|--- 登录账号:B  ---|')
  6.     print('|--- 退出程序:C  ---|')
  7.     instr = input("\n请输入相关指令:")
  8.     if instr in ['a', 'A']:
  9.         name = input('请输入用户姓名:')
  10.         while True:
  11.             if name in contact:
  12.                 name = input('此用户名已经被使用,请重新输入:')
  13.             else:
  14.                 contact[name] = input("请输入密码:")
  15.                 print("注册成功,赶紧试试登录吧!")
  16.                 break
  17.     elif instr in ['b', 'B']:
  18.         name = input('请输入用户姓名:')
  19.         while True:
  20.             if name not in contact:
  21.                 name = input('此用户名不存在,请重新输入:')
  22.             else:
  23.                 if contact[name] == input("请输入密码:"):
  24.                     print("登录成功!")
  25.                     break
  26.                 else:
  27.                     print("密码不正确!")
  28.     elif instr in ['c', 'C']:
  29.         print("退出程序")
  30.         exit(0)

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

使用道具 举报

 楼主| 发表于 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("欢迎进入系统!")

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-1 21:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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