我现在已经问了好几次这个问题了。然而,答案似乎并不能解决我的问题。 我得到一个类型错误,“tuple”对象不可调用。即使列表中的元组以正确的方式用逗号分隔,我还是得到了这个结果:
def aiMove(b):
movesList = moves(b, -1)
heuristic = []
if movesList:
for m in movesList:
bt = copy.deepcopy(b)
print("bt: ", bt)
bt[m[0]][m[1]] = -1
h = heat[m[0]][m[1]]
for move in m[2]:
i=1;
try:
while (-1* bt[m[0] + i*move[0]][m[1] + i*move[1]] < 0):
bt[m[0] + i*move[0]][m[1] + i*move[1]] *= -1
bt[m[0] + i*move[0]][m[1] + i*move[1]] += -1
i += 1;
except IndexError:
continue
alpha = max(float('-inf'), alphabeta(bt, depth-1, h, float('-inf'), float('inf'), 1))
heuristic.append(alpha)
if (float('inf') <= alpha):
break
selectedMove = movesList[int(heuristic.index(max(heuristic)))]
move(b, selectedMove, -1)
else:
print ("The AI can't move!")
return []
例如,selectedMove是(3,2,[(0,1)])。函数的作用是:返回与selectedMove的最终值类似的移动列表。它是一个用于游戏树搜索的alpha-beta剪枝实现。函数的作用是:将工件移动到该位置,并更新电路板,完成计算机的转动。 变量b表示当前游戏板上的值 我尝试的每次转换(即强制selectedMove本身是一个列表等)都会在“move(b,selectedMove,-1)”行中给出相同的错误
有人看到可能出了什么问题吗?
Microsoft Windows [Version 6.1.7600]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python33\lib\tkinter\__init__.py", line 1489, in __call__
return self.func(*args)
File "C:\Users\Loek Janssen\Documents\GitHub\CITS1401-Project\DrawBoard.py", line 131, in eventfun
placePiece(x, y, b, n)
File "C:\Users\Loek Janssen\Documents\GitHub\CITS1401-Project\DrawBoard.py", line 119, in placePiece
project2.aiMove(b)
File "C:\Users\Loek Janssen\Documents\GitHub\CITS1401-Project\project2.py", line 225, in aiMove
move(b, selectedMove, -1)
TypeError: 'tuple' object is not callable
在这一行中,您将使用名称
move
来引用m[2]
的元素:但是稍后,您尝试调用您调用的函数
move
:一旦您看到这一点,错误消息就完全有意义了:
因为名称
move
不再指函数,而是指它在循环中绑定到的最后一个元组。比修复这个特殊的错误(如果您还想使用变量名来引用函数,请不要使用
move
)更重要的是识别解释器是如何确切地告诉您问题是什么的。它说元组是不可调用的;在它抱怨的代码行中,您调用的是
move
;因此move
是元组,您的下一步应该是添加print(move)
(或者print(type(move), repr(move))
,如果您想知道的话)来查看它实际上是什么元组。相关问题 更多 >
编程相关推荐