Python分支题型练习(1.0 用户身份验证)

Python 分支题型练习

应用案例一:用户身份验证

题目要求:

该用户身份验证有俩个文件,一个为lock文件,该文件中的账户名不允许登录,另一个为user文件,该文件中存储的是可以进行登录的账户名和密码,要求用户最多有三次输入账户名的机会,当输入的账户名为锁定账户时,直接退出程序并提示该账户被锁定,当在三次内输入正确账户名后,可以继续账户密码,密码的输入也有三次机会,三次内密码正确,显示登录成功,三次内密码均不对,将账户锁定并写进lock文件。

题目分析:

该题目流程图如下:
在这里插入图片描述

题目代码:

"""
题目:用户身份认证
作者:假书生@
日期:2020年1月7日
"""
import sys     #导入sys模块,作用于解释器
i = 0          #设置i变量为3,初始化输入次数
while i < 3:   #当i小于3时,退出循环
    print("\033[33m 欢迎来到用户登录系统:\033[0m".center(40)) #设置主页面
    account = str(input("\033[33m 请输入您的账号:\033[0m".center(20)))#使用input接收到用户输入的账户名
    with open("C:\\lock.txt",'r+') as lock_line:  #打开账户锁定文件
        lock_line = lock_line.readlines()         #获取账户锁定文件的行数
        for lock in lock_line:                    #将每一行的数据赋给lock进行循环
            lock = lock.strip('\n')               #将数据两边的回车清掉
            if account == lock:              #如果用户输入的账户名是锁定文件里的
                sys.exit("{}用户已经被锁定,请切换用户".format(lock))  #退出程序并提示账户被锁定
    with open("C:\\user.txt",'r') as user_lines:    #如果没有锁定账户,打开注册账号文件
        user_lines = user_lines.readlines()     #获取注册账号文件中的内容
        for a in user_lines:         #将文件中的内容作为每一行的数据进行循环
            user,passwd = a.strip('\n').split() #获取到每一行的账号名和密码
            if account == user:  #当账号名存在时

                j = 0             #设置用户输入密码的次数
                while j < 3 :     #当j < 3 时
                    user_password = (input("\033[33m 请输入您的密码:\033[0m".center(20))) #获取到用户输入的密码
                    if user_password == passwd:        #如果用户输入的密码与文件中的密码一致时
                        print("\033[33m 登录成功,{}用户 \033[0m".format(user))  #输出页面,提示登录成功,并退出程序
                        sys.exit()
                    else:
                        if j != 2:   #当用户输入次数小于3次时
                            print('用户 %s 密码错误,请重新输入,还有 %d 次机会' % (user, 2 - j))#提示用户还有几次机会输入密码
                    j += 1   #已输入的次数加一
                else:
                    with open("C:\\lock.txt", 'a') as lock_line:#如果用户输入的次数达到上限,打开锁定用户文件,将账号名写入
                        lock_line.write(user+"\n")
                        sys.exit("您的输入有误,{}将被锁定".format(user))


    if i != 2:  # i=2时,是最后一次机会,不用在提示还剩余0次机会了    #如果输入的账户名不到三次
        print('用户 %s 不存在,请重新输入,还有 %d 次机会' % (account, 2 - i)) # 提示剩余输入次数
        i += 1   # 用户输入账户名的次数加一
    else:
        sys.exit("退出系统")   #退出系统

lock文件内容:

在这里插入图片描述

user文件内容

在这里插入图片描述

代码检测:

当输入锁定账户时:

          欢迎来到用户登录系统:          
  请输入您的账号: 小李
小李用户已经被锁定,请切换用户

当输入正确用户和密码时

          欢迎来到用户登录系统:          
  请输入您的账号: 小华
  请输入您的密码: 123
 登录成功,小华用户 

当输入正确的用户但是三次密码错误时:

          欢迎来到用户登录系统:          
  请输入您的账号: 小华
  请输入您的密码: 12
用户 小华 密码错误,请重新输入,还有 2 次机会
  请输入您的密码: 12
用户 小华 密码错误,请重新输入,还有 1 次机会
  请输入您的密码: 12
您的输入有误,小华将被锁定

当用户名三次输入错误:

          欢迎来到用户登录系统:          
  请输入您的账号: 小周
小周用户不存在,剩余2次机会
          欢迎来到用户登录系统:          
  请输入您的账号: 小王
小王用户不存在,剩余1次机会
          欢迎来到用户登录系统:          
  请输入您的账号: 小童
退出系统
发布了44 篇原创文章 · 获赞 57 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45144837/article/details/103880727
今日推荐