【问题标题】:Program not breaking out of for loop程序没有跳出for循环
【发布时间】:2018-04-28 20:00:39
【问题描述】:

如果 item>=32,我的代码似乎没有跳出 for 循环。我已经用调试器进行了检查,当值为 32 时,won 确实更改为“True”,但循环不会中断。

def check_if_won (grid):
 """return True if a value>=32 is found in the grid; otherwise False"""
 for row in grid:
  for item in row:
   if item>=32:
    won=True
    break
   else:
    won=False
 return won
if __name__ == "__main__":
 grid1 = [[4,2,32,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
 print(check_if_won(grid2))

如果运行程序返回 False

【问题讨论】:

  • 你正在打破内循环,但不是外循环。无论如何——为什么要中断?为什么不直接返回?
  • 因为如果不是True就需要返回False?不完全确定这个逻辑是否有意义,我只是错过了简单的方法吗?
  • 一个函数可以有多个返回语句。一旦你发现你应该返回 true ——返回 true 而不是跳出循环并稍后返回 true。
  • 知道了,谢谢。

标签: python-3.x for-loop break


【解决方案1】:

你正在打破内循环,而不是外循环。但是您可以避免一起休息,然后无论如何都返回。这将解决您的问题并创建更清晰、更易于阅读的代码。

def check_if_won (grid):
 """return True if a value>=32 is found in the grid; otherwise False"""
 for row in grid:
  for item in row:
   if item>=32:
    return True
 return False
if __name__ == "__main__":
 grid1 = [[4,2,32,2],[2,8,16,8],[16,32,8,4],[4,8,4,2]]
 print(check_if_won(grid2))

【讨论】:

    【解决方案2】:

    你打破了第二个循环,但没有打破第一个。 你需要:

    for row in grid:
     if won:
          break
    

    【讨论】:

      【解决方案3】:

      正如其他人指出的那样,break 只会跳出直接循环。您可以利用 python 的any() 来避免中断并稍微简化,例如:

      def check_if_won(grid):
          """return True if a value>=32 is found in the grid; otherwise False"""
          if any(item >= 32 for row in grid for item in row):
              won = True
          else:
              won = False
          return won
      

      或者更简洁:

      def check_if_won(grid):
          """return True if a value>=32 is found in the grid; otherwise False"""
          if any(item >= 32 for row in grid for item in row):
              return True
          return False
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多