1

我想在 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 新手,所以任何帮助将不胜感激:)

4

2 回答 2

3

您必须将用户输入转换为 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: "))
于 2013-03-27T04:16:57.910 回答
0

尝试这个:

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()
于 2013-03-27T04:22:24.480 回答