• 思路:这道题应该都能做出来,但是如果思路不清晰的话可能花费时间较多,代码也会比较冗余。优化点:
  1. 使用二元运算符可以极大减少代码冗余。
  2. 在判断字母大小写使用0, 1去代替并去重
  3. 在最后判断分数时使用已经定义好的字典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