我正在用python做一个简单的井字游戏。我陷入困境的一点是验证是否有人赢了。我正在努力使它尽可能的简短和简单,并且易于调整,这样我就可以将该技术用于其他一些项目想法。我正在分块完成整个程序,现在只需要这部分的帮助。下面是我正在尝试做的一个例子:
我知道我甚至可以为select case的某个版本编写一系列if-else语句,但我正在尝试看看python中是否有一种简单的方法,可以使代码适应动态数据集,从而完成同样的工作
我首先创建一个令牌系统,并将其绑定到我的tic-tac趾板上的位置。当玩家选择占据1-9的位置时,相应的令牌被传递到玩家令牌列表,并从令牌列表中移除该项。这有助于防止单元格被覆盖,并跟踪每个玩家单元格的位置
tokens = [1,2,3,4,5,6,7,8,9]
player_tokens = []
keys = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[3,5,7]]
在每个回合中,我都需要一个函数来比较列表标记,并查看它是否包含一个匹配的密钥集。如果它这样做,它将返回一个胜利
tokens = [3,5,6,7,8]
player_tokens = [1,2,4,9]
keys = [[1,2,3],[4,5,6],[7,8,9],[1,4,7],[2,5,8],[3,6,9],[1,5,9],[3,5,7]]
谢谢你的建议
在这种情况下,我建议使用实际的python集
其中
.issubset
将执行我们关心的检查:有一个Python标准库
itertools
,它非常适合这些东西。这里可以使用combinations
函数:threes
成为player_tokens
中所有唯一3元素元组的列表,可用于检查“获胜”键:输出:
您可以使用
any
来查看布尔列表中是否有任何一个是True
(也就是说,如果移动创建了一个三位组合,这是一个胜利)您应该将
player_tokens
更改为一个集合。将其初始化为set()
,并使用add而不是append。 要检查,请使用player_tokens.contains(keys[i])
在控制台中尝试
help(set.contains)
要检查所有u可以使用
any(player_tokens.contains(keys[i]) for i in len keys)
相关问题 更多 >
编程相关推荐