Python实战一

要求:用户输入用户名和密码错误三次,就对该用户进行锁定,不让其进行登录。

def match(name,pwd):
    '''匹配用户输入的信息,进行判断'''
    falg = True
    while falg:
        with open("test",mode="r",encoding="utf8") as f_read,
                open("test2",mode="r",encoding="utf8") as f1_read:
            fread = f_read.readlines()
            f1read = f1_read.readlines()
            for lines in f1read:#循环黑名单里的内容
                if name == lines:#判断是否在黑名单里,在就锁定退出
                    falg = False#退出while循环
                    print("This user has been locked!")
            if falg ==False:
                break #退出黑名单循环
            for line in fread:#循环用户信息库,进行判断是否正确
                if name in line and pwd in line :
                    verdict = True#输入正确为True,退出循环
                    break
                else:
                    verdict = False#输入错误为False,跳出本次循环
                    continue
            if verdict == True:#因为用户信息库里有很多用户信息,so,要拿出来判断
                print("welcome %s" % (name))
                falg = False
            if verdict == False:
                print("You input the username or password error")
                decide(name)#当输入错误时,调用decide函数
                falg = False

def decide(name):
    '''写入用户输入错误的用户名,达到一定的次数,把该用户写入黑名单'''
    count = 0#计数器,用于记录输入错误用户的次数
    with open("test1",mode="a+",encoding="utf8") as f_add:
        f_add.write("
"+name)#往文本写错误用户的信息
        f_add.seek(0)#把光标移到最开始位置
        fadd = f_add.readlines()#获取输入错误用户的信息
        for i in range(len(fadd)):#循环列表fadd
            fadd[i] = fadd[i].replace('
', '')#去掉每行中的“
”,用于下面的比对
        for line in fadd:#此时的fadd里已没有多余的空格,便于比对
            if name == line:#当有重复的用户名,累加一次
                count += 1 #匹配后自加1
            if count > 2:#当输入3次时,就调用black函数
                black(name)

def black(name):
    '''黑名单,输入达到次数的用户,被锁定在黑名单'''
    with open("test2",mode="a+",encoding="utf8") as f_add:
        f_add.seek(0)#移动光标至最开始位置
        fadd = f_add.readlines()#获取黑名单信息
        for line in fadd:#循环黑名单,有重复的用户不会被写入
            if name == line :
                break  #有重复的信息退出,不再写入黑名单
        f_add.write("
"+name)#写入黑名单

while True: #用户交互模式
    name = input("Please input your username:").strip()
    if len(name) == 0:#判断用户名输入是否为空,空的话重新输入
        print("Input is wrong, please input again")
        continue
    if name =="q":#输入q退出 
        print("ByeBye!") 
        break 
    pwd = input("Please input your password:").strip() 
    match(name, pwd)#调用match函数,匹配输入信息

  程序中test为用户的信息库:

michael---111
egon---222
tom---333

  test1:为缓存错误用户的信息,对错误用户进行计数。

  test2:为存储达到规定次数的用户信息,就是黑名单。使在名单里的用户无法完成登录操作。

  

原文地址:https://www.cnblogs.com/Michael--chen/p/6683568.html