云鹿 发表于 2020-6-26 20:51:44

求助—用户登录程序

求助~该程序是小甲鱼第26课课后动手题,题目如下:
https://fishc.com.cn/forum.php?mod=viewthread&tid=45159&extra=page%3D1%26filter%3Dtypeid%26typeid%3D398

问题:我的代码无法正确执行所有指令,请问是最后的menu函数的问题嘛~
login_dict={}
def newuser():
    name=input('请输入用户名:')
            
    while name in login_dict:
      name=input('该昵称已被占用,请重新输入:')
      
    else:
      code=input('请输入密码:')
      login_dict=code
      print('已注册成功,请登录')
    return menu()
   
def olduser():
    name=input('请输入用户名:')
    while name not in login_dict:
      name=input('该用户不存在请重新输入:')
    else:
      code=input('请输入密码:')
      while code!=login_dict:
            print('密码错误请重新输入')
      else:
            print('欢迎进入程序,请点右上角的X结束程序!')
    return menu()
            
def menu():
   
    while 1:
      print(end='\n')
      print('|---新建用户:N/n---|')
      print('|---登录账号:E/e---|')
      print('|---退出程序:Q/q---|')
      x=input('|---请输入指令代码:')
      while x not in 'NnEeQq':
            x=input('您输入的代码错误,请重新输入:')
      else:
            if x=='N' or 'n':
                newuser()
                  
            if x=='E' or 'e':
                olduser()

            if x=='Q' or 'q':
                break
menu()

qiuyouzhi 发表于 2020-6-26 20:53:21

是的,不可以偷懒,必须要写完整(if x == "E" or x == "e")
login_dict={}
def newuser():
    name=input('请输入用户名:')
            
    while name in login_dict:
      name=input('该昵称已被占用,请重新输入:')
      
    else:
      code=input('请输入密码:')
      login_dict=code
      print('已注册成功,请登录')
    return menu()
   
def olduser():
    name=input('请输入用户名:')
    while name not in login_dict:
      name=input('该用户不存在请重新输入:')
    else:
      code=input('请输入密码:')
      while code!=login_dict:
            print('密码错误请重新输入')
      else:
            print('欢迎进入程序,请点右上角的X结束程序!')
    return menu()
            
def menu():
   
    while 1:
      print(end='\n')
      print('|---新建用户:N/n---|')
      print('|---登录账号:E/e---|')
      print('|---退出程序:Q/q---|')
      x=input('|---请输入指令代码:')
      while x not in 'NnEeQq':
            x=input('您输入的代码错误,请重新输入:')
      else:
            if x=='N' or x == 'n':
                newuser()
                  
            if x=='E' or x == 'e':
                olduser()

            if x=='Q' or x == 'q':
                break
menu()

Twilight6 发表于 2020-6-26 20:57:45

本帖最后由 Twilight6 于 2020-6-26 21:05 编辑

else:
            if x=='N' or 'n':
                newuser()


这里错了,后面几个也是一样,你这里判断条件x=='N' or 'n'   ,Python 会认为你是要判断 ( x=='N')or ('n')

而 'n'字符串只要不为空就是真 ,所以这里的条件就变成了

( x=='N')or (True)

而 or 只要有一个成立,那么就为 True ,则这里的判断条件 永远都会成立的

所以你要改成x == 'N'or x == 'n'

xiaofeiyu 发表于 2020-6-26 21:00:23

写代码绝对不可以偷懒

redforce 发表于 2020-6-26 21:02:52

            if x in 'Nn':
                newuser()
            if x in 'Ee':
                olduser()
            if x in 'Qq':
                break
这样就可以
==优先级高于or

云鹿 发表于 2020-6-27 10:32:36

qiuyouzhi 发表于 2020-6-26 20:53
是的,不可以偷懒,必须要写完整(if x == "E" or x == "e")

好的 谢谢~

云鹿 发表于 2020-6-27 10:33:16

Twilight6 发表于 2020-6-26 20:57
这里错了,后面几个也是一样,你这里判断条件x=='N' or 'n'   ,Python 会认为你是要判断 ( x=='N') ...

