Python使用类来创建和操作网格

时间:2015-03-06 10:53:49

标签: class python-3.x

仍在尝试了解如何使用课程。我现在写了以下内容:

`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,但必须将所有内容转换为字符串?我希望通过提出这么多愚蠢的问题,我没有超出本论坛上存在的善意!

1 个答案:

答案 0 :(得分:1)

特殊方法__repr____str__ 必需返回字符串。如果没有给出__str__实现,__repr__也将用于字符串转换。

现在,在您的情况下,__repr__ 打印而不是返回字符串。它实际上没有返回任何内容,因此隐含地返回None。你必须改变它以返回一个字符串。例如:

def __repr__(self):
    return '\n'.join([' '.join(row) for row in self.__board])