Python 如何在tic tac toe游戏中检查连续3个
我正在做一个tic-tac-toe游戏,并试图创建一个函数来检查一行中的3个相同点是否具有相同的输入“x”或“0”。我在尝试使用三行函数触发游戏时遇到了问题。我正试图找出一种简单的方法来实现这一点,这样当播放3个X或0时,所有的行或列都将被触发。。。这是我到目前为止所拥有的。这是在Python2.7.13中实现的 (这只是我认为应该相关的代码的一部分)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(
在我看来,将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