题解 | #密码强度等级#

密码强度等级

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)

全部评论

相关推荐

GoldenPota...:能做这个方向的人200一天是吧🤗
找AI工作可以去哪些公司...
点赞 评论 收藏
分享
04-24 18:13
南京大学 Java
不吃酸菜血肠:看力竭了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务