0

我正在尝试编写一个程序来查找 N*N 矩阵的行列式,这是我的代码:

from copy import deepcopy

n = input()
myMatrix = []

for i in range(n):
    myMatrix.append(raw_input().split())

def findMinor(matrix, i):
    minor = deepcopy(matrix)
    del minor[0]
    for b in range(len(matrix)-1):
        del minor[b][i]
    return minor

def det(matrix):
    determinant = 0
    if len(matrix) == 1:
        determinant = matrix[0][0]
    else:
        for x in range(len(matrix)):
            coFactor = det(findMinor(matrix,x))
            determinant += int(matrix[0][x]) * (-1)**(2+x) * coFactor
            return determinant

print det(myMatrix)

我收到 No-Type 错误,我很确定这是因为我在自身内部调用了一个函数,因为它是一种递归方法。

有没有什么办法解决这一问题?甚至可能转储第二个功能?

4

1 回答 1

1

你的问题是det只返回else部分内容if.. else

如果len(matrix)==1,则没有任何反应(或至少没有返回任何内容)。因此,当n=2它尝试使用cofactorwhich 应该是计算结果时,n=1的值为。cofactorNone

所以之前删除缩进,return determinant所以它不在if.. else..代码的一部分。

即使在解决此问题后,您也会遇到其他问题。最好将矩阵存储为大量浮点数而不是字符串。如果您想将其保留为字符串,请制作determinant=int(matrix[0][0])

我认为解决字符串问题的最佳方法是:

for i in range(n):
    myMatrix.append(map(float,raw_input().split()))

值得一提的是,如果您真的想进行矩阵计算,请不要使用自己的数据结构。使用 numpy - 它比任何人都可以用纯 python 编写更快。

于 2015-01-06T05:35:22.833 回答