Python - 确定井字游戏的赢家

标签 python arrays loops boolean break

我正在尝试编写一个代码来确定井字游戏的获胜者。 (这是一个大学作业)

为此,我编写了以下函数:

This code only checks for horizontal lines, I haven't added the rest. I feel that this is something that needs a bit of hardcoding.


def iswinner(board, decorator):
    win = True
    for row in range(len(board)):
        for col in range(len(board)):
            if board[row][col] == decorator:
                win = True
            else:
                win = False
                break

其中“board”是大小为 n^2 的二维数组,“decorator”是“X”或“O”值

我希望完成的是该函数循环遍历二维数组的行。然后循环遍历每一行中的值。如果该元素与“装饰器”匹配,则它继续并检查下一个,但如果不匹配,则它从第一个循环中断并转到下一行。它会这样做,直到在同一行中找到 n 个元素。然后它会给出一个 boolean 值 True 否则为 False。

代码似乎没有这样做,即使我检查了以下“板”,它也给了我“真”的输出

check_list = [['O', 'X', 'X'],
              ['O', 'X', 'O'],
              ['O', 'X', 'X']]


非常感谢!

最好的事物,
赛义德

最佳答案

您可以只制作一组每一行,并检查其长度。如果它只包含一个元素,那么游戏就赢了。

def returnWinner(board):
    for row in board:
        if len(set(row)) == 1:
            return row[0]
    return -1

如果有一整行“O”,则返回“O”,如果有一行“X”,则返回“X”,否则返回 -1。

下面是一个完整的井字棋检查器的代码,应该不难理解,但不要犹豫,问:
import numpy as np

def checkRows(board):
    for row in board:
        if len(set(row)) == 1:
            return row[0]
    return 0

def checkDiagonals(board):
    if len(set([board[i][i] for i in range(len(board))])) == 1:
        return board[0][0]
    if len(set([board[i][len(board)-i-1] for i in range(len(board))])) == 1:
        return board[0][len(board)-1]
    return 0

def checkWin(board):
    #transposition to check rows, then columns
    for newBoard in [board, np.transpose(board)]:
        result = checkRows(newBoard)
        if result:
            return result
    return checkDiagonals(board)


a = [['X', 'A', 'X'],
     ['A', 'X', 'A'],
     ['A', 'X', 'A']]

print(checkWin(a))

请注意,无论您选择在井字游戏中放置什么符号(“O”和“X”与“bloop”和“!”一样好),并且对于任何大小的网格,只要它是一个正方形。

关于Python - 确定井字游戏的赢家,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39922967/

相关文章:

javascript - 循环中几个元素的 JS ArrowDown addEventListener(演示)

c++ - boost::python 传递 python::list 的引用

python - k 个最近邻,具有准确度得分和混淆矩阵的交叉验证

javascript - 如何制作具有属性的 JavaScript 数组?

php - 使用php按第5维值中的日期对5维数组进行排序?

PHP - 遍历字母

javascript - 如何从文本区域获取特定值?

python - 如何正确打开和关闭mysql连接

python - 将 3D Numpy 数组写入 CSV 文件

java - 无法处理二维对象数组