题解(适合萌新 )| #密码验证合格程序#

密码验证合格程序

https://www.nowcoder.com/practice/184edec193864f0985ad2684fbc86841

import re


def kind_is_ok(strs):      # 判断种类是否大于等于3种
    kind = [0, 0, 0, 0]
    for s in strs:
        m = kind.count(0)
        if m <= 1:       # 0的数量小于等于1,说明已经有三种了
            return True
        else:
            if s.isdecimal():
                kind[0] += 1
                continue
            if re.match("[A-Z]", s):
                kind[1] += 1
                continue
            if re.match("[a-z]", s):
                kind[2] += 1
                continue
            if re.match("[a-z]", s):
                kind[2] += 1
                continue
            if re.match(r"[^a-zA-Z0-9\\s]", s):
                kind[3] += 1
                continue
    return False


def is_not_duplicated(strs):       # 判断长度大于2的子串是否有重复,即判断每三个子串是否有相同
    three_list = []
    for i in range(len(strs) - 2):
        three = strs[i] + strs[i + 1] + strs[i + 2]
        three_list.append(three)
    drop_duplicated = set(three_list)     # 用集合去重
    if len(three_list) != len(drop_duplicated):   # 长度不一,说明有重复
        return False         # 返回 False 说明:不是不重复,即有重复(这样写是为了后面好判断)
    else:
        return True          # 返回 True 说明不重复


if __name__ == "__main__":
    while True:
        try:
            item = input()
            n = len(item)
            if n > 8 and kind_is_ok(item) and is_not_duplicated(item):
                print("OK")
            else:
                print("NG")
        except:
            break

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务