-1
CODE:二つのオブジェクト
class matrix():
row=0
colum=0
def __init__(self,x,y):
self.m=[]
self.row=x
self.colum=y
#Makes a empty matrix of size x*y
for i in range(self.row):
self.m.append([])
for j in range(self.colum):
self.m[i].append(int(raw_input("Enter element")))
#To diplay the matrix
def display(x):
k=x.m
for i in range(0,x.row):
for j in range(0,x.colum):
k[i][j]=x.m[i][j]
return k
row1=int(raw_input("Enter Number of rows of 1st Matrix"))
colum1=int(raw_input("Enter Number of colume of 1st Martrix"))
matrix1=matrix(row1,colum1)
print "1st Matrix:",display(matrix1) # displaying the first matix before adding elements
row2=int(raw_input("Enter Number of rows of 2nd Matrix"))
colum2=int(raw_input("Enter Number of colume of 2nd Martrix"))
matrix2=matrix(row2,colum2)
print "Matrix 2:",display(matrix2) #displaying the second matrix before adding elements
出力:私のpython 2.7に次のコードを書かれているし、私が起こることを期待するもの
Enter Number of rows of 1st Matrix2
Enter Number of colume of 1st Martrix2
Enter element11
Enter element22
Enter element33
Enter element44
1st Matrix: [[11, 22], [33, 44]]
Enter Number of rows of 2nd Matrix2
Enter Number of colume of 2nd Martrix3
Enter element1
Enter element2
Enter element3
Enter element4
Enter element5
Enter element6
Matrix 2: [[11, 22, 1, 2, 3], [33, 44, 4, 5, 6], [], []]
は、作成することです。クラス行列のコンストラクタを使用して与えられたサイズの2つのmatix。 出力に示すように、オブジェクト、すなわち行列1と行列2の両方が同じリストmを共有する。これをデフォルトで保存するために2つのリストをseprateするべきではありません。 期待マトリックス2は、クラス自体にdef display
機能を移動することができ
[[1,2,3],[4,5,6]]
クラスが作成されるときに 'm'リストを初期化するためです。それを__init__に移動してください。 – Alex
@Alex Thanksそれを解決しました。しかし、なぜ私は何をしましたか? –
mリストはクラスにリンクされていますが、インスタンスにはリンクされていません。したがって、クラス行列のすべてのインスタンスがそれを共有します。 __init__に入れると、インスタンスが作成されるたびに新しいリストが作成されます。それが違いです。 – Alex