因此,我试图获得一个画板,例如一个坐标系,其宽度为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','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
我在代码中尝试查找错误已有很长时间了,请帮助我
答案 0 :(得分:1)
self.board.append(extra)
此行将与该行相同的对象附加到每一列。因此,如果通过一行更改对象,则所有其他行也会看到效果。
您可以复制该行的副本以添加。
self.board.append(extra.copy())
您的代码应该可以工作
答案 1 :(得分:0)
其他方式:您需要更改循环,
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 ""