题解 | #密码强度等级#
密码强度等级
https://www.nowcoder.com/practice/52d382c2a7164767bca2064c1c9d5361
import sys
def do(password):
record = 0
base_big_c = [chr(ord('A')+i) for i in range(26)]
base_small_c = [chr(ord('a')+i) for i in range(26)]
base_digital = '0123456789'
base_flag = """!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
l_big_c = []
l_small_c = []
l_digital = []
l_flag = []
l_other = []
result = 'VERY_WEAK'
# 密码长度得分,字符长度比较
p_len = len(password)
if p_len <= 4:
record += 5
elif p_len >= 5 and p_len <= 7:
record += 10
else:
record += 25
# print('密码长度得分{}'.format(record))
# 循环分类,小写字母,大写字母,数字,符号放到不同的list中
for p in password:
# 判断大写字母,小写字母
if p in base_big_c:
l_big_c.append(p)
elif p in base_small_c:
l_small_c.append(p)
# 判断数字个数
elif p in base_digital:
l_digital.append(p)
# 判断符号的个数
elif p in base_flag:
l_flag.append(p)
else:
l_other.append(p)
# 计算奖励的分数
if (len(l_big_c) > 0 and len(l_small_c) == 0) or (len(l_big_c)==0 and len(l_small_c)>0):
record += 10
if len(l_big_c) > 0 and len(l_small_c) > 0:
record += 20
# print('大小写{}'.format(record))
if len(l_digital) == 1:
record += 10
if len(l_digital) > 1:
record += 20
# print('数字{}'.format(record))
if len(l_flag) ==1:
record += 10
if len(l_flag) >1:
record += 25
# print('符号{}'.format(record))
# 奖励
if len(l_big_c) > 0 and len(l_small_c)>0 and len(l_digital)>0 and len(l_flag)>0:
record += 5
elif (len(l_big_c) > 0 or len(l_small_c)>0) and len(l_digital)>0 and len(l_flag)>0:
record += 3
elif (len(l_big_c) > 0 or len(l_small_c)>0) and len(l_digital)>0:
record += 2
# print('奖励{}'.format(record))
# 分数对应的输出
if record>=90:
result = 'VERY_SECURE'
elif record >= 80:
result = 'SECURE'
elif record >= 70:
result = 'VERY_STRONG'
elif record >= 60:
result = 'STRONG'
elif record >= 50:
result = 'AVERAGE'
elif record >= 25:
result = 'WEAK'
elif record >= 0:
result = 'VERY_WEAK'
return result
if __name__ == '__main__':
password = sys.stdin.readline().strip()
r =do(password)
print(r)
查看9道真题和解析