目录
显示
题目
描述
密码要求:
1.长度超过8位
2.包括大小写字母.数字.其它符号,以上四种至少三种
3.不能有长度大于2的包含公共元素的子串重复 (注:其他符号不含空格或换行)
输入描述:
一组字符串。
输出描述:
如果符合要求输出:OK,否则输出NG
示例1
输入:
021Abc9000
021Abc9Abc1
021ABC9000
021$bc9000
输出:
OK
NG
NG
OK
代码1
def check(s):
if len(s) <= 8:
return 0
a, b, c, d = 0, 0, 0, 0
for item in s:
if ord('a') <= ord(item) <= ord('z'):
a = 1
elif ord('A') <= ord(item) <= ord('Z'):
b = 1
elif ord('0') <= ord(item) <= ord('9'):
c = 1
else:
d = 1
if a + b + c + d < 3:
return 0
for i in range(len(s)-3):
if len(s.split(s[i:i+3])) >= 3:
return 0
return 1
while 1:
try:
print('OK' if check(input()) else 'NG')
except:
break
代码2
import sys, re
def find_A(s):
return bool(re.search(r"[A-Z]", s))
def find_a(s):
return bool(re.search(r"[a-z]", s))
def find_num(s):
return bool(re.search(r"[0-9]", s))
def find_other(s):
return bool(re.search(r"[^A-Za-z0-9\s]", s))
def check_dup(s):
max_len = len(s) // 2
for j in range(3, max_len + 1):
for i in range(len(s) - j + 1):
sub = s[i : i + j]
if sub in s[i + 1 :]:
return True
return False
for line in sys.stdin:
a = line.split()[0]
cnt = 0
if len(a) <= 8:
print("NG")
continue
if find_A(a):
cnt += 1
if find_a(a):
cnt += 1
if find_num(a):
cnt += 1
if find_other(a):
cnt += 1
# print(cnt)
if cnt < 3:
print("NG")
continue
if check_dup(a):
print("NG")
continue
print("OK")
打赏作者