如何通过联接方法打印包含类中传递元素的列表



我有代码

class Render():
def __init__(self):
pass
def init_screen(self, h, w):
raise NotImplementedError
def add_object(self, char, x, y):
raise NotImplementedError
def draw_screen(self):
raise NotImplementedError
def get_input(self):
raise NotImplementedError

存在一项任务:我需要创建一个ShellRenderer类,它将在控制台中绘制游戏屏幕。

-在其中创建一个_screen字段,该字段将是一个字符列表列表,大小为h乘以w

-调用init_screen方法时用空格初始化它。

-add_object方法必须将其中一个_screen列表项的值更改为char字符。

-draw_screen方法应该通过调用print来打印列表。

-在get_input方法中,可以使用input函数来获取用户输入。返回用户输入的字符串。

我几乎什么都做过:

class ShellRender(Render):
def init_screen(self, h, w):
self.h = h
self.w = w
self._screen = [[[' '] for i in range(w)] for j in range(h)]
def add_object(self, char, x, y):
self._screen[y][x] = char
def draw_screen(self):
print("n".join(map(str, self._screen)))  # here is a mistake...
def get_input(self):
return input()

但是我不能用CCD_ 12方法打印列表的列表。我认为有必要使用" n" .join (map (str, ...)),这样当_screen = [['*', '+', '*'], ['#', '#', '#' ]]输出时应该是

*+*
###

但是我写不对。也许我没有正确理解任务,所以请帮助我解决这个问题

代码:

_screen = [['*', '+', '*'], ['#', '#', '#' ]]
print(*(''.join(str_arr) + 'n' for str_arr in _screen))

输出:

*+*
###

使用map(str, self._screen))可以将行的列表转换为字符串。意味着[1,2,3]将变成'[1,2,3]'

在全部打印出来之前,你应该把每一行都连接起来。

def draw_screen():
print("n".join(map(''.join, (_screen))))

self._screen是列表的列表,当您使用map(str, self._screen)时,您在列表中使用str。还有一个额外的";[]";当您创建屏幕时。这会奏效的。

class Render():
def __init__(self):
pass
def init_screen(self, h, w):
raise NotImplementedError
def add_object(self, char, x, y):
raise NotImplementedError
def draw_screen(self):
raise NotImplementedError
def get_input(self):
raise NotImplementedError
class ShellRender(Render):
def init_screen(self, h, w):
self.h = h
self.w = w
self._screen = [[' ' for i in range(w)] for j in range(h)]
def add_object(self, char, x, y):
self._screen[y][x] = char
def draw_screen(self):
print("n".join(map(draw_screen_line, self._screen)))  # here is a mistake...
def get_input(self):
return input()
def draw_screen_line(screen_line):
return "".join(screen_line)

最新更新