b = []
while True:
try:
a = input()
b.append(a) #b存储所有的输入字符串,即待验证密码
except:
break
def repeat_check(i):#验证是否有长度大于等于三的重复子串
b_1 = i#输入的所有的字符串的某一个,具体哪一个看调用这个函数的代码
repeat = 0#重复值初始化为1
len_b_1 = len(b_1)
for windows in range(3,len_b_1):#窗口大小,只需要从3验证即可,最大的窗口为字符串长度 - 1 即可
c = []
for i in range(len_b_1 - windows - 1):#移动窗口收集字符串 !!!!!!!!!!!ps:其实这道题窗口为3即可,因为重复长度为4,5通过窗口为3都能验证出来
我只是为了写一下改变窗口大小
c.append(b_1[i:i+windows])#c中保存每次窗口包含的字符串
if(len(c) != len(set(c))):#如果原始的c和通过set()去重的列表长度相同,则认为无重复,否则认为有重复字串
repeat = 1
break
return repeat
for i in b:
if(len(i) <= 8):#长度大于8则认为不合法
print('NG')
continue
if(' ' in i):#输入有空格则认为不合法
print('NG')
continue
repeat = repeat_check(i)#判断是否有长度大于等于3的重复子串
if(repeat == 1):
print('NG')
continue
upper = 0#初始化大写,小写,数字,其他字符统计量
lower = 0
number = 0
other = 0
for j in range(len(i)):
if(i[j].isdigit()):#若是第一次遇见数字,则数字的统计加一
if(number == 0):
number = 1
elif(i[j].islower()):#若是第一次遇见小写,则小写的统计加一
if(lower == 0):
lower = 1
elif(i[j].isupper()):#若第一次遇见大写,则大写的统计加一
if(upper == 0):
upper = 1
else:
if(other == 0):#否则认为是其他字符
other = 1
if(upper + lower + number + other < 3):#若是只有上述四种的两种,则认为非法
print('NG')
continue
print('OK')#经历了上述所有的检查之后走到这一步,没有非法项,则认为合法