判断密码强度(Python)

用户设置密码后,判断密码强度是否合格,判断规则:1.密码长度不小于8;2.密码中必须包含字母;3.密码中必须包含数字。

1.0:isnumeric()函数可以判断字符串中是否只含有数字,若字符串中只含数字,返回True;isalpha()函数可以判断字符串字符串中是否只含有字母,若字符串中只包含字母,返回True。初始化密码强度strength_level为0,每满足一个判断规则就加1。判断密码强度时,只要含有字母(不是只含有字母)即可,因此对输入的密码字符串进行遍历,遇到字母后停止遍历,如果密码中含有字母,strength_level+1。对数字的判断同样处理。当密码强度为3时,给用户提示:密码强度合格,否则说明不合格原因。

"""
判断密码强度
1.0:密码长度大于8
    包含数字
    包含字母
"""
def check_number_exit(password):
    """
    判断是否含有数字
    """
    for x in password:
        if x.isnumeric():
            return True
    return False

def check_letter_exit(password):
    """
    判断是否含有字母
    """
    for x in password:
        if x.isalpha():
            return True
    return False


def main():
    """
    主函数
    """
    password_str = input("请输入密码:")
    strength_level = 0
    #规则1:密码长度大于8
    if len(password_str) >= 8:
        strength_level += 1
    else:
        print("抱歉!密码长度应不小于8位!")
    #规则2:包含数字
    if check_number_exit(password_str):
        strength_level +=1
    else:
        print("抱歉!密码中应包含数字!")
    #规则3:包含数字
    if check_letter_exit(password_str):
        strength_level +=1
    else:
        print("抱歉!密码中应包含字母!")
    if strength_level ==3:
        print("您的密码强度合格!")
    else:
        print("您设置的密码强度不合格!")

if __name__=="__main__":
    main()

2.0:主要是终止循环(break)的用法。对判断是否含有字母和数字的函数进行了优化,同时改进主函数,使用户可以多次设置密码。设置输入密码次数 times=5,用户输入密码不合格时,提醒用户重新输入,同时times-1,若用户输入的密码合格,则直接跳出循环。当用户输入5 次后密码仍然不合格时,提醒用户输入次数过多。

"""
判断密码强度
2.0: 终止循环,限定输入密码的次数
"""
def check_number_exit(password):
    """
    判断是否含有数字
    """
    number = False
    for x in password:
        if x.isnumeric():
            number = True
            break
    return number

def check_letter_exit(password):
    """
    判断是否含有字母
    """
    letter = False
    for x in password:
        if x.isalpha():
            letter = True
            break
    return letter


def main():
    """
    主函数
    """
    times = 5
    while(times >0 ):
        password_str = input("请输入密码:")
        strength_level = 0
        #规则1:密码长度大于8
        if len(password_str) >= 8:
            strength_level += 1
        else:
            print("抱歉!密码长度应不小于8位!")
        #规则2:包含数字
        if check_number_exit(password_str):
            strength_level +=1
        else:
            print("抱歉!密码中应包含数字!")
        #规则3:包含数字
        if check_letter_exit(password_str):
            strength_level +=1
        else:
            print("抱歉!密码中应包含字母!")
        if strength_level ==3:
            print("您的密码强度合格!")
            break
        else:
            print("您设置的密码强度不合格!")
            times -= 1
        print()


    if times == 0:
        print("您输入密码次数超过已5次,暂不可用!")


if __name__=="__main__":
    main()

3.0:将设置的密码及对应的强度以及强度级别保存到文件中。定义密码强度级别,1:弱;2:中;2:强。文件的操作:f = open(),括号中输入文件路径以及打开方式(r:只读,文件不存在时报错;w:只写,文件不存在时自动新建文件;r+:可读可写;a:可以持续性输入,保留原来的输入结果)。f.write()写入内容。f.close()关闭文件。文件打开要在判断密码强度是否合格之前,否则只能保存合格的密码。

"""
判断密码强度
3.0:将设置的密码以及对应的强度保存到文件中
"""
def check_number_exit(password):
    """
    判断是否含有数字
    """
    number = False
    for x in password:
        if x.isnumeric():
            number = True
            break
    return number

def check_letter_exit(password):
    """
    判断是否含有字母
    """
    letter = False
    for x in password:
        if x.isalpha():
            letter = True
            break
    return letter


def main():
    times = 5
    while(times >0 ):
        password_str = input("请输入密码:")
        strength_level = 0
        #规则1:密码长度大于8
        if len(password_str) >= 8:
            strength_level += 1
        else:
            print("抱歉!密码长度应不小于8位!")
        #规则2:包含数字
        if check_number_exit(password_str):
            strength_level +=1
        else:
            print("抱歉!密码中应包含数字!")
        #规则3:包含数字
        if check_letter_exit(password_str):
            strength_level +=1
        else:
            print("抱歉!密码中应包含字母!")
        if strength_level == 1:
            level = "弱"
        elif strength_level == 2:
            level = "中"
        else:
            level = "强"
        f = open("password.3.0.txt","a")
        f.write("密码:{}\t强度:{}\t级别:{}\n".format(password_str,strength_level,level))
        f.close()
        if strength_level ==3:
            print("您的密码强度合格!")
            break
        else:
            print("您设置的密码强度不合格!")
            times -= 1
        print()



    if times == 0:
        print("您输入密码次数超过已5次,暂不可用!")


