带要求的密码生成器-如果所有要求都是真的,我想打印(密码)并保存在文本文件中.但我不知道怎么做


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')

最新更新