多个if语句-仍然可以使用“ else”吗?

时间:2018-10-21 19:06:32

标签: python if-statement

我正在尝试编写多个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

3 个答案:

答案 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:

希望这会有所帮助