我有代码
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)