题目描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)
数据范围:输入的字符串长度满足 1≤n≤100
输入描述:
一组字符串。
输出描述:
如果符合要求输出:OK,否则输出NG
题解思路
这种多条要求的就分情况分别讨论,逻辑分析类题。通过分析清楚代码虽稍长,不过思路清晰后并不难写出,也比较容易调试。
code
def check():
# 输入一组字符串
string = input()
# 条件1:长度超过8
if len(string) <= 8:return 0
# 条件2:小写字母、大写字母、数字、特殊符号,必须至少包含3种
a,b,c,d = 0,0,0,0
for i in string:
if 'a' <= i <= 'z':
a = 1
elif 'A' <= i <= 'Z':
b = 1
elif '0' <= i <= '9':
c = 1
else:
d = 1
if a+b+c+d < 3: return 0
# 条件3:重复子串的长度不能大于2
dic = {}
for i in range(len(string)-3):
subString = string[i:i+3]
if subString not in dic:
dic[subString] = 1
else:
dic[subString] += 1
if dic[subString] >=2 : return 0
return 1
while True:
try:
if check():
print("OK")
else:
print("NG")
except:
break