Невозможно распечатать матрицу 3x3 и сумму каждой строки, которая вызывается двумя функциями

Это цель следующего кода: Напишите программу так, чтобы main вызывала следующие функции: getMatrix — создает и возвращает матрицу 3 x 3.

printMatrix — печатает матрицу построчно, без скобок

sumRow — возвращает сумму элементов одной строки матрицы (переход в матрицу и индекс строки)

Проблема, с которой я столкнулся: После дальнейших исследований я не могу понять, почему я не могу вычислить сумму для каждой строки матрицы. Более того, я пытаюсь напечатать матрицу без скобок. Потратил пару дней, пытаясь понять это сам? Я уверен, что это глупая ошибка, которую я не могу понять. Должен ли цикл for быть в main?

def main():
    compute = getMatrix()
    showMatrix(compute)
    getSum(compute)

def getMatrix():
    matrix = []  #Create an empty array

    numberOfRows = eval(input("Enter the number of rows: "))  
    numberOfColumns = eval(input("Enter the number of columns: "))
    print( 'Creating',numberOfRows,'x',numberOfColumns, 'Matrix in progress..')
    for row in range(numberOfRows):
        matrix.append([])
        for column in range(numberOfColumns):
            value = eval(input("Enter the element for {} : ".format(column)))
            matrix[row].append(value)
return matrix

def showMatrix(matrix):
    print("\n")
    for newLine in matrix:
        print(newLine)

def getSum(matrix):
    for row in range(len(matrix[0])):
        total = 0
        for column in range(len(matrix)):
            total += matrix[row][column]
            print("Sum for matrix", row, "is", total)
    return total

main()

используя 1,2,3,4,5,6,7,8,9 в качестве тестирования


person TheFryeGuy    schedule 04.05.2017    source источник
comment
Будьте осторожны с отступом вашего кода (например: первый возврат, ваша функция матрицы показа, ваш второй возврат)   -  person Nuageux    schedule 04.05.2017
comment
Соответствует ли этот код вашему коду точно так же, как он выглядит в исходном файле, с отступами и всем остальным? Потому что я ожидаю, что эта программа вообще ничего не напечатает, вместо этого немедленно вылетит с IndentationError: unexpected indent в строке for column in range(numberOfColumns):.   -  person Kevin    schedule 04.05.2017
comment
@ Кевин Это не так. Когда я запускаю его, я могу создать и распечатать матрицу 3x3; однако он не вычисляет и не показывает сумму каждой строки матрицы. Я использовал здесь некоторые правки, но после ввода каждого элемента отображается сумма. Мне нужно только вычислить сумму каждой строки.   -  person TheFryeGuy    schedule 04.05.2017
comment
Хорошо, продолжайте и отредактируйте свой пост, чтобы он действительно точно соответствовал коду, который вы бежим.   -  person Kevin    schedule 04.05.2017
comment
@Kevin Код обновлен. - ФрайГай   -  person TheFryeGuy    schedule 08.05.2017


Ответы (2)


Для печати без скобок:

def showMatrix(matrix):
    print
    for newLine in matrix:
        for elem in newLine:
            print elem,
        print

Измените total += matrix[num][column] на total += matrix[row][column], чтобы решить проблему с getSum.

person Nuageux    schedule 04.05.2017

Если мы вернемся к началу, давайте рассмотрим, что у вас есть следующая матрица

a = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

Чтобы распечатать и получить суммы строк матрицы, вы можете использовать следующие функции

def print_matrix(matrix):
    for row in matrix:
        for column in row:
            print column,

        print

def row_sum(matrix):
    return map(sum, matrix)

>>> print_matrix(a)
1 2 3
4 5 6
7 8 9
>>> row_sum(a)
[6, 15, 24]
person vovaminiof    schedule 04.05.2017