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

      

  • 相关阅读:
    03、Jenkins相关概念
    02、Jenkins安装部署
    01、Jenkins简介
    10.ansible 利用playbook部署LAMP环境
    09.ansilbe利用playbook部署LNMP环境
    08.编译安装httpd
    python入门到放弃(五)-基本数据类型之list列表
    python入门到放弃(四)-基本数据类型之str字符串
    python入门到放弃(三)-基本数据类型之int整数和bool值
    CentOS7.5源码编译安装mysql5.7.29
  • 原文地址:https://www.cnblogs.com/Michael--chen/p/6683568.html
Copyright © 2011-2022 走看看