2016-05-06 20 views
0

私はPythonで、ユーザーが入力する次元の2つの行列を乗算するプログラムを実行しています。私が持っている問題は、ユーザーが入力の各行の値を入力する必要があり、プログラムは各入力の値しか取得できないということです。 私は.split()を使用して試したが、それがないとき乗算が私にこの エラーを送信します。n次元行列乗算python

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

私のコードは次のとおりです。あなたが直接入力としてリストを受け入れることができますPythonでは

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

。 例:

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

今あなたが直接あなたの計算を進めることができます。

matrixA = input("Please enter Matrix A") 

ユーザーは、このような何かを入力することができます。 あなたのプログラムであなたのアプローチに来て、あなたが分割を使用していた場合は、入力をintに変換する必要があります。 Splitはstrオブジェクトの配列を作成します。 strを乗算できないため、TypeErrorが発生しました。 Pythonはインテリジェントであり、多くの場合、変数を自動キャストできますが、常にそうすることはできません。また、変数を変更する必要があります。

+2

に入るために本当に悪い習慣です:あなたは、おそらく代わりに、以前の問題を抱えたとき、行全体を移入するために、その要素を使用してのマトリックスセルにsplit結果を割り当て悪意のあるユーザーは '__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の構文で判断)のため、inputの代わりにraw_inputを使用する必要があります。

1行の入力行にすべての値を入力させたい場合は、[int(x) for x in raw_input().split()]を使用してください。ので、Pythonの2の `input`機能を使用して

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()]) 
...