首页 > 解决方案 > 如何使用循环编写此代码(这是井字游戏代码 - 通过返回角色来确定游戏的获胜者)

问题描述

代码如下,它应该返回一个游戏的符号值,排除“”空格。我正在尝试缩短它,但我是编码新手,所以很难。

你输入的棋盘格式如下:[["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

标签: pythonloopstic-tac-toe

解决方案


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

推荐阅读