2016-05-06 251 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()]) 
...