【问题标题】:How to print a list of lists with passed elements in a class via join method?如何通过 join 方法在类中打印具有传递元素的列表列表?
【发布时间】:2021-03-10 16:57:03
【问题描述】:

我有代码

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 by 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()

但我无法在draw_screen 方法中打印列表列表。我认为有必要使用"\ n" .join (map (str, ...)) 这样_screen = [['*', '+', '*'], ['#', '#', '#' ]] 的输出应该是

*+*
###

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

【问题讨论】:

    标签: python list class join methods


    【解决方案1】:

    代码:

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

    输出:

     *+*
     ###
    

    【讨论】:

      【解决方案2】:

      使用map(str, self._screen)),您正在将行列表转换为字符串。这意味着[1,2,3] 将变为'[1,2,3]'

      你应该在打印出来之前加入每一行。

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

      【讨论】:

      • 当他做self._screen = [[[' '] for i in range(w)] for j in range(h)] 时,他有额外的列表。正确的是self._screen = [[' ' for i in range(w)] for j in range(h)]
      【解决方案3】:

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-06
        • 1970-01-01
        • 2017-06-03
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多