程序没有突破for循环

时间:2018-04-28 20:00:39

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

如果项目> = 32,好像我的代码没有突破for循环。我已经使用调试器进行了检查,并且胜利确实改为" True"当值为32时,循环不会中断。

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

3 个答案:

答案 0 :(得分:0)

你打破了第二个循环而不是第一个循环。 你需要:

for row in grid:
 if won:
      break

答案 1 :(得分:0)

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

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 :(得分:0)

正如其他人所指出的那样,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