所以我在我的tic tac toe游戏中有多组作为胜利条件:
win1 = {1,2,3}
win2 = {4,5,6}
win3 = {7,8,9}
win4 = {1,5,9}
win5 = {7,5,3}
win6 = {1,4,7}
win7 = {2,5,8}
win8 = {3,6,9}
其中每个数字是tic tac toe网格上的位置。我还有一个列表,可以添加O和X播放器的每个位置。我目前检查玩家是否获胜的方式是:
def checker():
if (win1 or win2 or win3 or win4 or win5 or win6 or win7 or win8).issubset(jonesO):
print 'O wins!'
return 0
elif (win1 or win2 or win3 or win4 or win5 or win6 or win7 or win8).issubset(jonesX):
print 'X wins!'
return 1
elif (tie).issubset(bob):
print 'IT IS A TIE!!!!!'
return 2
但我发现.issubset只检查第一组而没有别的。如何更改它,以便将elif()中的所有集合和if检查为子集?
答案 0 :(得分:1)
在Python中,a or b or c
评估三个中的第一个是真实的(如果没有真正的,那么它是最后一个)。在您的情况下,这将是第一个非空set
:win1
。对于您的情况,您可以使用any
:
if any(x.issubset(jonesO) for x in (win1, win2, win3, win4, win5, win6, win7, win8)):
print 'O wins!'
答案 1 :(得分:0)
isSubSet 是一项代价高昂的操作,您应该使用set的 union 运算符。
any(jonesO==jonesO.union(x) for x in (win1, win2, win3, win4, win5, win6, win7, win8))
如果任何获胜组合属于移动设置,则此条件将返回 True 。否则将返回 False 。
基本上,如果join set已经是其他set
的子集,则两个set的并集将返回相同的set