【问题标题】:Python For If ElsePython For If Else
【发布时间】:2014-08-14 22:51:27
【问题描述】:

我刚刚意识到这段代码并没有像我希望的那样工作......

for i in [0,2,4]:
    if i%2==0:
        print i
else:
    print "There are no EVEN #s"

那么编码这种结构的最佳方法是什么

如果“if”语句在“for”循环的所有迭代中从未变为真,则运行“else”语句代码

【问题讨论】:

  • 如果您从不使用break(或return),else 将始终运行。
  • 为了避免for 循环中的else 语句,您需要break 循环。您需要一个以False 开头的状态变量,在条件块中设置为True,然后是条件break
  • 我以前使用过这个逻辑,但出于好奇,还有其他使用 try,except, catch 的方法吗?什么的
  • @Riddler 只需在找到第一个偶数时添加break。当然,还有其他方法可以做到这一点。此外,实际上包含您希望代码如何工作以及它如何工作会有所帮助。
  • 你需要实现你的逻辑。一种方法是先计算偶数,然后在循环后检查计数。或者你可以在找到偶数时设置标志。

标签: python if-statement for-loop


【解决方案1】:

我认为更“pythonic”的方法是过滤列表并检查过滤后的列表是否有任何元素来确定要打印的内容:

lst = [0, 2, 4]
filtered = [x for x in lst if x%2 == 0]
if filtered:
    for item in filtered:
        print item
else:
    print "No evens"

【讨论】:

    【解决方案2】:

    因为ifelse 不在同一级别的范围内,所以代码无法正常工作。但是,您可能正在尝试使用 Python 中的 for...else 语法。有关这方面的信息,请参阅here。要使用for...else 语法,您需要在for 循环内有一个break 语句。如果它中断,则不调用else,否则在循环完成后调用else

    但是,如果您没有 break 语句,则 else 始终运行。

    这是您的代码,已更正:

    for i in [0,2,4]:
        if i%2==0:
            print i
            break
    else:
        print "There are no EVEN #s"
    

    一旦循环遇到偶数,循环就会中断。否则,如果循环将完全执行(即遍历整个列表),那么它也会运行else。仅供参考,这里是奇数列表上的循环:

    for i in [1,3,5]:
        if i%2==0:
            print i
            break
    else:
        print "There are no EVEN #s"
    

    【讨论】:

      【解决方案3】:

      只需在 if 语句中设置一个标志,您可以在 for 循环完成运行后检查该标志。

      例如

      flag = False
      for i in [0,2,4]:
          if i%2==0:
              print i
              flag = True
      
      if not flag:
          print "There is an ODD #"
      

      【讨论】:

      • 在开始时让flag = True 和在循环集flag = False 中的if 语句中可能更pythonic,所以在最后的if 语句中你可以有if flag 而不是if not flag
      【解决方案4】:

      如果您只想检查是否存在偶数而不关心值,请使用any

      if any(i % 2 == 0 for i in [0,2,4,5]):
              print "The list has even numbers"          
      else:
          print "There are no EVEN #s"
      

      any 将在找到任何偶数后立即返回 True,如果列表不包含偶数,则返回 False。

      【讨论】:

      • 这是一个不错的解决方案。
      • @Newb,谢谢,这可能不是 OP 想要的,但值得学习,并且毫无疑问在某个阶段会有用。
      • 是的,这可能不是很切题,但至少我学到了一些新东西。
      猜你喜欢
      • 2017-11-27
      • 1970-01-01
      • 2023-03-27
      • 2023-04-02
      • 2021-09-16
      • 2019-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多