鱼C论坛

 找回密码
 立即注册
查看: 1601|回复: 5

[已解决]第026讲:字典 课后测试题编写一个用户登录程序

[复制链接]
发表于 2019-12-29 16:50:19 | 显示全部楼层 |阅读模式

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

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

x
在老用户登录账号时如果设置密码连续三次输入错误将被锁定,我的这个for循环语句是不是有问题?就是如果用户输入的用户名密码匹配,成功登录OA系统也会报错”用户锁定,请联系系统管理员!“break应该如何设置比较好?
dict1={}

def new_user():
    
    user=input('请输入用户名:')
    while user in dict1:
        user=input('此用户名已经被使用,请重新输入:')
    password=input('请输入密码:')
    dict1[user]=password
    print('用户注册成功!')
    
def old_user():
    user=input('请输入用户名:')
    if user in dict1:
        for i in range(3):
            password=input('请输入密码:')
            if password==dict1[user]:
                print('欢迎登录OA系统!')
                break 
            else:
                print('密码有误,请核对,连续输错3次密码将被锁定!')
        print('用户锁定,请联系系统管理员!')
    else:
        print('用户名不存在!')
    

def display_list():
    
    while True:
        choice=input('''
       |---新建用户:N/n---|
       |---登录账号:E/e---|
       |---退出程序:Q/q---|
       |请输入指令代码:''')
        if choice in 'NnEeQq':
            if choice=='N' or choice=='n':
                new_user()
            if choice=='E' or choice=='e':
                old_user()
            if choice=='Q' or choice=='q':
                confirm=input('您确认要关闭程序吗?(Y/N)')
                if confirm=='Y':
                    break
                else:
                    continue
        while choice not in 'NnEeQq':
            print('您输入的指令代码错误,请重新输入!')
            break

display_list()
                
最佳答案
2019-12-29 18:26:50
zzong2019 发表于 2019-12-29 18:25
看到了您对我编写的代码做了优化,这个很好,是我没想到的。但是您有没有试验过,对于验证身份通过的用户 ...

是的,疏忽了。这样可以吗?
dict1 = {}
users = {}


def new_user():
    user = input('请输入用户名:')
    while user in dict1:
        user = input('此用户名已经被使用,请重新输入:')
    password = input('请输入密码:')
    dict1[user] = password
    users[user] = False
    print('用户注册成功!')


def old_user():
    user = input('请输入用户名:')
    if user in dict1:
        if users[user]:
            print("用户锁定,请联系系统管理员!")
            return
        for i in range(3):
            password = input('请输入密码:')
            if password == dict1[user]:
                print('欢迎登录OA系统!')
                break
            else:
                print('密码有误,请核对,连续输错 3 次密码将被锁定!')
        else:
            print('用户锁定,请联系系统管理员!')
            users[user] = True
    else:
        print('用户名不存在!')


def display_list():
    while True:
        choice = input('''|---新建用户:N/n---|
|---登录账号:E/e---|
|---退出程序:Q/q---|
请输入指令代码:''')
        if choice in 'NnEeQq':
            if choice == 'N' or choice == 'n':
                new_user()
            if choice == 'E' or choice == 'e':
                old_user()
            if choice == 'Q' or choice == 'q':
                confirm = input('您确认要关闭程序吗?(Y/N)')
                if confirm == 'Y':
                    break
                else:
                    continue
        while choice not in 'NnEeQq':
            print('您输入的指令代码错误,请重新输入!')
            break


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

使用道具 举报

发表于 2019-12-29 17:21:32 | 显示全部楼层
dict1 = {}
users = {}


def new_user():
    user = input('请输入用户名:')
    while user in dict1:
        user = input('此用户名已经被使用,请重新输入:')
    password = input('请输入密码:')
    dict1[user] = password
    users[user] = False
    print('用户注册成功!')


