PythonでMatrix Additionを実行します(終了しません)。ただし、エラーが表示されます。
m, n = (int(i) for i in raw_input().split())
a = [[0 for i in range(m)] for j in range(n)]
b = [[0 for i in range(m)] for j in range(n)]
c = []
total = []
for i in range(m):
x = raw_input()
for j in range(n):
value = [int(i) for i in x.split()]
c[i][j] = a[i][j]
#c.append(value)
print a
for i in c:
print i
入力したい
3 3 <-行列次元m * n
1 2 3>
3 2 1>マトリックスA
1 3 2>
1 1 1>
1 1 1>マトリックスB
1 1 1>
として表示
2 3 4>
4 3 2>マトリックスA + B
2 4 3>
外側のi
ループでfor
を使用していますが、これはintです。次に、ループであなたが持っている:
value = [int(i) for i in x.split()]
i
を文字列にします(split
が返すもの)。たぶん、[ ]
?ありません。名前の衝突があり、そのうちの1つを変更します。
内部forループで同じ変数を使用しています。
for i in range(m):
x = raw_input()
for j in range(n):
# variable i is refering to outer loop
value = [int(p) for p in x.split()]
c[i][j] = a[i][j]
#c.append(value)
print a
for i in c:
print i
最初の2つの答えを超えると、このステートメントに問題が生じます。
c[i][j] = a[i][j]
ループが開始すると、i
は0になりますが、これまでのところ問題ありませんが、c
は空のリストであり、最初の位置に反復可能なものがないため、c[0][0]
はエラーを返します。それを取り除き、次の行のコメントを外します。
#c.append(value)
編集:
あなたのコードはあなたが望むものを返しません。与えられた辺を持つマトリックスを作成するには、次のようなものを作成する方が良いでしょう:
for i in range(m):
d = []
for j in range(n):
x = raw_input()
d.append(int(x))
c.append(d)
m
とn
の両方に3がある場合、変数c
に保存された辺3 x 3のマトリックスを作成します。この方法では、ユーザー入力を分割する必要はありません。ユーザーは一度に数字を与えることができます。また、次の行を変更することもできます。
x = raw_input()
に:
x = raw_input("{0}. row, {1}. column: ".format(i+1, j+1))
やってみよう!
intを宣言し、dictのように扱う場合にも、このエラーをヒットできます。
>>> a = []
>>> a['foo'] = 'bar'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str
import time
m, n = (int(i) for i in raw_input().split())
a = []
b = []
total = [[0 for i in range(n)] for j in range(m)]
for i in range(m):
x = raw_input()
for j in range(n):
value = [int(i) for i in x.split()]
a.append(value)
#print a
for i in range(m):
x = raw_input()
for j in range(n):
value = [int(i) for i in x.split()]
b.append(value)
#print b
for i in range(m):
for j in range(n):
total[i][j] = a[i][j] + b[i][j]
for i in total:
print ' '.join(map(str, i))
time.sleep(2)
OK!私はちょうどそれを理解しました!ありがとうございました