输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定

基础需求:
让用户输入用户名密码
认证成功后显示欢迎信息
输错三次后退出程序

升级需求:
可以支持多个用户登录 (提示,通过列表存多个账户信息)
用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态(提示:需把用户锁定的状态存到文件里)


# author:simon002
# -*- coding: utf-8 -*-

import os


# 创建文件存储用户名和密码,并放入两对用户名和密码
if not os.path.exists('simon.txt'):
    with open('simon.txt','a+') as fx:
        fx.write(str({'simon': '001', 'lily': '002'}))

# 创建文件存储用户名和密码输入的次数,初始为空
if not os.path.exists('simonlocktime.txt'):
    with open('simonlocktime.txt','a+'):pass


with open('simon.txt','r')as f:
    user = f.read()
    user = eval(user)    # 把文件中的字典格式的内容读出来,并且转化为字典(默认读进来是字符串)
with open('simonlocktime.txt','r')as f2:
    dic_locktime = f2.read()    # 读锁定次数的字典
    if len(dic_locktime)>0:    # 初始为空,所以读出来的有值的时候才将其转化为字典
        dic_locktime = eval(dic_locktime)
    else:dic_locktime={}    # 无值的时候初始化字典

ifcontinue = 1
while ifcontinue:
    name = input('请输入用户名:')
    name_exist = user.get(name)    # 根据输入的用户名找对应的密码
    if name_exist:
        error_num = dic_locktime.get(name)    # 找到之后读取锁定次数
        if error_num == 3:
            print('账户已被锁定!')
            exit()
        if error_num == None:
            error_num = 0
        while error_num<3:    # 未锁定时输入密码
            psd = input('请输入密码:')
            if psd ==user.get(name):
                dic_locktime[name] = error_num
                print('Welcome %s login ...'%name)
                ifcontinue = 0    # 成功登陆之后不让用户再输入用户名,锁定的时候再继续输入用户名
                break
            else:
                error_num += 1
                print('密码输入错误第%s次,输入错误超过三次后将被锁定!'%error_num)
        if error_num == 3:
            dic_locktime[name] = 3
    else:
        print('未找到此用户名!')
    with open('simonlocktime.txt', 'w+')as f__lock:
        f__lock.write(str(dic_locktime))
View Code
原文地址:https://www.cnblogs.com/Simonsun002/p/8280241.html