if __name__=="__main__":
    main()

4.0:读取文件中的密码(只截取读取文件的代码)。以只读的方式打开文件,g.read():读取所有的文件信息,返回一个包含所有文件信息的字符串;g.readline()返回值为文件下一行内容的字符串;g.readlines():返回值为整个文件内容的列表,每项是以换行为结尾的一行字符串。关于文件信息的遍历有两种方式:(1)for line in g (2)for line in g.readlines()

g = open("password.3.0.txt", "r")     
#read = g.read()
#print(read)
#line = g.readline()
#print(line)
#lines = g.readlines()
#print(lines)
#for line in g:
#    print(line)
for line in g.readlines():
    print(line)

5.0:面向对象,定义一个密码工具类,首先定义密码属性,然后写入判断是否含有字母和数字的函数,最后写入计算密码强度的函数。

"""
判断密码强度
5.0:面向对象,定义一个密码工具类
"""


class PasswordTool:
    #自身属性
    def __init__(self,password):
        self.password = password
        self.strength_level = 0
        self.level = ""

    def check_number_exit(self):
        number = False
        for x in self.password:
            if x.isnumeric():
                number = True
                break
        return number

    def check_letter_exit(self):
        letter = False
        for x in self.password:
            if x.isalpha():
                letter = True
                break
        return letter
    def password_tool(self):

        if len(self.password) >= 8:
            self.strength_level += 1
        else:
            print("抱歉!密码长度应不小于8位!")

        if self.check_number_exit():
            self.strength_level += 1
        else:
            print("抱歉!密码中应包含数字!")

        if self.check_letter_exit():
            self.strength_level += 1
        else:
            print("抱歉!密码中应包含字母!")
        if self.strength_level == 1:
            self.level = "弱"
        elif self.strength_level == 2:
            self.level = "中"
        else:
            self.level = "强"


def main():
    times = 5
    while(times >0 ):
        password_str = input("请输入密码:")
        example = PasswordTool(password_str)
        example.password_tool()
        f = open("password.5.0.txt","a")
        f.write("密码:{}\t强度:{}\t级别:{}\n".format(example.password,example.strength_level,example.level))
        f.close()
        if example.strength_level ==3:
            print("您的密码强度合格!")
            break
        else:
            print("您设置的密码强度不合格!")
            times -= 1
        print()

    if times == 0:
        print("您输入密码次数超过已5次,暂不可用!")

if __name__=="__main__":
    main()

6.0:定义一个文件操作类。将关于文件读写操作的函数写入类中。

"""
判断密码强度
6.0:面向对象,定义一个文件操作类
"""

class Filetool:
    def __init__(self,filepath):
        self.filepath = filepath
    def read_from_file(self):
        f = open(self.filepath,"r")
        lines = f.readlines()
        f.close()
        return lines
    def write_to_file(self,line):
        f = open(self.filepath,"a")
        f.write(line)
        f.close()

class PasswordTool:
    #自身属性
    def __init__(self,password):
        self.password = password
        self.strength_level = 0
        self.level = ""

    def check_number_exit(self):
        number = False
        for x in self.password:
            if x.isnumeric():
                number = True
                break
        return number

    def check_letter_exit(self):
        letter = False
        for x in self.password:
            if x.isalpha():
                letter = True
                break
        return letter
    def password_tool(self):

        if len(self.password) >= 8:
            self.strength_level += 1
        else:
            print("抱歉!密码长度应不小于8位!")

        if self.check_number_exit():
            self.strength_level += 1
        else:
            print("抱歉!密码中应包含数字!")

        if self.check_letter_exit():
            self.strength_level += 1
        else:
            print("抱歉!密码中应包含字母!")
        if self.strength_level == 1:
            self.level = "弱"
        elif self.strength_level == 2:
            self.level = "中"
        else:
            self.level = "强"


def main():
    times = 5
    path = "pwd_level6.0.txt"
    f = Filetool(path)
    while(times >0 ):
        password_str = input("请输入密码:")
        example = PasswordTool(password_str)
        example.password_tool()
        line = "密码:{}\t强度:{}\t级别:{}\n".format(example.password,example.strength_level,example.level)
        f.write_to_file(line)
        if example.strength_level ==3:
            print("您的密码强度合格!")
            break
        else:
            print("您设置的密码强度不合格!")
            times -= 1
        print()

    if times == 0:
        print("您输入密码次数超过已5次,暂不可用!")
    word = f.read_from_file()
    print(word)
if __name__=="__main__":
    main()

 

你可能感兴趣的:(Pytnon,类,文件读写)