zoukankan      html  css  js  c++  java
  • 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:为存储达到规定次数的用户信息,就是黑名单。使在名单里的用户无法完成登录操作。

      

  • 相关阅读:
    Codevs 2296 仪仗队 2008年省队选拔赛山东
    Codevs 1535 封锁阳光大学
    Codevs 1069 关押罪犯 2010年NOIP全国联赛提高组
    Codevs 1218 疫情控制 2012年NOIP全国联赛提高组
    Codevs 1684 垃圾陷阱
    洛谷 P1108 低价购买
    Vijos P1325桐桐的糖果计划
    Codevs 3289 花匠 2013年NOIP全国联赛提高组
    Codevs 2611 观光旅游(floyed最小环)
    C语言基础之彩色版C语言(内含linux)
  • 原文地址:https://www.cnblogs.com/Michael--chen/p/6683568.html
Copyright © 2011-2022 走看看