鱼C论坛

 找回密码
 立即注册
查看: 1626|回复: 4

[已解决]小甲鱼26讲课后题

[复制链接]
发表于 2020-9-15 22:25:37 | 显示全部楼层 |阅读模式

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

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

x
Urse = {}
def User_account():
    while True:
        command = input('---新建用户N/n---'
                        '---登录账户E/e---'
                        '---退出程序Q/q---'
                        '---请输入指令代码:')

        if command == 'n':
            New_Urse_name = input('请输入用户名')

            if New_Urse_name in Urse:
                print('此用户名已存在重新输入')
                continue
            else:
                password = input('请输入密码')
                Urse[New_Urse_name] = password
                print('注册成功,赶紧试试登录吧')
                command = input()
        if command == 'E' or 'e':
            while True:
                Urse_name = input('请输入用户名')
                Urse.get(Urse_name,'您输入的用户不存在请重新输入')
                if Urse_name in Urse:
                    times = 3
                    password = input('请输入密码')
                    if Urse[Urse_name] == password:
                        print('登录成功')
                        continue

                else:
                    times -= 1
                    password = input('密码错误,请重新输入')
                    print('您还有%d次机会'% (times))
                    continue
                    if times == 0:
                        print('次数已用,您是否忘记密码')
                        break

        if command == 'Q' or 'q':
            print('已退出')

为什么我输入a的时候竟然会进入 到
                else:
                    times -= 1
                    password = input('密码错误,请重新输入')
                    print('您还有%d次机会'% (times))
                    continue

---新建用户N/n------登录账户E/e------退出程序Q/q------请输入指令代码:a
请输入用户名123
Traceback (most recent call last):
  File "D:/py文件/求助解答文件/用户登录系统.py", line 42, in <module>
    User_account()
  File "D:/py文件/求助解答文件/用户登录系统.py", line 32, in User_account
    times -= 1
UnboundLocalError: local variable 'times' referenced before assignment
以上是报错

条件判断不是我所想的那样,好比if command == 'q' or 'Q',就算我从来没有输入过d,输入到一次两次就可以进入这个条件

以上代码还存在众多问题,我都重写了


最佳答案
2020-9-16 05:15:32
粗略的看了下,存在以下几个问题:

一、if 判断太多,可以使用 if...elif...else... 多条件分支语句

二、类似   if command == 'E' or 'e':
      之类的判断没有考虑优先级,可以使用
      command == 'E' or command == 'e':
      这种类型的判断

三、写代码之前记得理清楚逻辑关系,可以使用思维导图或者流程图
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-9-15 22:33:27 | 显示全部楼层
  1. if command == 'q' or 'Q'
复制代码

这句话的意思是
  1. if command == 'q'
复制代码
或者
  1. if  'Q'
复制代码

  1. if  'Q'
复制代码
一直是真的
真或假,取真,所以这句判断就一直判断为真
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-15 22:58:36 | 显示全部楼层
本帖最后由 疾风怪盗 于 2020-9-15 23:36 编辑
  1. def New_User_account():
  2.     New_Urse_name = input('请输入用户名')
  3.     if New_Urse_name in Urse.keys():
  4.         print('此用户名已存在重新输入')

  5.     else:
  6.         password = input('请输入密码')
  7.         Urse[New_Urse_name] = password
  8.         print('注册成功,赶紧试试登录吧')


  9. def Check_User_account():
  10.     times = 3
  11.     while times > 0:
  12.         Urse_name = input('请输入用户名')
  13.         if Urse_name in Urse.keys():
  14.             return Check_psw(Urse_name)
  15.         else:
  16.             times -= 1
  17.             print('您输入的用户不存在请重新输入,您还有%d次机会' % (times))
  18.     else:
  19.         print('次数已用,您是否忘记用户名或密码')
  20.         return False


  21. def Check_psw(Urse_name):
  22.     times = 3
  23.     while times > 0:
  24.         password = input('请输入密码')
  25.         if Urse[Urse_name] == password:
  26.             print('登录成功')
  27.             return False
  28.         else:
  29.             times -= 1
  30.             print('您还有%d次机会' % (times))


  31. Urse = {'111': '111'}
  32. a = True
  33. while a:
  34.     command = input('---新建用户N/n---\n'
  35.                     '---登录账户E/e---\n'
  36.                     '---退出程序Q/q---\n'
  37.                     '---请输入指令代码:')
  38.     if command == 'Q' or command == 'q':
  39.         print('已退出')
  40.         break
  41.     elif command == 'N' or command == 'n':
  42.         New_User_account()
  43.     elif command == 'E' or command == 'e':
  44.         a = Check_User_account()
  45.     else:
  46.         print('指令无效,重新输入')

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

使用道具 举报

发表于 2020-9-16 05:15:32 | 显示全部楼层    本楼为最佳答案   
粗略的看了下,存在以下几个问题:

一、if 判断太多,可以使用 if...elif...else... 多条件分支语句

二、类似   if command == 'E' or 'e':
      之类的判断没有考虑优先级,可以使用
      command == 'E' or command == 'e':
      这种类型的判断

三、写代码之前记得理清楚逻辑关系,可以使用思维导图或者流程图
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-16 09:01:27 | 显示全部楼层
  1. if command == 'Q' or 'q':
复制代码

这句不能达到你的预期效果, 'Q' or 'q', 因为'Q'本来就是真值,所以直接返回Q,你这句就相当于:
  1. if command == 'Q':
复制代码

要达到你的效果需要写成:
  1. if command == 'Q' or command == 'q':
复制代码

或者:
  1. if command in ('Q', 'q'):
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 05:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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