- 思路:这道题应该都能做出来,但是如果思路不清晰的话可能花费时间较多,代码也会比较冗余。优化点:
- 使用二元运算符可以极大减少代码冗余。
- 在判断字母大小写使用0, 1去代替并去重
- 在最后判断分数时使用已经定义好的字典d去循环,只要大于当前k则直接输出v,避免了大量代码判断。
while True:
try:
s = input().replace(" ", "")
d = {90: "VERY_SECURE", 80: "SECURE", 70: "VERY_STRONG", 60: "STRONG", 50: "AVERAGE", 25: "WEAK", 0: "VERY_WEAK"}
n, score = len(s), 0
a, nums, sym = [], [], []
for i in s:
if i.isalpha():
a.append(0 if i.isupper() else 1)
elif i.isdigit():
nums.append(i)
else:
sym.append(i)
# 密码长度
if n <= 4:
score += 5
else:
score += (10 if n <= 7 else 25)
# 字母
a = set(a)
if len(a) > 0:
score += (10 if len(a) == 1 else 20)
# 数字
if nums:
score += (10 if len(nums) == 1 else 20)
# 符号
if sym:
score += (10 if len(sym) == 1 else 25)
# 奖励
if a and nums:
if sym:
score += (3 if len(a) == 1 else 5)
else:
score += 2
for k, v in d.items():
if score >= k:
print(v)
break
except:
break