• 用户认证的小程序练习


    # -*- coding:utf-8 -*-
    # author:倪周强
    
    import os
    
    users = [['user1', '123'], ['user2', '456'], ['user3', '789']]
    auth_file = os.path.exists('auth_status')
    
    if not auth_file:
        # 如果不存在,那说明是第一次运行程序,就新建一个文件,写上1,表示可以进行验证过程。
        # 写完1,回到首部去读取这个状态值赋给auth_value变量,以便后续判断是否锁定。
        f = open('auth_status', 'w+', encoding='utf-8')
        f.write('1')
        f.seek(0)
        auth_value = f.read()
        f.close()
    else:
        # 如果存在,说明不是第一次运行程序,那就读取文件,把值赋给auth_value变量。
        f = open('auth_status', 'r+', encoding='utf-8')
        auth_value = f.read()
        f.close()
    
    if int(auth_value) == 1:
        # 如果是1,表示可以验证,没有锁定,继续下面的验证过程。
        count = 0
        # 这里的count,我理解为验证失败的次数,而不是验证的次数。
    
        while count < 3:
            # 如果验证失败>=3次,就不会进入循环了。
            user_name = input('请输入用户名:')
            user_password = input('请输入密码:')
    
            for user in users:  # 从列表里取用户信息
                if user_name == user[0] and user_password == user[1]:  # 判断用户名和密码是否同时正确
                    print('恭喜你,验证成功!')  # 打印消息
                    auth_flag = True  # 给一个标志,表示验证成功,用于跳出while的外层循环。
                    break  # 跳出for循环
                else:
                    auth_flag = False  # 给一个标志,表示验证失败,这行必须有,要不然下一个if会因为没有定义而报错。
    
            if auth_flag:  # 某次验证成功了,就跳出while循环。
                break
    
            count += 1  # 否则说明验证失败,失败次数+1
            if count <= 2:  # 前两次失败会提醒,第三次就不提醒了
                print('你已经错误了%s次,还有%s次机会(错误3次,账户将被锁定)!' % (count, 3 - count))
                print('-----------------------------------------------------------------------')
    
    
        else:  # 说明while循环是完整结束的,试了三次都失败了,那么把0保存到文件里,说明账户被锁定。
            f = open('auth_status', 'w+', encoding='utf-8')
            f.write('0')
            f.close()
            print("你已经错误了3次,账户被锁定,再见!")  # 区别前两次有提醒,第三次直接再见
    
    else:  # 如果不是1,说明状态被锁定,就不再验证,直接打印消息。
        print("你已经被锁定,不能登录。")
    wechat: nick753159 qq: 417966852 email: nzq42@qq.com base: shanghai
  • 相关阅读:
    python之天气爬虫
    python之一异常问题(TypeError: object of type 'NoneType' has no len())
    数据分析之漏斗分析
    python之pytest_addoption : 命令行参数
    python之一driver.find_element_by_xpath与driver.find_element(by, value)的区别
    python之正则表达式从列表中取值报类型错误
    python之append和extend的区别
    pyton之字典的使用
    python之pd.DataFrame函数使用
    python之正则表达式 re.findall 用法
  • 原文地址:https://www.cnblogs.com/cyberbit/p/exe_auth.html
Copyright © 2020-2023  润新知