码迷,mamicode.com
首页 > 编程语言 > 详细

Python实战一

时间:2017-04-09 09:45:41      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:input   ict   bsp   用户交互   mic   odi   用户输入   mod   for   

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

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("\n"+name)#往文本写错误用户的信息
        f_add.seek(0)#把光标移到最开始位置
        fadd = f_add.readlines()#获取输入错误用户的信息
        for i in range(len(fadd)):#循环列表fadd
            fadd[i] = fadd[i].replace(‘\n‘, ‘‘)#去掉每行中的“\n”,用于下面的比对
        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("\n"+name)#写入黑名单

while True: #用户交互模式
    name = input("Please input your username:").strip()
    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:为存储达到规定次数的用户信息,就是黑名单。使在名单里的用户无法完成登录操作。

  

 

Python实战一

标签:input   ict   bsp   用户交互   mic   odi   用户输入   mod   for   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!