打破'while'和'for'的嵌套循环



当我使用game_on= False时,它应该结束游戏(结束 while 循环(,但我发现第二个 for 循环是用"输入仓位"的输出执行的。 当 if 循环计算为 True 时,我想退出这个嵌套循环(并结束游戏(。我也在 if 循环中使用了 break 语句,但我发现了相同的结果。

game_on=True
while game_on:
for i in range(1):
position=int(input("Enter your position"))
place_marker(game_board,p1_marker,position)
display_board(game_board)
if win_check(game_board,p1_marker):
print("Player 1 wins")
game_on=False

for i in range(1):
position=int(input("Enter your position"))
place_marker(game_board,p2_marker,position)
display_board(game_board)
if win_check(game_board,p2_marker):
print("Player 2 wins")
game_on=False

当你在 if 语句中用户break时,你也在 for 循环中,所以你只是打破了 for 循环。break只退出它可以找到的最内层循环(在嵌套循环的情况下(。您需要的是当您要退出的 while-loop 是运行它时break会找到的第一个循环时使用break

game_on=True
while game_on:
for i in range(1):
....
if win_check(game_board,p1_marker):
print("Player 1 wins")
game_on=False
if(not game_on):
break
for i in range(1):
...

如果你想打破嵌套的for循环,你应该使用 a break 语句(特别是如果你在实际代码中使用比range(1)更重复的东西(,如果你不希望第二个 for 循环在第一个 for 循环设置时执行game_on = False,那么你需要在此之前和额外的中断:

game_on = True
while game_on:
for i in range(1):
position = int(input("Enter your position"))
place_marker(game_board,p1_marker,position)
display_board(game_board)
if win_check(game_board,p1_marker):
print("Player 1 wins")
game_on = False
break
if not game_on:
break
for i in range(1):
.
.

但是,这通常会导致代码难以维护和/或阅读,并且根据情况和代码的其余部分,有几种替代策略可能更好:

1( 减少循环执行的秒数

您可以使用一个变量来控制 while 的退出,并防止第二个 for 循环执行:

test_times = 1
while test_times > 0:
for i in range(test_times):
position = int(input("Enter your position"))
place_marker(game_board,p1_marker,position)
display_board(game_board)
if win_check(game_board,p1_marker):
print("Player 1 wins")
test_times = 0
break
for i in range(test_times):
.
.

2( 使用函数并从嵌套循环返回

def game():
while True:
for i in range(1):
position = int(input("Enter your position"))
place_marker(game_board,p1_marker,position)
display_board(game_board)
if win_check(game_board, p1_marker):
print("Player 1 wins")
return
for i in range(1):
.
.
game()

3( 使用函数及其返回值退出外循环:

def game_on():
for i in range(1):
position = int(input("Enter your position"))
place_marker(game_board,p1_marker, position)
display_board(game_board)
if win_check(game_board, p1_marker):
print("Player 1 wins")
return False
for i in range(1):
position=int(input("Enter your position"))
place_marker(game_board,p2_marker,position)
display_board(game_board)
if win_check(game_board,p2_marker):
print("Player 2 wins")
return False
return True
while game_on():
pass

4( 引发异常以突破嵌套循环

class GameOver(Exception):
pass
try:
while True:
for i in range(1):
position = int(input("Enter your position"))
place_marker(game_board,p1_marker,position)
display_board(game_board)
if win_check(game_board, p1_marker):
raise GameOver(1)
for i in range(1):
.
.
except GameOver as e:
print(f'Player {e} wins')

您还应该考虑使用一些代码格式化工具(例如黑色,或该工具的我的版本oitnb(,因为您的最终if语句仅缩进3个位置,并且通常缺乏空间,使您的代码(IMO(难以阅读。

相关内容

  • 没有找到相关文章

最新更新