我正在为我的python 3类制作一个tic tac程序,并想知道为什么我的计算机win move不能正常工作。似乎‘或’in 'list‘函数没有得到正确的评估。是否有其他方法来完成评估条件?
def winningMoves():
print('starting computer winning move')
i = [1, 2, 3, 7]
if (1 and 2 in i) or (5 and 7 in i) or (6 and 9 in i):
drawBoardlist[3] = computerCharacter
elif (2 and 3 in i) or (4 and 7 in i) or (5 and 9 in i):
drawBoardlist[1] = computerCharacter
elif (1 and 2 in i) or (3 and 5 in i) or (8 and 9 in i):
drawBoardlist[7] = computerCharacter
elif (7 and 8 in i) or (1 and 5 in i) or (3 and 6 in i):
drawBoardlist[10] = computerCharacter
else:
print('No winning moves')
return发布于 2014-12-14 18:20:45
(1 and 2 in i)被解析为((1) and (2 in i))。相反,你可能是说
((1 in i) and (2 in i))对于所有其他条件也是如此。
例如,比较,
In [47]: i = [1, 2, 3, 7]
In [48]: (100 and 2 in i)
Out[48]: True
In [49]: ((100 in i) and (2 in i))
Out[49]: False运算符优先表显示and的优先级低于in。因此,in比and绑定得更紧密,因此在and绑定1和(2 in i)以形成1 and (2 in i)之前,in与(2 in i)结合得更紧密。
这就是为什么(1 and 2 in i)被解析为((1) and (2 in i))的原因。
顺便说一句,检查一个项目是否在列表中是一个O(n)操作。如果你经常这样做,就像你看起来的那样,你最好先把列表变成一个集合,因为在一个集合中检查成员资格是O(1)。
iset = set(i)
if (1 in iset and 2 in iset)或
if iset.issuperset((1, 2))https://stackoverflow.com/questions/27472458
复制相似问题