仍在尝试了解如何使用课程。我现在写了以下内容:
`import random
class Grid():
def __init__(self, grid_row, grid_column):
self.__row = grid_row
self.__col = grid_column
self.__board=[]
def make_board(self):
for row in range(self.__row):
self.__board.append([])
for col in range(self.__col):
self.__board[row].append('0')
return self.__board
def change_tile(self):
choices = (0,1,2)
x = random.choice(choices)
y= random.choice(choices)
self.__board[x][y] = str(2)
def __repr__(self):
for row in self.__board:
print( " ".join(row))
g = Grid(3,3)
g.make_board()
g.change_tile()
print(g)
首先,当我运行这个时,我得到一个网格,然后是:
TypeError: __str__ returned non-string (type NoneType)
我不明白为什么会这样。第二个问题。如果我想要返回自我。 board,__ str 只返回最后一行(0,0,0)。用' print'打印所有三行和三列。是否有办法解决问题'返回'?这是一个问题(除了我想要'看到'我在做什么)? 如何调用Grid(3,3)并获得一个随机放置2的网格而不必像我在我的例子中那样单独调用每个函数?最后为什么我不能使用整数0或2,但必须将所有内容转换为字符串?我希望通过提出这么多愚蠢的问题,我没有超出本论坛上存在的善意!
答案 0 :(得分:1)
特殊方法__repr__
和__str__
必需返回字符串。如果没有给出__str__
实现,__repr__
也将用于字符串转换。
现在,在您的情况下,__repr__
打印而不是返回字符串。它实际上没有返回任何内容,因此隐含地返回None
。你必须改变它以返回一个字符串。例如:
def __repr__(self):
return '\n'.join([' '.join(row) for row in self.__board])