CyberBit

Python+MySQL

用户认证的小程序练习

# -*- 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("你已经被锁定,不能登录。")

 

posted on 2018-03-12 10:17  CyberBit  阅读(225)  评论(0编辑  收藏  举报

导航