我正在尝试编写多个if语句来检查密码是否满足所有条件,而不是使用if-elif语句,该语句有效,但一次只能验证一个条件。
我的代码似乎无效。当我输入一个包含字母和数字但太长/太短的密码时,代码的输出会告诉我它太长/太短,但还会触发“其他”条件。该代码然后不会环回。
请问有人可以帮助我理解这里的概念吗?非常感谢。
import re
while True :
password = input('Enter a password')
if not len(password) >= 6:
print('password too short')
if not len(password) <= 12:
print('password too long')
if not re.search(r'[a-z]', password):
print('password must contain at least a lowercase alphabet')
if not re.search(r'[0-9]', password):
print('password must contain at least a number')
else:
print('your password is fine')
break
答案 0 :(得分:6)
您想写类似的东西
import re
while True :
ok = True
password = input('Enter a password')
if not len(password) >= 6:
print('password too short')
ok = False
if not len(password) <= 12:
print('password too long')
ok = False
if not re.search(r'[a-z]', password):
print('password must contain at least a lowercase alphabet')
ok = False
if not re.search(r'[0-9]', password):
print('password must contain at least a number')
ok = False
if ok:
print('your password is fine')
break
答案 1 :(得分:3)
else
仅适用于最后一个if
!
您可以选择将所有消息收集在列表中并打印出来,或者如果列表为空,则发出“ ok”消息并中断循环。因此,if
将添加到列表中而不显示。最后一个else
是if,它检查列表是否为空。在if
之后,遍历列表并打印每个元素。您的程序应该以这种方式正好长3行。在我将其发布到代码中之前,我会让你take一口。)
答案 2 :(得分:0)
ELSE语句用作IF / ELIF语句链的“全部捕获”。
您的示例无法按预期运行的原因是,您的ELSE仅适用于您编写的最后一个IF。您是正确的,使用ELIF可以解决此问题,但不会按照您的意图进行操作。
为使此逻辑起作用,建议您在任何IF语句之前创建一个新变量'valid = True'。然后在每个IF下打印错误消息并设置有效= False。
然后,您可以将ELSE替换为
if valid == True:
希望这会有所帮助