我一直遇到这个错误,我无法弄清楚是什么问题。
line 81, in determinant
determinant += newMatrix[0][x] * (-1)**(2+x) * determinant(reduce_matrix(newMatrix,1,x+1))
TypeError: 'int' object is not callable
以下是两个函数的代码:
def reduce_matrix(M, i, j):
newMatrix= [[x for x in y] for y in M]
try:
for k in range(len(newMatrix)):
del(newMatrix[k][j-1])
newMatrix.remove(newMatrix[i-1])
return newMatrix
except:
print ("Row or column not in matrix")
return M
def determinant(M):
newMatrix= [[x for x in y] for y in M]
if len(newMatrix) != len((newMatrix)[0]):
print ("Not a square matrix")
if (dimension(newMatrix))==(1,1):
return newMatrix
else:
determinant = 0
for x in range(len(newMatrix)):
determinant += newMatrix[0][x] * (-1)**(2+x) * determinant(reduce_matrix(newMatrix,1,x+1))
return determinant
答案 0 :(得分:0)
您正在使用determinant
作为函数名称和该函数内的局部变量。不好的想法,因为局部变量determinant
会影响函数名称,并且您试图以递归方式调用该函数。
当Python解释器看到determinant(reduce_matrix(newMatrix,1,x+1))
时,它所知道的唯一非阴影determinant
是int
,当您为其分配0
时,它就是det
神秘的错误信息。
使用其他内容(例如det = 0
#rest of code, suitably adjusted
)作为本地变量:
SELECT DISTINCT co.item_name
,SUBSTRING((
SELECT ',' + ca.attr_val AS [text()]
FROM [CONTRACT_ATTR] CA
WHERE CA.Item_Id = CO.Item_Id
AND ca.field_id = 239
ORDER BY co.item_name
FOR XML PATH('')
), 2, 1000) GM_PROG
FROM [dbo].[CONTRACT] CO;