Как мне написать этот код, используя циклы (это код Ti c Ta c Toe - определение победителя игры путем возвращения их персонажа) - PullRequest
0 голосов
/ 20 апреля 2020

Код приведен ниже, он должен возвращать значение символа, которое в игре исключает "" пробелы. Я пытаюсь сократить его, но я новичок в кодировании, поэтому мне трудно.

Плата, которую вы вводите в следующем формате: [["X", "", "O"], ["O", "X", ""], ["O", "" , "X"]]

def winner(board):

    term00 = board[0][0]
    term01 = board[0][1]
    term02 = board[0][2]
    term10 = board[1][0]
    term11 = board[1][1]
    term12 = board[1][2]
    term20 = board[2][0]
    term21 = board[2][1]
    term22 = board[2][2]


    if term00 == term01 == term02:
        if term00 == " ":
            pass
        else:
            return term00
    elif term00 == term10 == term20:
        if term00 == " ":
            pass
        else:
            return term00
    elif term02 == term12 == term22:
        if term02 == " ":
            pass
        else:
            return term02
    elif term20 == term21 == term22:
        if term20 == " ":
            pass
        else:
            return term20
    elif term00 == term11 == term22:
        if term00 == " ":
            pass
        else:
            return term00
    elif term02 == term11 == term20:
        if term00 == " ":
            pass
        else:
            return term00

    return None

1 Ответ

0 голосов
/ 20 апреля 2020

Как только вы перейдете к более функциональным аспектам Python, вы увидите, как это обычно приводит к более сжатому коду. Например:

def winner(board): 
    for player in ["X", "O"]:  
        # Rows
        res  = any(all(col == player for col in row) for row in board)  
        # Columns
        res |= any(all(row == player for row in col) for col in zip(*board)) 
        # Main diagonal
        res |= all(row[i] == player for i, row in enumerate(board))  
        # Secondary diagonal
        res |= all(row[~i] == player for i, row in enumerate(board)) 
        if res: 
            return player 
    return None 
...