У меня проблемы с добавлением двух матриц в Python

Я хочу добавить две матрицы в Python 3, но проблема возникает, когда я добавляю input к программе

Вот мой код

def addmatrix(a,b):
    d=[]
    n=0
    while n < len (a):
        c = []
        k = 0
        while k < len (a[0]) : 
            c.append(a[n][k]+b[n][k])
            k += 1 
        n += 1
        d.append (c)
    return d

def main():
    a = input("Enter a Matrix: ")
    b = input("Enter another Matrix: ")
    print (addmatrix(a,b))
main()

Если вход

Введите матрицу: [[5,6], [1,2], [2,4]]

Введите другую матрицу: [[2,3], [-6,0], [-2, 4]]

Выходные данные получаются как [['[['], ['[['], ['52'], [',,'], ['63'], [']]'], [',,'], [' '], ['[['], ['1-'], [',6'], ['2,'], [']0'], [',]'], [','], ['[ '], ['2['], [',-'], ['42'], ['],'], ['] ']]

Но если я достану input из программы и сделай так, чтобы

def main():
    a = [[5,6], [1,2], [2,4]]
    b = [[2,3], [-6,0], [-2, 4]]
    print (addmatrix(a,b))
main()

Выходные данные тогда получаются как [[7, 9], [-5, 2], [0, 8]] что правильно.

Есть ли способ заставить мою программу работать так, чтобы, когда человек вводит две матрицы, они складывают вместе? Я новичок в Python, поэтому любая помощь будет оценена:)

2 ответа

Решение

Вам нужно будет преобразовать пользовательский ввод в объект Python. Прямо сейчас это строка.

Ты можешь использовать eval (который не должен использоваться, если вы не знаете, что будут вводить ваши пользователи. Я могу ввести __import__('os').system('rm /some/file.txt') и Python удалит файл):

a = eval(input("Enter a Matrix: "))

Или вы можете использовать ast.literal_eval, который является безопасным:

from ast import literal_eval

...

a = literal_eval(input("Enter a Matrix: "))

Попробуй это:

import ast

def addmatrix(a,b):
    return [map(sum, zip(*x)) for x in zip(a,b)]

def main():
    a = ast.literal_eval(raw_input("Enter a Matrix: "))
    b = ast.literal_eval(raw_input("Enter another Matrix: "))
    print addmatrix(a,b)

main()
Другие вопросы по тегам