本题将会给出
组测试数据,确切数字未知,您需要一直读入直到文件结尾;您也可以参考 牛客网在线判题系统使用帮助 获得更多的使用帮助。每组测试数据描述如下:
在一行上输入一个长度为
,由可见字符构成的字符串
,代表待判断的密码。
对于每一组测试数据,新起一行。若密码合格,输出
,否则输出
。
021Abc9000 021Abc9Abc1 021ABC9000 021$bc9000 021Abc1111
OK NG NG OK OK
对于第二组测试数据,
中存在两个长度大于
的独立子串
,即橙色标记部分。
对于第三组测试数据,仅包含大写字母和数字,不满足条件。
Abc1@ A1@ababa@1A
NG OK
对于第一组测试数据,长度不足
位,不满足条件。
a,b,c,d = 0,0,0,0
flag0 = True
flag1 = True
flag2 = True
result = 0
#判断长度
def length(str1):
global flag1
flag1 = True
if len(str1) < 8:
flag1 = False
return(flag1)
#判断含有三种以上
def sort(str1):
global a,b,c,d,flag0
a, b, c, d = 0, 0, 0, 0
flag0 = True
for x in str1:
if x.isdigit(): # 数字
a = 1
elif x.islower(): # 小写字母
b = 1
elif x.isupper(): # 大写字母
c = 1
else: # 其他
d = 1
result = a + b + c + d
if result < 3:
flag0 = False
# print(flag0)
return (flag0)
#判断是否重复
def repeat(str1):
global flag2
flag2 = True
for i in range(len(str1)-3):
if str1.count(str1[i:i+3]) > 1:
flag2 = False
# print(flag2)
return (flag2)
lines = []
while True:
try:
line = input()
if line == '':
break
else:
lines.append(line)
except EOFError:
break
# print(list1)
for str1 in lines:
# print(str1)
if length(str1) and sort(str1) and repeat(str1):
print('OK')
else:
print('NG') 终于
while True:
try:
s = input()
n = len(s)
p = int(n/2)+1
max_ = 1
for j in range(2,p):
for k in range(p-1):
max_ = max(max_,s.count(s[k:k+j+1]))
if n < 8 :
print('NG')
elif max_ !=1:
print('NG')
else:
a = b = c = d = 0
for i in s:
if i.isupper():
a =1
elif i.islower():
b =1
elif i.isdigit():
c = 1
else:
d = 1
x = a+b+c+d
if x>=3:
print('OK')
else:
print('NG')
except:
break while True:
try:
S = input()
d, x, n, q = 0, 0, 0, 0
if len(S) < 8:
print('NG')
else:
for s in S:
if s.isupper() == True and d != 1:
d = 1
elif s.islower() == True and x != 1:
x = 1
elif s.isdigit() == True and n != 1:
n = 1
elif s.isalnum() == True and s != ' ' and s != '\n' and q != 1:
q = 1
if d + x + n + q < 3:
print('NG')
else:
i = 3
pd = False
while i < len(S) / 2:
for j in range(len(S) - i):
Sq = S[j:j + i]
Sy = S[0:j] + S[j + i:]
if Sq in Sy:
pd = True
break
if pd == True:
print('NG')
break
else:
i += 1
if pd == False:
print('OK')
except:
break
import re
import sys
for s in sys.stdin:
flag=0
sign=set()
if len(s)>8:
flag+=1
for i in s:
if i.isdigit():
sign.add("D")
elif i.isupper():
sign.add("U")
elif i.islower():
sign.add("L")
elif not i.isalnum() and not i.isspace() and i!="\n":
sign.add("S")
if len(sign)>=3:
flag+=1
if not re.findall(r"(.{3,}).*\1",s):
flag+=1
print("OK" if flag==3 else "NG") import sys
def pwd_is_ok():
for line in sys.stdin:
a = line.split()
s = a[0]
if is_len_8(s) and is_3_kinds_str(s) and is_repeat_str(s):
print('OK')
else:
print('NG')
def is_len_8(s):
if len(s) < 8: return False
return True
def is_3_kinds_str(s):
kind_count = 0
for x in s:
if ord(x) in range(33, 47)&nbs***bsp;ord(x) in range(58, 64)&nbs***bsp;ord(x) in range(91, 95)&nbs***bsp;ord(x) in range(123, 126):
kind_count += 1
if ord(x) in range(48, 57):
kind_count += 1
if ord(x) in range(65, 90):
kind_count += 1
if ord(x) in range(97, 122):
kind_count += 1
if kind_count > 2: return True
return False
def is_repeat_str(s):
tmp_list = list()
for i in range(len(s)):
if i < len(s) - 1:
tmp_list.append(s[i:i+3])
# print(tmp_list, len(tmp_list))
# print(set(tmp_list), len(set(tmp_list)))
if len(tmp_list) > len(set(tmp_list)):
return False
return True
def main():
pwd_is_ok()
if __name__ == '__main__':
main()
while True:
try:
import re
a = input()
m, n, p, q = 0, 0, 0, 0
if len(a) > 8:
for t in a:
b1 = re.search("[a-z]", t)
b2 = re.search("[A-Z]", t)
b3 = re.search("[0-9]", t)
b4 = re.search("[^a-zA-Z0-9]", t)
if b1:
m = 1
elif b2:
n = 1
elif b3:
q = 1
else:
p = 1
if m + n + p + q >= 3:
i = 0
k = 0
for i in range(len(a)):
for j in range(i, len(a)):
if a[i : j + 3] not in a[j + 3 : len(a)]:
i += 1
else:
k += 1
if k == 0:
print("OK")
else:
print("NG")
else:
print("NG")
else:
print("NG")
except:
break
import sys
passwords = list(sys.stdin.readlines())
def isValid(s:str) -> bool:
if len(s) <= 8:
return False
# 检查第二个条件
a,b,c,d = 0,0,0,0
for ch in s:
if ord("a") <= ord(ch) <= ord("z"):
a = 1
elif ord("A") <= ord(ch) <= ord("Z"):
b = 1
elif ord("0") <= ord(ch) <= ord("9"):
c = 1
else:
if ch not in [" ","\n"]:
d = 1
if a+b+c+d <3:
return False
# 检查第三个条件
for i in range(len(s)-3+1):
if len(s.split(s[i:i+3])) >=3:
return False
return True
for password in passwords:
if isValid(password):
print("OK")
else:
print("NG")
import re
while True:
try:
raw_strs = input()
raw_set = "".join(set(raw_strs)).replace(' ', '').replace('\n', '')
lenght = len(raw_strs)
mid_lst = []
for i in range(lenght-2):
mid_lst.append(raw_strs[i:i+3])
if len(set(mid_lst)) != len(mid_lst):
print("NG")
elif len(raw_strs) <8:
print("NG")
else:
mid_dict = {
'dig':0
, "alpha_low":0
, "other":0
, "alpha_upper":0
}
pattern_low = re.compile(r'([a-z]+)')
pattern_upper = re.compile(r'([A-Z]+)')
pattern_num = re.compile(r'(\d+)')
if re.findall(pattern_low, raw_set):
mid_dict["alpha_low"] += 1
raw_set = re.sub(pattern_low, "", raw_set)
if re.findall(pattern_upper, raw_set):
mid_dict["alpha_upper"] += 1
raw_set = re.sub(pattern_upper, "", raw_set)
if re.findall(pattern_num, raw_set):
mid_dict["dig"] += 1
raw_set = re.sub(pattern_num, "", raw_set)
mid_len = len(raw_set)
if len(raw_set)>0:
mid_dict["other"] = mid_len
if sum(i for i in mid_dict.values())>=3:
print("OK")
else:
print("NG")
except:
break
def check_password(password:str):
#判断字符串长度
if len(password)<= 8:
return False
check_re = [0,0,0,0]
#使用四个判断来看符不符合“包括大小写字母.数字.其它符号,以上四种至少三种”条件 for letter in password: #一个一个字符遍历
if letter.isupper(): #判断是否有大写
check_re[0] = 1
elif letter.islower():#判断是否有小写
check_re[1] = 1
elif letter.isdigit(): #判断是否为数字
check_re[2] = 1
else: #判断是否有其他字符
check_re[3] = 1
if sum(check_re) < 3:
return False
#使用逐位增加,每次取三位,然后保存在字典dic里,然后每次取出来都进行判断字典dic里面you'w dic = {}
str_check = True
for i in range(len(password) - 2):
cut_str = password[i:i+3]
if cut_str in dic.keys():
#dic[cut_str] += 1
return False
else:
dic[cut_str] = 1
return True
while True:
try:
password = input()
if check_password(password):
print("OK")
else:
print("NG")
except:
break
import sys
# 判断密码是否合法
def is_legal(str1):
lst1 = list(str1)
# pop掉最后一个换行符
lst1.pop()
# 长度判断
if len(lst1) <= 8:
return 'NG'
# 公共子串判断
for i in range(len(lst1)-2):
# 长度为3的子串, 重复出现则返回NG
if str1[i:i+3] in str1[i+1:]:
return 'NG'
# 四种情况判断
kind_dict = {'dig': 0, 'upper': 0, 'lower': 0, 'other': 0}
for i in lst1:
# 数字
if i.isdigit():
kind_dict['dig'] = 1
# 大写字母
elif ord('Z') >= ord(i) and ord('A') <= ord(i):
kind_dict['upper'] = 1
# 小写字母
elif ord('z') >= ord(i) and ord('a') <= ord(i):
kind_dict['lower'] = 1
# 其他
else:
kind_dict['other'] = 1
# 满足三种以上
if sum(list(kind_dict.values())) >= 3:
return 'OK'
else:
return 'NG'
# 读取
lines = list(sys.stdin.readlines())
for i in lines:
print(is_legal(i))