字符串处理函数(二)python语言实现密码强度校验

编写代码注重两点能力的实现:

1、思维逻辑:思维逻辑有可以通过程序思维导图辅助实现,同时,我们也可以像下面代码中的新增功能注释一样,循序渐进的实现程序的功能;

2、细节完善:程序除了主要功能的实现外,添加一定的代码注释、功能说明、以及写作信息也是必需的。

下面是一个用Python实现的判断密码强度的小程序:

其中涉及到了自定义的字符串处理函数:

def check_letter_exist(self):
        """
        判断字符串中是否有字母
        :param password_str:
        :return:
        """
        has_letter = False
        for d in self.password:
            if d.isalpha():
                has_letter = True
                break
        return has_letter
等,实现过程比较简单。

"""
    作者:虞曦非虞兮
    功能:判断密码强度
    版本:V6.1
    日期:2018/12/18
    2.0新增功能:限制密码设置的次数;循环的终止
    3.0新增功能:保存密码和强度到文件中
    3.1新增功能:将密码强度由数字变成对应的中文解释。
    4.0新增功能:读取文件中的密码
    5.0新增功能:将相关方法封装成一个模块,面向对象编程
    6.0新增功能:定义一个文件工具类
    6.1新增功能:需要密码同时包含大小写和特殊符号
"""



class PasswordTool:
    """
        密码工具类
    """
    # 实例化函数
    def __init__(self, password):
        self.password = password
        self.strength_level = 0

    # 类的方法

    def process_password(self):
        # 规则1:密码长度大于8
        if len(self.password) > 8:
            self.strength_level += 1
        else:
            print('密码长度必须大于8位。')
        # 规则2:包含数字
        if self.check_number_exist():
            self.strength_level += 1
        else:
            print('密码必须包含数字')
        # 规则3:包含字母
        if self.check_letter_exist():
            self.strength_level += 1
        else:
            print('密码必须包含字母')
        # 规则4:包含大小写字母
        if self.check_upper_and_lower_exit():
            self.strength_level += 1
        else:
            print('密码必须同时包含大小写字母')
        # 规则5:包含特殊字母
        if self.check_specal_symbol_exit():
                self.strength_level += 1
        else:
            print('密码必须同时包含特殊字符')


    def check_number_exist(self):
        """
        判断字符串中是否有数字
        :param password_str:
        :return:
        """
        has_number = False
        for c in self.password:
            if c.isnumeric():
                has_number = True
                break
        return has_number

    def check_letter_exist(self):
        """
        判断字符串中是否有字母
        :param password_str:
        :return:
        """
        has_letter = False
        for d in self.password:
            if d.isalpha():
                has_letter = True
                break
        return has_letter
    def check_upper_and_lower_exit(self):
        """
        判断是否同时有大小写字母
        :return:
        """
        has_upper_and_lower = False
        has_upper = False
        has_lower = False
        for m in self.password:
            if m.isupper() == True:
                has_upper = True
                continue
            elif m.islower() == True:
                has_lower = True
                if has_upper == True:
                    break
                else:
                    continue
            else:
                continue
        if has_upper == True and has_lower == True:
            has_upper_and_lower = True
        return has_upper_and_lower

    def check_specal_symbol_exit(self):
        has_special_symbol_exit = False
        special_char_list = ['*', '#', '+', '!', '@', '$', '^', '%']
        for i in range(len(special_char_list)):
            if self.password.find(special_char_list[i]):
                has_special_symbol_exit = True
                break
        return has_special_symbol_exit

class FileTool:
    """
        文件工具类
    """
    def __init__(self, filepath):
        self.filepath = filepath
    def writ_to_file(self, line):
        f = open(self.filepath, 'a')
        f.write(line)
        f.close()
    def read_from_file(self):
        f = open(self.filepath, 'r')
        lines = f.readlines()
        f.close()
        return lines

def main():
    """
    主函数
    :return:
    """
    try_times = 5
    file_path = 'password_6.0.txt'
    #   实例化文件对象
    file_tool = FileTool(file_path)


    while try_times > 0:
        password = input('请输入密码:')
        # 实例化密码工具对象
        password_tool = PasswordTool(password)
        password_tool.process_password()
        # 写文件操作
        line = '密码:{},强度:{}\n'.format(password, password_tool.strength_level)
        file_tool.writ_to_file(line)

        if password_tool.strength_level == 5:
            print('恭喜,密码强度合格。')
            break
        else:
            print('密码强度不合格。')
            try_times -= 1
            print()
    if try_times <= 0:
        print('尝试次数过多,密码设置失败。')
    # 读操作
    content = file_tool.read_from_file()
    print(content)


if __name__ == '__main__':
    main()

 

转载于:https://www.cnblogs.com/SpringFull/p/10138965.html

你可能感兴趣的:(字符串处理函数(二)python语言实现密码强度校验)