晓得啦~感谢~

云鹿 发表于 2020-6-27 10:34:09

redforce 发表于 2020-6-26 21:02
这样就可以
==优先级高于or

学废了!谢谢~

云鹿 发表于 2020-6-27 10:34:55

xiaofeiyu 发表于 2020-6-26 21:00
写代码绝对不可以偷懒

好的{:10_266:}谢谢

Twilight6 发表于 2020-6-27 10:35:08

云鹿 发表于 2020-6-27 10:33
晓得啦~感谢~


~ 没事加油!~
https://xxx.ilovefishc.com/forum/202005/27/132745rjvcvw1z2148jthd.gif

为了梦想而努力 发表于 2020-12-22 19:42:56

不知道我这样写你能看懂不 只有三十行代码 不知道有没有漏洞
i = dict()
def qq():
      print('|---新建用户N/n---|')
      print('|---登录账号E/e---|')
      print('|---退出程序:Q/q---|')
      zhiling = list(input('|---请输入指令代码:'))
      if 'N' in zhiling or 'n' in zhiling:
                while True:
                        name = input('请输入用户名:')
                        if name in i:
                              print('此用户名已存在请重新输入')
                              continue
                        else:
                              i = input('请输入密码:')
                        print('注册成功,赶紧登录试试吧!')
                        qq()
      if 'E' in zhiling or 'e' in zhiling:
                while True:
                        name = input('请输入用户名:')
                        if name not in i:
                              print('您输入的用户名不存在请重新输入')
                              continue
                        else:
                              if i == input('请输入密码:'):
                                        print('欢迎进入XXOO系统,请点击右上角结束程序!')
      if 'Q' in zhiling or 'q' in zhiling:
                while True:
                        print('希望下次再见!')
                        break
qq()

云鹿 发表于 2021-1-19 08:27:59

为了梦想而努力 发表于 2020-12-22 19:42
不知道我这样写你能看懂不 只有三十行代码 不知道有没有漏洞
i = dict()
def qq():


应该是有的,我测的是有的,在正常登陆后是还会不断要求输入用户名和密码,这个问题我好像之前也遇到过

千霜碎岳 发表于 2021-2-25 14:38:10

qiuyouzhi 发表于 2020-6-26 20:53
是的,不可以偷懒,必须要写完整(if x == "E" or x == "e")

密码错误之后会陷入死循环

qiuyouzhi 发表于 2021-2-25 14:44:59

千霜碎岳 发表于 2021-2-25 14:38
密码错误之后会陷入死循环

你自己不能改一下吗..很简单的
login_dict={}
def newuser():
    name=input('请输入用户名:')
            
    while name in login_dict:
      name=input('该昵称已被占用,请重新输入:')
      
    else:
      code=input('请输入密码:')
      login_dict=code
      print('已注册成功,请登录')
    return menu()
   
def olduser():
    name=input('请输入用户名:')
    while name not in login_dict:
      name=input('该用户不存在请重新输入:')
    else:
      while True:
            code = input('请输入密码:')
            if code != login_dict:
                print('密码错误请重新输入')
            else:
                print('欢迎进入程序,请点右上角的X结束程序!')
                break
    return menu()
            
def menu():
   
    while 1:
      print(end='\n')
      print('|---新建用户:N/n---|')
      print('|---登录账号:E/e---|')
      print('|---退出程序:Q/q---|')
      x=input('|---请输入指令代码:')
      while x not in 'NnEeQq':
            x=input('您输入的代码错误,请重新输入:')
      else:
            if x=='N' or x == 'n':
                newuser()
                  
            if x=='E' or x == 'e':
                olduser()

            if x=='Q' or x == 'q':
                break
menu()

千霜碎岳 发表于 2021-2-25 14:57:01

qiuyouzhi 发表于 2021-2-25 14:44
你自己不能改一下吗..很简单的

初学者,还在学习,没你厉害
页: [1]
查看完整版本: 求助—用户登录程序