如果你想跳出嵌套的 for 循环,你应该使用 break 语句(特别是如果你在真实代码中使用比 range(1) 更重复的东西),并且如果如果第一个 for 循环设置为 game_on = False,您不希望执行第二个 for 循环,那么您需要在此之前额外中断:
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')
您还应该考虑使用一些代码格式化工具(例如black,或我的该工具版本oitnb),因为您的最终if 语句仅缩进3 个位置,并且通常缺少空间使您的代码(IMO)难以阅读。