如果项目> = 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
答案 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