为了程序可读性,编写函数是不错的选择,五种评分标准分别编写程序::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

京公网安备 11010502036488号