2016-05-06 181 views
0

我正在做一个Python中的程序,它乘以用户输入的两个维度矩阵。我遇到的问题是用户必须在输入中输入每行的值,并且我的程序只能为每个输入获取一个值。 我使用.split()尝试,但在它的乘法把我这个 错误:n维矩阵乘法python

TypeError : can not multiply sequence by non -int of type 'list'.

我的代码是:

matriza=[] 
matrizb=[] 
matrizc=[] 
orden=int(input("Ingresa el orden de las matrices: ")) 

#Para obtener la primer matriz 
for i in range(0,orden): 
    matriza.append([0]*orden) 
for j in range(0,orden): 
    matrizb.append([0]*orden) 
for k in range(0,orden): 
    matrizc.append([0]*orden) 
for i in range(0,orden): 
    for j in range(0,orden): 
     matriza[i][j]=int(input("entrada renglon para la primer   matriz")) 

print "La primer matriz que introdujiste fue:" "\n" ,matriza, "\n" 

#Para obtener la segunda matriz 
for i in range(0,orden): 
    for j in range(0,orden): 
     matrizb[i][j]=int(input("entrada renglon para la segunda matriz")) 
print "La segunda matriz que introdujiste fue:" "\n" ,matrizb, "\n" 

#Para la multiplicación de las dos matrices 
for i in range(0,orden): 
    for j in range(0,orden): 
     for k in range(0,orden): 

      matrizc[i][j]+=matriza[i][k]*matrizb[k][j] 
print "La matriz que resulta de multiplicar las matrices que introdujiste es:" "\n" ,matrizc 

回答

-1

在Python可以接受列表直接输入。 例如:

matrixA = input("Please enter Matrix A") 

用户可以像这样输入一些:

[[1,2],[3,4]] 

现在你可以用你的计算直接进行。 在您的程序中引入您的方法,如果您使用的是拆分,则需要将您的输入转换为int。 Split创建一个str对象数组。 str不能相乘,因此您遇到TypeError。虽然Python很智能,并且可以在很多情况下自动投射变量,但它不能始终如此,因此我们需要对其进行变化。

+2

使用Python 2的'input'功能是一个非常糟糕的习惯进入,因为恶意用户可以放入类似'__import __('os')。system(“whatever”)的东西,并安装键盘记录器或保存文件以进行勒索或其他各种令人讨厌的事情。 – user2357112

+0

我同意@ user2357112:他或她刚刚演示的安全漏洞是Python 2的'input'完全从Python 3中删除(将旧'raw_input'重命名为'input')的原因。我认为[Python 2对'input'的描述](https://docs.python.org/2/library/functions.html#input)中的警告太微妙了。它只是说“考虑使用'raw_input()'函数......”,没有围绕其他Python文档中提到的安全漏洞的大红色框。 –

1

首先,由于您使用的是Python 2(通过print语法来判断),因此您应该使用raw_input而不是input

如果您希望用户在一行输入中提供一行的所有值,则应使用[int(x) for x in raw_input().split()]。你可能分配split结果基质细胞,而不是使用它的元素,当您遇到前面的问题来填充整个行:

matriza=[] 
matrizb=[] 
matrizc=[] 
orden=int(input("Ingresa el orden de las matrices: ")) 

for i in range(orden): 
    matriza.append([int(x) for x in raw_input("Enter a row of matrix A:").split()]) 
...