【问题标题】:Multiple if statements - can "else" still be used?多个 if 语句 - 仍然可以使用“else”吗?
【发布时间】:2019-03-25 21:50:35
【问题描述】:

我正在尝试编写多个 if 语句来检查密码是否满足所有条件,而不是使用 if-elif 语句,它有效但一次只验证一个条件。

我的代码似乎不起作用。当我输入一个包含字母和数字但太长/太短的密码时,代码的输出告诉我它太长/太短但也会触发“else”条件。然后代码不会循环回来。

请谁能帮我理解这里的概念?非常感谢。

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

【问题讨论】:

  • 在每个 if 后使用关键字continue 表示密码错误。在这种情况下,while 循环将从头开始,省略进一步的命令。另外,删除 else
  • @Slowpoke 你不会看到 all 错误,如果你使用1234 的密码,你只会触发“太短”而不是其他错误
  • @PatrickArtner 好的,明白了。

标签: python if-statement


【解决方案1】:

你想写类似的东西

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

【讨论】:

    【解决方案2】:

    else 仅适用于最后一个if

    相反,您可以收集列表中的所有消息并打印它们,或者如果列表为空,则发出“ok”消息并中断循环。所以ifs 将添加到列表中而不是打印。最后一个else 将是一个检查列表是否为空的if。经过if,迭代列表并打印每个元素。这样,您的程序应该正好长 3 行。在我将它发布到代码中之前,我会让你先试一试:)

    【讨论】:

      【解决方案3】:

      ELSE 语句用作 IF/ELIF 语句链的“全部”。

      您的示例未按预期工作的原因是您的 ELSE 仅适用于您编写的最后一个 IF。您是正确的,使用 ELIF 可以解决此问题,但不会按照您的意图行事。

      为了使这个逻辑起作用,我建议在您的任何 IF 语句之前创建一个新变量“valid = True”。然后在每个 IF 下打印您的错误消息并设置 valid = False。

      然后您可以将您的 ELSE 替换为 if valid == True:

      希望对你有帮助

      【讨论】:

      • 这与 FFF 建议代码解决方案完全相同 - 只是文本更多,代码更少......
      猜你喜欢
      • 2016-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 2023-03-15
      • 2016-03-11
      相关资源
      最近更新 更多