Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在tic tac toe游戏中检查连续3个_Python - Fatal编程技术网

Python 如何在tic tac toe游戏中检查连续3个

Python 如何在tic tac toe游戏中检查连续3个,python,Python,我正在做一个tic-tac-toe游戏,并试图创建一个函数来检查一行中的3个相同点是否具有相同的输入“x”或“0”。我在尝试使用三行函数触发游戏时遇到了问题。我正试图找出一种简单的方法来实现这一点,这样当播放3个X或0时,所有的行或列都将被触发。。。这是我到目前为止所拥有的。这是在Python2.7.13中实现的 (这只是我认为应该相关的代码的一部分) 在我看来,将X存储为+1和O存储为-1可能更有意义,这样您就可以轻松地进行算术运算来检查游戏是否结束 例如: def three_in_row(

我正在做一个tic-tac-toe游戏,并试图创建一个函数来检查一行中的3个相同点是否具有相同的输入“x”或“0”。我在尝试使用三行函数触发游戏时遇到了问题。我正试图找出一种简单的方法来实现这一点,这样当播放3个X或0时,所有的行或列都将被触发。。。这是我到目前为止所拥有的。这是在Python2.7.13中实现的

(这只是我认为应该相关的代码的一部分)


在我看来,将X存储为+1和O存储为-1可能更有意义,这样您就可以轻松地进行算术运算来检查游戏是否结束

例如:

def three_in_row(b):
    xWin = check_winner(b,3)
    oWin = check_winner(b,-3)
    return xWin | oWin

def check_winner(b, valToCheck):
    foundWin = any(sum(r) in {valToCheck} for r in b)  # check rows
    # now check columns
    for i in range(3):
        foundWin = foundWin | (sum([b[j][i] for j in range(3)]) == valToCheck)
    # now check diagonals
    foundWin = foundWin | (sum([b[i][i] for i in range(3)]) == valToCheck)
    foundWin = foundWin | (sum([b[i][2-i] for i in range(3)]) == valToCheck)
    return foundWin
感谢Blender提供了以下更简洁的方法:

def three_in_row(b):
    return any(sum(r) in {3, -3} for r in b)

检查的正确语法为:

b[0][0] == 'x' and  b[0][1] == 'x' and b[0][2] == 'x'
或者(更简洁地说):

您在支票之前还缺少一份报税表,如:

return b[0][0] == b[0][1] == b[0][2] == 'x'
无论如何,您的代码不会遍历所有行。一个可能的修正是:

def three_in_row(b):
    for row in rage(0, 3):
        if b[row][0] == b[row][1] == b[row][2] == 'x':
            return True
    return False

在(b)列中做一个三行应该相当容易(在b[n][column]中更改b[row][n]),手动检查两条对角线也是如此。

不会像那样连锁
if b[0][0]==b[0][1]==b[0][2]='x'
将满足您的期望。我建议您使用if和ifelse语句来检查所有可能的场景,并返回任何获胜结果是否匹配,如果我正确回忆,python中的语句成本不会太高,那么您的程序的速度应该不会受到影响。这也应该使代码易于阅读,这是python中的主要原则
any(b中r的{3,-3}中的sum(r)
有点干净。很好,我喜欢!我将添加到答案中。此解决方案是否检查对角线?否,这仅根据OP原始问题检查行。它不检查列或对角线“一行三行”,因为它不只是指表中的行。
b[0][0] == b[0][1] == b[0][2] == 'x'
return b[0][0] == b[0][1] == b[0][2] == 'x'
def three_in_row(b):
    for row in rage(0, 3):
        if b[row][0] == b[row][1] == b[row][2] == 'x':
            return True
    return False