У меня проблемы с добавлением двух матриц в 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()