Почему мой код Python для поиска определителей не работает?

Следующий код в Python 3 предназначен для возврата определителя любой матрицы порядка. Он принимает текстовый файл с формой:

3 6 8 9
9 -7 5 -7
2 0 8 0
8 9 -1 -1

Я не получаю ошибки, но он дает неправильный ответ. Любая подсказка, почему? Спасибо!

def determinant(inputFileName):  
    def cofactorExp(listOfRows):  
        if len(listOfRows) <= 2:  
            return (float(listOfRows[0][0]) * float(listOfRows[1][1])) - (float(listOfRows[0][1]) * float(listOfRows[1][0]))  
        else:  
            for i in range(len(listOfRows)):  
                tempList = listOfRows[:]  
                del tempList[i]  
                for x in range(len(tempList)):  
                    tempList[x] = tempList[x][1:]  
                det = ((-1) ** i) * float(listOfRows[i][0]) * cofactorExp(tempList)  
                return det  
    rows = []  
    for line in open(inputFileName):  
    rows append(line split(" "))  
    for item in rows:  
        if "\n" in item[len(item) - 1]:  
            item[len(item) - 1] = item[len(item) - 1][:-1]  
    return(cofactorExp(rows))  

person user3029811    schedule 25.11.2013    source источник
comment
Вы можете использовать numpy для этой задачи, если это не домашнее задание: stackoverflow.com/questions/462500/   -  person Anderson Green    schedule 25.11.2013
comment
Поработайте вручную и посмотрите, где вычисления вашей функции начинают отличаться.   -  person Blender    schedule 25.11.2013
comment
Это домашнее задание, но нам разрешили написать код, который делает то, что мы хотим. Я не могу использовать это, хотя.   -  person user3029811    schedule 25.11.2013


Ответы (2)


Несколько вещей

Ваша команда открытия файла неправильно обрабатывает пробелы до и после данных

rows = []
for line in open(inputFileName):  
   rows.append(line.split(" "))  
for item in rows:  
   if "\n" in item[len(item) - 1]:  
        item[len(item) - 1] = item[len(item) - 1][:-1]

когда я запустил код на моей составленной матрице, команда вернула это

[['3', '6', '8', '9'], ['9', '-7', '5', '-7'], ['2', '0', '8', '0'], ['8', '9', '-1', '-1', '']]

Обратите внимание, что в матрице есть пустой элемент. Не забудьте добавить точки при вызове команды в объекте

Я рекомендую использовать пример для модуля csv http://docs.python.org/2/library/csv.html

return det

кажется, преждевременно выходит из функции, так как det находится в рамках цикла

Наконец, есть более простой способ решения и кодирования определителя

   (aei+bfg+cdh)-(ceg+bdi+afh) 

http://en.wikipedia.org/wiki/Определитель

person user1462442    schedule 25.11.2013

person    schedule
comment
Вы должны предоставить некоторую информацию о том, что представляет собой этот код, и как он может помочь ответить на вопрос! - person psxls; 13.12.2013