字符串处理函数(二)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()