由于“短路运算符”,如果第一个参数为False,Python只会计算第二个参数。
我有这样的功能:
def calcule_deplacements_possibles(self, y, x, idx, pp):
idp = pp['id']
if pp['piece'] == 'abeille':
o = False
o = self.glissement_test(y, x, -2, 0, -1, -1, -1, +1, idp) or o
o = self.glissement_test(y, x, -1, +1, -2, 0, +1, +1, idp) or o
o = self.glissement_test(y, x, +1, +1, -1, +1, +2, 0, idp) or o
o = self.glissement_test(y, x, +2, 0, +1, +1, +1, -1, idp) or o
o = self.glissement_test(y, x, +1, -1, +2, 0, -1, -1, idp) or o
o = self.glissement_test(y, x, -1, -1, +1, -1, -2, 0, idp) or o
if o:
self.board[y][x]['b'][idx]['m'] = True
这是六边形类型的单元格,因此我需要尝试所有这些单元格,因为glissement_test()
会添加一些标记,因此它会始终被调用(此处为6次)。
如何“强制”这些调用并使用我的代码中的结果?
答案 0 :(得分:3)
循环浏览您要使用的每组值,然后查看它们是否全部发生:
tests = [self.glissement_test(y, x, *vals, idp) for vals in ((-2, 0, -1, -1, -1, 1),
(-1, 1, -2, 0, 1, 1),
(1, 1, -1, 1, 2, 0),
(2, 0, 1, 1, 1, -1),
(1, -1, 2, 0, -1, -1),
(-1, -1, 1, -1, -2, 0))]
if any(tests):
self.board[y][x]['b'][idx]['m'] = True
请注意,默认情况下整数文字为正数,因此您无需指定例如: +1
获得积极的一面。
答案 1 :(得分:0)
据我所知,没有办法在Python中关闭短路(也没有无短路的操作员)。
条件中的代码不应该""做"无论如何,因此大多数语言中的短路惯例。
首先计算self.glissement_test
的结果,将其分配给变量,然后选中<that variable> or o
。
答案 2 :(得分:0)
如果glissement_test()
以某种方式改变self
的状态,请不要在条件中使用它。它会使阅读代码的人感到困惑,并使你的意图不明确。
显式调用所有值,然后运行检查:
t1 = self.glissement_test(y, x, -2, 0, -1, -1, -1, +1, idp)
t2 = self.glissement_test(y, x, -1, +1, -2, 0, +1, +1, idp)
t3 = self.glissement_test(y, x, +1, +1, -1, +1, +2, 0, idp)
t4 = self.glissement_test(y, x, +2, 0, +1, +1, +1, -1, idp)
t5 = self.glissement_test(y, x, +1, -1, +2, 0, -1, -1, idp)
t6 = self.glissement_test(y, x, -1, -1, +1, -1, -2, 0, idp)
# Now do the check
if t1 or t2 or t3 or t4 or t5 or t6:
self.board[y][x]['b'][idx]['m'] = True