为了程序可读性,编写函数是不错的选择,五种评分标准分别编写程序::lens()、alps()、digs()、chas()、awas()。
# 密码长度得分 def lens(s): if len(s) <= 4: return 5 elif 4 < len(s) < 8: return 10 else: return 25 # 密码字母得分 def alps(s): for i in s: if i.isalpha(): k = 1 # 判断密码是否包含字母 break else: k = 0 if k == 0: # 不包含字母的情况 return 0 if k == 1: # 包含字母的情况 if s.islower()&nbs***bsp;s.isupper(): # 全为小写或者大写 return 10 else: return 20 # 密码数字得分,与字母得分类似 def digs(s): k = 0 for i in s: if i.isdigit(): # 是数字就统计个数 k += 1 if k == 0: return 0 elif k == 1: return 10 else: return 20 # 密码符号得分 def chas(s): k = 0 for i in s: # 是符号就统计个数 if 33 <= ord(i) <= 47&nbs***bsp;58 <= ord(i) <= 64&nbs***bsp;91 <= ord(i) <= 96&nbs***bsp;123 <= ord(i) <= 126: # 也可以直接用16进制进行比较判断 k += 1 if k == 0: return 0 elif k == 1: return 10 else: return 25 # 密码奖励得分 def awas(s): if s.isalnum(): # 包含字母和数字,但是不包含符号 return 2 elif alps(s) == 10 and digs(s) and chas(s): # 包含字母(全是大写或者全是小写)、数字和符号 return 3 elif alps(s) == 20 and digs(s) and chas(s): # 包含字母(大小写混合)、数字和符号 return 5 else: # 其他情况没有加分,本代码必须有返回0这一步,否则在计算总得分时会报错 return 0 if __name__ == '__main__': while True: try: s = input() sums = lens(s) + alps(s) + digs(s) + chas(s) + awas(s) # 统计总得分 if sums >= 90: print('VERY_SECURE') elif sums >= 80: print('SECURE') elif sums >= 70: print('VERY_STRONG') elif sums >= 60: print('STRONG') elif sums >= 50: print('AVERAGE') elif sums >= 25: print('WEAK') else: print('VERY_WEAK') except: break