鱼C论坛

 找回密码
 立即注册
查看: 1375|回复: 14

[已解决]求助—用户登录程序

[复制链接]
发表于 2020-6-26 20:51:44 | 显示全部楼层 |阅读模式

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

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

x
求助~该程序是小甲鱼第26课课后动手题,题目如下:
https://fishc.com.cn/forum.php?m ... peid%26typeid%3D398

问题:我的代码无法正确执行所有指令,请问是最后的menu函数的问题嘛~
login_dict={}
def newuser():
    name=input('请输入用户名:')
            
    while name in login_dict:
        name=input('该昵称已被占用,请重新输入:')
        
    else:
        code=input('请输入密码:')
        login_dict[name]=code
        print('已注册成功,请登录')
    return menu()
    
def olduser():
    name=input('请输入用户名:')
    while name not in login_dict:
        name=input('该用户不存在请重新输入:')
    else:
        code=input('请输入密码:')
        while code!=login_dict[name]:
            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()
最佳答案
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'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[name]=code
        print('已注册成功,请登录')
    return menu()
    
def olduser():
    name=input('请输入用户名:')
    while name not in login_dict:
        name=input('该用户不存在请重新输入:')
    else:
        code=input('请输入密码:')
        while code!=login_dict[name]:
            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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 21:00:23 | 显示全部楼层
写代码绝对不可以偷懒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-26 21:02:52 | 显示全部楼层
            if x in 'Nn':
                newuser()
            if x in 'Ee':
                olduser()
            if x in 'Qq':
                break
这样就可以
==优先级高于or
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-6-27 10:32:36 | 显示全部楼层
qiuyouzhi 发表于 2020-6-26 20:53
是的,不可以偷懒,必须要写完整(if x == "E" or x == "e")

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

使用道具 举报

 楼主| 发表于 2020-6-27 10:33:16 | 显示全部楼层
Twilight6 发表于 2020-6-26 20:57
这里错了,后面几个也是一样,你这里判断条件  x=='N' or 'n'   ,Python 会认为你是要判断 ( x=='N') ...

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

使用道具 举报

 楼主| 发表于 2020-6-27 10:34:09 | 显示全部楼层
redforce 发表于 2020-6-26 21:02
这样就可以
==优先级高于or

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

使用道具 举报

 楼主| 发表于 2020-6-27 10:34:55 | 显示全部楼层
xiaofeiyu 发表于 2020-6-26 21:00
写代码绝对不可以偷懒

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

使用道具 举报

发表于 2020-6-27 10:35:08 | 显示全部楼层


~ 没事  加油!~

                               
登录/注册后可看大图

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

使用道具 举报

发表于 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[name] = 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[name] == input('请输入密码:'):
                                        print('欢迎进入XXOO系统,请点击右上角结束程序!')
        if 'Q' in zhiling or 'q' in zhiling:
                while True:
                        print('希望下次再见!')
                        break
qq()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-19 08:27:59 | 显示全部楼层
为了梦想而努力 发表于 2020-12-22 19:42
不知道我这样写你能看懂不 只有三十行代码 不知道有没有漏洞
i = dict()
def qq():

应该是有的,我测的是有的,在正常登陆后是还会不断要求输入用户名和密码,这个问题我好像之前也遇到过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 14:38:10 | 显示全部楼层
qiuyouzhi 发表于 2020-6-26 20:53
是的,不可以偷懒,必须要写完整(if x == "E" or x == "e")

密码错误之后会陷入死循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[name]=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[name]:
                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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 14:57:01 | 显示全部楼层
qiuyouzhi 发表于 2021-2-25 14:44
你自己不能改一下吗..很简单的

初学者,还在学习,没你厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-17 12:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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