我有一个代表 tic tac toe board 的列表 .
board = [1,2,3,4,5,6,7,8,9]
我有一个嵌套列表中的胜利组合列表 .
wins = [[7,8,9],[4,5,6],[1,2,3],[7,4,1],[8,5,2],[9,6,3],[1,5,9],[3,5,7]]
我有一个迭代 wins
列表的函数 . 如果 board
列表中存在 wins
列表的组合,则该函数应返回true .
例:
board = [4,5,6,9]
def win(board):
wins = [[7,8,9],[4,5,6],[1,2,3],[7,4,1],[8,5,2],[9,6,3],[1,5,9],[3,5,7]]
for w in wins:
if w in board:
return True
return False
这应该(我认为)返回True,因为胜利列表中的3位数字在董事会列表中,但由于某种原因它会继续返回false .
我错过了我的代码吗?
谢谢
4 回答
首先,它只检查第一个'win'组合(
[7,8,9]
),然后只返回false . 其次,您不能使用in
运算符来检查它 .因此,如果您想检查组合是否在板上(按相同顺序):
如果订单无关紧要:
您的代码有两个问题:
w in board
不检查w
的各个元素是否在board
中,但是w
,作为一个整体,是否是board
的元素,而不是w
的情况 .只要第一个
w
无效(假设第一次检查有效),你就会返回False
,而不是在你测试完所有w
之后相反,您可以使用嵌套的any和all来检查是否所有元素都在_2390817中 .
或者,由于顺序无关紧要且每个元素只出现一次,您可以使用
sets
(请注意wins
中的内部{...}
)并使用issubsetof:你需要让你的返回假,因为你在第一次迭代后结束循环
您需要检查棋盘中的元素是否与胜利元素匹配 . 您当前的代码将始终返回False,因为它检查[4,5,6,9]是否在win元素中 . 检查董事会中的元素是否与获胜组合相匹配的一种方法是将所有元素与win中的所有元素相交: