首页 > 解决方案 > 在python中满足条件时无法退出

问题描述

我正在尝试在 python3 中制作井字游戏。我能够让游戏正常运行,但是当有人赢得游戏时,Ì 无法让代码终止。我尝试了很多方法,但都没有奏效:

def find_winner(board,gameIsOn): 
if ((board[7]==board[8]==board[9]) and board[7]!= '') or ((board[4]==board[5]==board[6]) and board[4]!= '') or ((board[1]==board[2]==board[3]) and board[7]!= ''):
    gameIsOn = False
    print('winner!')


elif ((board[7]==board[4]==board[1]) and board[7]!= '') or ((board[8]==board[5]==board[2]) and board[8]!= '') or ((board[9]==board[6]==board[3]) and board[9]!= ''):
    gameIsOn = False
    print('winner!')


elif ((board[7]==board[5]==board[3]) and board[7]!= '') or ((board[9]==board[5]==board[1]) and board[7]!= ''):

    gameIsOn = False
    print('winner!')

这是我用来查明是否有人获胜的功能。如果有人赢了,则gameIsOn变量设置为。False否则就是True

while(gameIsOn):
if(active_Player == player_1):
        position = int(input('Position?'))
        player_input(board,active_Player,position)
        print_board(board)
        find_winner(board,gameIsOn)
        active_Player = player_2           
else:
        position = int(input('Position?'))
        player_input(board,active_Player,position)
        print_board(board)
        find_winner(board,gameIsOn)**

上面的代码是游戏的主体。忽略其他函数,如果有人赢得了比赛,该find_winner函数应该将 的值设置为gameIsOnFalse但即使有人获胜,游戏也不会终止。

有人可以帮忙吗?

标签: python-3.xwhile-loop

解决方案


您将gameIsOn变量传递给find_winner函数,它在那里成为局部变量,因此更改gameIsOn不会反映给调用者。您应该让 find_winner 将布尔值返回给调用者,并让调用者将返回值分配给gameIsOn其范围内的变量。

def find_winner(board):
    if ((board[7]==board[8]==board[9]) and board[7]!= '') or ((board[4]==board[5]==board[6]) and board[4]!= '') or ((board[1]==board[2]==board[3]) and board[7]!= ''):
        return False

    elif ((board[7]==board[4]==board[1]) and board[7]!= '') or ((board[8]==board[5]==board[2]) and board[8]!= '') or ((board[9]==board[6]==board[3]) and board[9]!= ''):
        return False

    elif ((board[7]==board[5]==board[3]) and board[7]!= '') or ((board[9]==board[5]==board[1]) and board[7]!= ''):
        return False
    return True

gameIsOn = True
while(gameIsOn):
    if(active_Player == player_1):
        position = int(input('Position?'))
        player_input(board,active_Player,position)
        print_board(board)
        gameIsOn = find_winner(board)
        active_Player = player_2           
    else:
        position = int(input('Position?'))
        player_input(board,active_Player,position)
        print_board(board)
        gameIsOn = find_winner(board)
        active_Player = player_1

推荐阅读