Если вы хотите выйти из вложенного for
l oop, вы должны использовать оператор break (особенно если вы используете что-то более повторяющееся, чем range(1)
в вашем реальном коде), и если вы не хотите, чтобы второй для l oop выполнялся, если первый для l oop устанавливает 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) уменьшить секунду для l oop выполнение
Вы можете использовать одну переменную как для управления выходом из while, так и для предотвращения выполнения второй для l oop:
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) использовать функцию и ее возвращаемое значение для выхода из внешнего l oop:
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) трудным для чтения.