gpt4 book ai didi

python - __str__ 在方法中打印行

转载 作者:行者123 更新时间:2023-11-28 22:43:29 26 4
gpt4 key购买 nike

我正在尝试改进您在 codecademy python 类(class)中制作的“战舰”游戏,我决定我的第一步是实现类。

我预期的代码输出是五行 O O O O O。当我在 for 循环中只使用一个 print 语句但它抛出一个错误说明时,这是实现的:

Traceback (most recent call last):
File "D:/PythonProjects/Battleship/Main.py", line 21, in <module>
print(board)
TypeError: __str__ returned non-string (type NoneType)

当我按原样保留代码时,它不会抛出错误,但只会打印一行 O

有问题的代码:

class Board(object):
"""Creates the game board"""
board = []

def __init__(self, size):
self.size = size
for x in range(size):
self.board.append(["O"] * size)

def __str__(self):
for row in self.board:
display = (" ".join(row))

return display

board = Board(5)
print(board)

最佳答案

首先,您不应该为board 使用类属性。这样做将在所有 Board 实例之间共享该实例,因此您可以不断添加到同一个列表。相反,为您创建的每个对象创建一个新列表:

class Board(object):
def __init__(self, size):
self.size = size
self.board = []
for x in range(size):
self.board.append(["O"] * size)

现在,为了回答你的问题,你实际上不应该得到那个类型错误,因为当你在 __str__ 的循环中继续覆盖 display 时,它至少会得到一个不是 None 的值,假设 board 不为空(它不在您的示例中)。

但是您要做的是收集所有行并用换行符连接它们:

def __str__(self):
display = []
for row in self.board:
display.append(" ".join(row))
return '\n'.join(display)

或者在一行中:

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

关于python - __str__ 在方法中打印行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30697636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com