HJ20 密码验证合格程序

12 篇文章 0 订阅

题目:

密码要求:

1.长度超过8位

2.包括大小写字母.数字.其它符号,以上四种至少三种

3.不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)

数据范围:输入的字符串长度满足 1 \le n \le 100 \1≤n≤100
输入描述:
一组字符串。

输出描述:
如果符合要求输出:OK,否则输出NG

在这里插入图片描述
思路:
要求3:感觉优点拗口,它是想表达,长度大于3的子串不能重复出现
像 “021ababaA0”中 子串“aba"重复出现了,也不行

解答:

while True:
    try:
        s = input()
        types = 0
        mark = [0] * 4
        n = len(s)
        if n <= 8:
            print('NG')
        else:
            for c in s:
                if mark[0] == 0 and c.islower():
                    types += 1
                    mark[0] = 1
                elif mark[1] == 0 and c.isupper():
                    types += 1
                    mark[1] = 1
                elif mark[2] == 0 and c.isdigit():
                    types += 1
                    mark[2] = 1
                elif mark[3] == 0 and (not c.isalnum()):
                    types += 1
                    mark[3] = 1
            if types < 3:
                print("NG")
            else:
                flag = False
                # 长度大于3的子串不能重复出现
                for i in range(n - 2):
                    if s[i:i + 3] in s[i + 1:]:
                        flag = True
                        print("NG")
                        break
                if not flag:
                    print('OK')

    except EOFError:
        break
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值