鱼C论坛

 找回密码
 立即注册
查看: 1571|回复: 6

[已解决]关于python第41课后作业再次向各位老师求助

[复制链接]
发表于 2022-6-15 19:41:17 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 caeser 于 2022-6-15 19:40 编辑

各位老师,再次求助:
登陆时如果输入密码错误,再次输入成功后,可以正常退出。如图:
1.png

但登陆时,如果没有密码输错,退出时,反而成了死循环了,一直出现登陆界面,如下图:
2.png



register_dict={'adm':'123'}

print("欢迎来到鱼C论坛")


def get_int(): # 获取用户指令函数
    print("""
==============
1.注册
2.登录
3.退出
             """)

    global num
    num = int(input("请输入指令: "))
    while num > 0 :
        if num == 1:
            register()
        elif num == 2:
            login()
        elif num == 3:
            break
    


def login():#登录函数
    login_name = input("请输入用户名:")
    n=0
    while n ==0:
        for each_n in list(register_dict.keys()):
                n=0
                if login_name ==  each_n:
                    n = 1
        if n != 1:
             print("该用户名不存在。","\n")
             login_name = input("请重新输入用户名:")
            
    login_password = input("请输入密码:")

    

    p = 0
    while p == 0:
        for  each_p in register_dict:
            v = register_dict.get(each_p)
            
            if v == login_password:
                print("恭喜,登录成功~")
                get_int()
            else:
                p = 1
                print("密码错误")
                login_password = input("请重新输入密码:")
    
           
        
    
    

def register():# 注册函数
    
    name = input("请输入用户名:")
    password = input("请输入密码:")
    
    encrypt(name,password)
    
    

def encrypt(x,y):# 存放用户名和密码函数
    #keys = register_dict.keys()
    
    for each in list(register_dict.keys()):
        if each == x:
            print("用户名已经存在:请重新注册")
            register()
    register_dict[x] = y
    
    print("恭喜,注册成功")
    get_int()

get_int()

    
最佳答案
2022-6-16 14:05:47
    while p == 0:
        for  each_p in register_dict:
            v = register_dict.get(each_p)
            if v == login_password:
                print("恭喜,登录成功~")
                get_int()
                return #加个结束语
            else:
                p = 1
                print("密码错误")
                login_password = input("请重新输入密码:")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-15 21:21:34 | 显示全部楼层
本帖最后由 jackz007 于 2022-6-15 21:23 编辑
register_dict = {'adm':'123'}

def login():
    count = 3
    while count:
        name = input("请输入用户名:") . strip()
        if name in register_dict . keys():
            passwd = input("请输入密码:") . strip()
            if register_dict[name] == passwd:
                print('用户 [' , name , '] 成功登录')
                break
            else:
                print('密码错误')
        else:
            print('用户 [' , name , '] 不存在\n')
        count -= 1

def register():
    r = True
    while r:
        name = input("请输入用户名:") . strip()
        if name and not name in register_dict . keys():
             while r:
                 passwd = input("请输入密码:") . strip()
                 if passwd:
                     register_dict[name] = passwd
                     print('成功创建用户 [' , name , ']\n')
                     r = False
                 else:
                     print('密码不可以为空\n')
        else:
            print('用户 [' , name , '] 已经存在\n')
            r = False

def menu(): # 获取用户指令函数
    while True:
        print("""
==============
1.注册
2.登录
3.退出
             """)
        
        num = int(input("请输入指令: "))
        if num == 1:
            register()
        elif num == 2:
            login()
        elif num == 3:
            break

print("欢迎来到鱼C论坛")    
menu()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-16 01:21:50 | 显示全部楼层
用exit()不好吗?
register_dict={'adm':'123'}

print("欢迎来到鱼C论坛")


def get_int(): # 获取用户指令函数
    print("""
==============
1.注册
2.登录
3.退出
             """)

    num = int(input("请输入指令: "))
    while num > 0 :
        if num == 1:
            register()
        elif num == 2:
            login()
        elif num == 3:
            exit()
    


def login():#登录函数
    login_name = input("请输入用户名:")
    n=0
    while n ==0:
        for each_n in list(register_dict.keys()):
                n=0
                if login_name ==  each_n:
                    n = 1
        if n != 1:
             print("该用户名不存在。","\n")
             login_name = input("请重新输入用户名:")
            
    login_password = input("请输入密码:")

    

    p = 0
    while p == 0:
        for  each_p in register_dict:
            v = register_dict.get(each_p)
            
            if v == login_password:
                print("恭喜,登录成功~")
                get_int()
            else:
                p = 1
                print("密码错误")
                login_password = input("请重新输入密码:")
    
           
        
    
    

def register():# 注册函数
    
    name = input("请输入用户名:")
    password = input("请输入密码:")
    
    encrypt(name,password)
    
    

def encrypt(x,y):# 存放用户名和密码函数
    #keys = register_dict.keys()
    
    for each in list(register_dict.keys()):
        if each == x:
            print("用户名已经存在:请重新注册")
            register()
    register_dict[x] = y
    
    print("恭喜,注册成功")
    get_int()

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

使用道具 举报

发表于 2022-6-16 08:48:40 | 显示全部楼层
还在学习中,还看不懂那么多函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-16 14:05:47 | 显示全部楼层    本楼为最佳答案   
    while p == 0:
        for  each_p in register_dict:
            v = register_dict.get(each_p)
            if v == login_password:
                print("恭喜,登录成功~")
                get_int()
                return #加个结束语
            else:
                p = 1
                print("密码错误")
                login_password = input("请重新输入密码:")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-17 13:45:11 | 显示全部楼层

非常感谢老师的付出,您写的代码比我精炼多了。但我想要的是我的代码到底哪里出错了,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-17 13:46:06 | 显示全部楼层

用exit(),退出的时候老是有一个提示,所以就么有用,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 21:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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