所以,我试图得到一个像画板一样的坐标系,宽度为10,高度为5,所以它看起来像这样由列表中的列表表示,例如[['x','x','x','x','x','x'。 'x','x','x','x'],['x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x','x']]
印出来是这样的
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
现在我想改变其中的一个元素,使它看起来像这样。
xxcxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
我的代码。
class Paintboard():
def __init__(self, width, height):
self.width = width
self.height = height
extra = []
self.board = []
for x in range(0, self.width):
extra.append('x')
for y in range(0, self.height):
self.board.append(extra)
def str(self):
for x in self.board:
print(" ".join(x))
return ""
def paint(self):
self.board[0][3] = "c" # here btw x and y are switched cuz of element arrangement in self.board
test = Paintboard(10, 5)
test.paint()
test.str()
而不是仅仅替换[3,0]上的元素,它实际上是替换列中的每一个元素,由于某些原因输出。
xxxcxxxxxx
xxxcxxxxxx
xxxcxxxxxx
xxxcxxxxxx
xxxcxxxxxx
我一直在努力寻找错误,现在很长一段时间在我的代码,请帮助我。
self.board.append(extra)
这一行将与行相同的对象追加到每一列。因此,如果你通过一行改变对象,其他所有行也会看到效果。
你可以复制一行来追加对象。
self.board.append(extra.copy())
你的代码应该可以工作
另一种方式:你需要改变for loop。
class Paintboard():
def __init__(self, width, height):
self.width = width
self.height = height
self.board = []
for y in range(0, self.height):
extra = []
for x in range(0, self.width):
extra.append('x')
self.board.append(extra)
def str(self):
for x in self.board:
print(" ".join(x))
return ""