def old_user():
    user = input('请输入用户名:')
    if user in dict1:
        if users[user]:
            print("用户锁定,请联系系统管理员!")
            return
        for i in range(3):
            password = input('请输入密码:')
            if password == dict1[user]:
                print('欢迎登录OA系统!')
                break
            else:
                print('密码有误,请核对,连续输错 3 次密码将被锁定!')
        print('用户锁定,请联系系统管理员!')
        users[user] = True
    else:
        print('用户名不存在!')


def display_list():
    while True:
        choice = input('''|---新建用户:N/n---|
|---登录账号:E/e---|
|---退出程序:Q/q---|
请输入指令代码:''')
        if choice in 'NnEeQq':
            if choice == 'N' or choice == 'n':
                new_user()
            if choice == 'E' or choice == 'e':
                old_user()
            if choice == 'Q' or choice == 'q':
                confirm = input('您确认要关闭程序吗?(Y/N)')
                if confirm == 'Y':
                    break
                else:
                    continue
        while choice not in 'NnEeQq':
            print('您输入的指令代码错误,请重新输入!')
            break


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

使用道具 举报

 楼主| 发表于 2019-12-29 18:25:25 | 显示全部楼层

看到了您对我编写的代码做了优化,这个很好,是我没想到的。但是您有没有试验过,对于验证身份通过的用户,下次再次登录该程序的时候就会提示用户被锁定?因为执行break后还是会跳到 print('用户锁定,请联系系统管理员!');users[user] = True这条语句上啊!
for i in range(3):
            password = input('请输入密码:')
            if password == dict1[user]:
                print('欢迎登录OA系统!')
                break
            else:
                print('密码有误,请核对,连续输错 3 次密码将被锁定!')
        print('用户锁定,请联系系统管理员!')
        users[user] = True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-29 18:26:50 | 显示全部楼层    本楼为最佳答案   
zzong2019 发表于 2019-12-29 18:25
看到了您对我编写的代码做了优化,这个很好,是我没想到的。但是您有没有试验过,对于验证身份通过的用户 ...

是的,疏忽了。这样可以吗?
dict1 = {}
users = {}


def new_user():
    user = input('请输入用户名:')
    while user in dict1:
        user = input('此用户名已经被使用,请重新输入:')
    password = input('请输入密码:')
    dict1[user] = password
    users[user] = False
    print('用户注册成功!')


def old_user():
    user = input('请输入用户名:')
    if user in dict1:
        if users[user]:
            print("用户锁定,请联系系统管理员!")
            return
        for i in range(3):
            password = input('请输入密码:')
            if password == dict1[user]:
                print('欢迎登录OA系统!')
                break
            else:
                print('密码有误,请核对,连续输错 3 次密码将被锁定!')
        else:
            print('用户锁定,请联系系统管理员!')
            users[user] = True
    else:
        print('用户名不存在!')


def display_list():
    while True:
        choice = input('''|---新建用户:N/n---|
|---登录账号:E/e---|
|---退出程序:Q/q---|
请输入指令代码:''')
        if choice in 'NnEeQq':
            if choice == 'N' or choice == 'n':
                new_user()
            if choice == 'E' or choice == 'e':
                old_user()
            if choice == 'Q' or choice == 'q':
                confirm = input('您确认要关闭程序吗?(Y/N)')
                if confirm == 'Y':
                    break
                else:
                    continue
        while choice not in 'NnEeQq':
            print('您输入的指令代码错误,请重新输入!')
            break


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

使用道具 举报

 楼主| 发表于 2019-12-29 18:46:18 | 显示全部楼层
zltzlt 发表于 2019-12-29 18:26
是的,疏忽了。这样可以吗?

成功了,感觉你这个else用的很巧妙,但是您能解读一下嘛?就是for循环三次之后结束的,就证明这个用户三次输错密码,然后还能回到这里嘛?
                             if users[user]:
                                 print("用户锁定,请联系系统管理员!")
                                 return
                             else:
                                  print('用户锁定,请联系系统管理员!')
                                  users[user] = True
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-2-25 15:11:33 | 显示全部楼层
你好,我是一个初学者,这个程序在正确输入用户名密码之后,怎么让它关闭呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 10:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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