我如何使用循环编写此代码(这是一个Tic-Tac-Toe代码,通过返回角色来确定游戏的赢家)

2024-03-29 12:07:21 发布

您现在位置:Python中文网/ 问答频道 /正文

代码如下,它应该返回游戏中的符号值,不包括“”空格。我试图缩短它,但我是新的编码,所以有一个困难的时间

输入其int的电路板的格式如下:[“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条回答
网友
1楼 · 发布于 2024-03-29 12:07:21

一旦您了解了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 

相关问题 更多 >