Не в состоянии выйти, когда условие выполнено в питоне - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь сделать игру в крестики-нолики на 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 должна установить значение gameIsOn равным False, если кто-то выиграл игру. Но игра не заканчивается даже после того, как кто-то выиграл.

Может кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Вы передаете переменную 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
0 голосов
/ 09 сентября 2018

вы можете использовать sys.exit() и exit()

...