路飞学城系列:第2章 数据类型&文件操作-练习(3)【模拟登陆-等待优化ing-读写不能同时进行ing】

# coding: utf-8

"""
练习题2 —— 模拟登陆:

    用户输入帐号密码进行登陆
    用户信息保存在文件内
    用户密码输入错误三次后锁定用户,下次再登录,检测到是这个用户也登录不了

    思路:
    1、创建一个文件,保存 “用户名”、“密码”、“锁定状态:UnLock”,文本内容如下:
        【
            牛魔王 abcde12345! UnLock
            李祯 123456 UnLock
        】
    2、用户输入账号、密码登录,写while循环,用户输入错误3次,修改“锁定状态:Lock”

"""



# 接收输入的用户名
user_name = input("请输入用户名:")

# 记录用户输入密码错误次数
input_error_count = 0

# 记录登录状态
login_status = True

# 判断用户是否存在
is_User = False

#定义while循环,输入正确 或者 输入错误3次(锁定该账号)。
while login_status:

    # 接收输入的密码
    user_pwd = input("请输入密码:")

    # 读取存放用户名、密码信息的文件
    read_user_info = open(r"D:Python_Python_Code_LZluffycity第一模块:开发基础第2章  数据类型&文件操作2.29、用py操作文件模拟登录.txt",
                          mode="r", encoding="utf-8")
    # 存放读取到的文件信息
    file_data = ""

    # 循环读取文件中的用户信息
    for line in read_user_info:
        line_list = line.split()

        # 如果用户名验证成功,账号未被锁定,密码验证成功,则登录成功。
        if user_name == line_list[0] and line_list[2] != "Lock" and user_pwd == line_list[1]:
            print("登录成功!")

            file_data += line

            # 设置结束程序
            login_status = False

            is_User = True
        # 如果用户名验证成功,账号未被锁定,密码验证不成功,则登录失败、继续去输入密码(输错3次锁定)。
        elif user_name == line_list[0] and line_list[2] != "Lock" and user_pwd != line_list[1]:
            input_error_count += 1
            # 输入密码错误不到3次,继续让用户输入密码
            if input_error_count != 3:
                print("密码输入错误,您还有{1}次机会!".format(user_name, 3-input_error_count))
                file_data += line

            # 输入密码错误达到3次,锁定用户账号,更新文件,并结束程序
            else:
                print("密码输入错误!您已经输入错误3次,账号已锁定!")
                line = line.replace("UnLock", "Lock")
                file_data += line

                # 设置结束程序
                login_status = False

            is_User = True
        # 如果用户名验证成功,账号已经锁定,则结束程序。
        elif user_name == line_list[0] and line_list[2] == "Lock":
            print("该账号已锁定!")
            file_data += line

            # 设置结束程序
            login_status = False

            is_User = True
        # 如果当前输入的不是该用户名,则把该行记录一下
        elif user_name != line_list[0]:
            file_data += line
        else:
            file_data += line

    # 写入存放用户名、密码信息的文件
    write_user_info = open(
        r"D:Python_Python_Code_LZluffycity第一模块:开发基础第2章  数据类型&文件操作2.29、用py操作文件模拟登录.txt",
        mode="w", encoding="utf-8")
    write_user_info.write(file_data)

    # 关闭文件读取和写入
    read_user_info.close()
    write_user_info.close()

    # 判断用户是否存
    if is_User is False:
        print("用户不存在!")
        break

  

原文地址:https://www.cnblogs.com/lizhen416/p/13610613.html