所以我刚开始使用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]
“Matrix”是类名,“matrix”是文件名和为我的类minSum提供的参数,以便能够访问此文件。
如果您需要查看更多矩阵文件,请告诉我。
感谢。
答案 0 :(得分: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__
方法中的字符串之前对其进行初始化或检查。 / p>
修改强>
如果您希望newList
包含每个Supplies
实例的值,您只需附加值而不是实例:
newList.append(y.value)
而不是:
newList.append(y)