我在python中添加两个矩阵时遇到了麻烦

时间:2013-03-27 04:11:37

标签: isa-swizzling

我想在python 3中添加两个matrcies,但是当我向程序中添加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 个答案:

答案 0 :(得分: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: "))

答案 1 :(得分: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()