#!/usr/bin/env python#-*- coding: utf-8 -*-
"""需求点:
1.用户输入账号与密码
2.如果输入正确,则提示欢迎信息
3.如果输入账号不存在,则提示账号不存在
4.如果输入账号与密码不匹配,提示验证失败
5.同一账号,如果连续输入三次错误密码,则锁定该账号2min,2min后重新输入,如果账号密码匹配,则登录成功
6.如果三次登录内成功登录,则清空登录错误次数
7.登录时,如果账号已被锁定,提示账号已锁定信息
user.txt:
Milton Loveyp 0
Cherish Loveypgfc 0
yangp Loveypgfc 0"""
importtimedef modify_user(name, mode="add"):"""修改用户名单中的登录错误次数
:param name: 用户名称
:param mode:add,登录错误次数自增1;del,登录错误次数重置为0
:return:"""
#读取用户文件
with open("user.txt", "r") as read_file:
read_data=read_file.readlines()#写入用户文件
with open("user.txt", "w") as write_file:for line inread_data:
new_line=line.split()if new_line[0] ==name:if mode == "add":
new_line[2] = bytes(int(new_line[2]) + 1)if len(new_line) < 4:
new_line.append(str(time.time()))else:
new_line[3] =str(time.time())else:
new_line[2] = "0"new_line= new_line[0:3]
new_line= " ".join(new_line) + "\n"write_file.write(new_line)
write_file.flush()else:
write_file.write(line)defauth(name, passwd, lock_time):"""用户鉴权
:param name: 登录用户名
:param passwd: 登录密码
:return:"""with open("user.txt", "r") as read_file:for eachLine inread_file:
user_list=eachLine.split()if len(user_list) < 4:
user_list.append(str(time.time()- 100000))
user_name, password, errors, last_time=user_listif name ==user_name:if password ==passwd:if time.time() - float(last_time) > lock_time or int(errors) < 3:print "Dear [%s],welcome~" %name
modify_user(name,"del")returnTrueelse:print "your accout is locked,please try after [%f]s !" %(
lock_time- (time.time() -float(last_time)))returnFalseelse:if int(errors) < 3:print "auth fail,please check your account and password!"modify_user(name,"add")returnFalseelif time.time() - float(last_time) >lock_time:print "auth fail,please check your account and password!"modify_user(name,"del")
modify_user(name,"add")returnFalseelse:print "your accout is locked,please try after [%f]s !" %(
lock_time- (time.time() -float(last_time)))returnFalseelse:print "your account is not exist!"
returnFalsedeflogin():"""登录
:return:"""
whileTrue:
user_name= raw_input("Name:")
pwd= raw_input("PASS:")if auth(user_name, pwd, 120):break
if __name__ == '__main__':
login()