"""GESP Python 三级认证试题(202306)
第 2 题
【问题描述】
(1)网站注册需要有用户名和密码,编写程序以检查用户输入密码的有效性。
(2)合法的密码只能由 a-z 之间 26 个小写字母、A-Z 之间 26 个大写字母、0-9 之间10个数字以及!@#$四个特殊字母构成。
(3)密码最短长度:6 个字符,密码最大长度:12 个字符。
(4)大写字母、小写字母和数字必须有其中两种,以及至少有四个特殊字符中的一个。
【输入描述】
(1)输入以英文逗号分隔的多个字符组合作为被检测密码。输入时的逗号都作为分隔符,不被视作检验密码本身。
(2)特别提示:常规程序中,输入时好习惯是有提示。考试时由于系统限定,输入时所有 input()函数不可有提示信息。
【输出描述】
(1)逐行输出 0 个或多个合规的密码。
(2)输出顺序以输入字符串出现先后为序,即先出现则先输出。
【样例输入 1】
seHJ12!@,sjdkffH$123,sdf!@^&12 HDH,123&^YUhg@!
【样例输出 1】
seHJ12!@
sjdkffH$123
"""
PS = input().split(",")
for s in PS:
LS = len(s)
if not(LS >= 6 and LS <= 12):
continue
lowerCnt = upperCnt = digitCnt = specialCnt = False
""" 方案1
ms = list(s)
for c in s:
if c >= 'a' and c <= 'z':
lowerCnt = True
ms.remove(c)
elif c >= 'A' and c <= 'Z':
upperCnt = True
ms.remove(c)
elif c >= '0' and c <= '9':
digitCnt = True
ms.remove(c)
elif c in '!@#$':
specialCnt = True
ms.remove(c)
if len(ms) != 0:
continue
"""
# 方案2
otherCnt = False
for c in s:
if c >= 'a' and c <= 'z':
lowerCnt = True
elif c >= 'A' and c <= 'Z':
upperCnt = True
elif c >= '0' and c <= '9':
digitCnt = True
elif c in '!@#$':
specialCnt = True
else:
otherCnt = True
break
if otherCnt == True:
continue
if lowerCnt + upperCnt + digitCnt >= 2 and specialCnt == True:
print(s)