2016-05-28 26 views
0

所以我很新來使用python中的類,但是我使用的這個項目Euler(q 81)是使用類來完成的,這有點棘手?我猜?追加/寫入一個實例的值

我可以得到一個(2n + 1 * 2n + 1)網格的值,但是我不能和它們一起使用來追加到另一個列表或者寫入一個文件。

def minSum(matrix): 
    file = open("pleasedeargodwork.txt", "w") 
    newList = [] 

    for x in maxtrix.grids: 
     for y in x: 
      newList.append(y) 
      print y, 
      file.write(y,) 
    print newList 

>>> 1 7 2 5 6 2 9 2 5 
>>> TypeError: must be string or read-only character buffer, not instance 
>>> <matrix.Supplies instance at 0x0240E9B8> 

^^我想最後一行給我的價值,而不是實例,但如何?

我的矩陣類看起來是這樣的:

class Matrix: 
    def __init__(self, grids): 
     self.size = len(grids)/2 
     self.grids = [[Supplies(s) for s in row] for row in grids] 

class Supplies: 
    def __init__(self, supp): 
     if isinstance(supp, list): 
      self.value = supp[0] 

「黑客帝國」是類的名字,「矩陣」是文件名,並給我班上minSum一個參數,可以訪問此文件。

如果您需要查看更多的矩陣文件,請告訴我。

謝謝。

回答

1

看起來你有另一個錯誤,當您嘗試寫一個實例的文本文件,但這裏有一個方法來打印,而不是實例的值:

__repr__方法可以定義對象是什麼樣子時,它被打印。

添加__repr__方法將Supplies類,像這樣:

class Supplies: 
    def __init__(self, supp): 
     if isinstance(supp, list): 
      self.value = supp[0] 

    def __repr__(self): 
     return str(self.value) 

當你打印一個Supplies例如,Python會打印其value屬性來代替。請注意,value不保證在Supplies類中定義,因此您可能需要初始化它或在嘗試將其轉換爲__repr__方法中的字符串之前進行檢查。

編輯

如果你想newList包含每個Supplies實例的值,你可以只是追加的價值,而不是實例:代替

newList.append(y.value) 

newList.append(y) 
+0

您好,Repr的工作是讓它將值打印到控制檯,但如果我嘗試添加或減去t軟管值I得到錯誤: 不受支持的操作數類型(一個或多個)爲+ =: 'INT' 和 '實例',當我嘗試: 'newList = [] 對於x在maxtrix.grids: 對於y的x: newList.append(y)' –

+0

對不起,我無法編輯該代碼出於某種原因,此回覆框超級難以使用。 '值= 0 在maxtrix.grids X: y的在X: 值+ = y' –

+1

@BlueEden可你只是追加'y.value'到newList?或者'Supplies'類是否具有保存值的目的? – EngineerCamp