for c in password:
if not any(c in password for c in symbols):
return False
if not any(c.isdigit() for c in password):
return False
if not any(c.islower() for c in password):
return False
if not any(c.isupper() for c in password):
return False
return
print(password)
f = open("demofile2.txt", "a")
f.write(password + "n")
f.close()
在验证密码是否满足所有要求时,您希望避免做额外的工作。在我的例子中,我只看了每个角色一次,每次看不同的角色时都会执行所需的检查。
在您提供的示例中,您实际上是在验证每个字符是否符合您对密码O(N*N(中每个字符的要求——不建议这样做。
最后,确保您了解密码要求。当试图验证一个字符同时为小写和大写时,您的逻辑似乎不正确。
编辑:作者在评论中澄清,为了使密码有效,该密码必须至少具有:
- 一个符号
- 一位
- 一个小写字符
- 一个大写字符
has_symbol = False
has_digit = False
has_lower = False
has_upper = False
for c in password:
if has_symbol and has_digit and has_lower and has_upper:
break
elif c in symbols:
has_symbol = True
elif c.isdigit():
has_digit = True
elif c.islower():
has_lower = True
elif c.isupper():
has_upper = True
if has_symbol and has_digit and has_lower and has_upper:
print(password)
f = open("demofile2.txt", "a")
f.write(password + "n")
f.close()
else:
return False
您应该注意时间复杂性,避免不必要的循环
这将帮助您:
from string import punctuation
def check_pass(password):
return all([any(filter(str.islower, password)),
any(filter(str.isupper, password)),
any(filter(str.isdigit, password)),
any(filter(lambda x: x in punctuation, password))
]
)
def save_password(password):
if check_pass(password):
with open("demofile2.txt", "a") as f:
f.write(password)
print(password)
else:
print('Not Accepted!')
# Test
save_password('1@cA')