我正在尝试编写代码来验证您访问程序的密码。密码至少应包含6个字符,并具有1个大写字母,1个小写字母,1个数字和1个标点符号。这就是我现在拥有的:
def main():
while True:
password = input("Please enter the desired password: ")
if not password.islower():
print("This is NOT a valid password.")
elif not password.isupper():
print("This is NOT a valid password.")
elif not password.isdigit():
print("This is NOT a valid password.")
elif not len(password) < 6:
print("This is NOT a valid password.")
else:
print("This is a valid password.")
break
main()
由于某种原因,即使我写了一个有效的密码,它也会一直显示密码无效,有人知道为什么会这样吗?另外,如何使代码检测到我编写的密码中至少包含1个标点符号?谢谢!
答案 0 :(得分:0)
您的代码做错了。也就是说,您要检查整个密码是否较低,然后再次检查整个密码是否较高。因此,它始终显示not valid
。但是您需要检查的是,密码是否包含单个小写字符,是否包含一个大写字符,是否包含一个数字,并且长度应至少为6。
为此,您必须使用any()
,如果iterable中的任何项目为true,则返回True,否则返回False。
def main():
while True:
password = input("Please enter the desired password: ")
if not any(p.islower() for p in password):
print("This is NOT a valid password")
elif not any(p.isupper() for p in password):
print("This is NOT a valid password")
elif not any(p.isdigit() for p in password):
print("This is NOT a valid password")
elif len(password) < 6:
print("This is NOT a valid password")
else:
print("This is a valid password")
break
main()
答案 1 :(得分:0)
函数islower()
,isupper()
,isdigit()
检查字符串的 all 元素是否满足该条件。因此,例如在使用islower()
时,您要检查字符串中的所有字符是否都为小写。
在这种情况下,我将使用正则表达式检查每个条件。使用正则表达式,您可以自定义要检查的所有规则,并且学习起来并不难(请参阅文档here)
使用现有物品的例子
import re
password = input('Write a password: ')
if re.search('[A-Z]+', password) is None:
print('invalid password!')
elif re.search('[a-z]+', password) is None:
print('invalid password!')
elif re.search('[0-9]+', password) is None:
print('invalid password!')
elif re.search('[' + string.punctuation + ']+', password) is None:
print('invalid password!')
elif len(password) < 6
print('invalid password!')
else:
print('valid password!!')