List 列表格式化的打印列表

List 列表格式化的打印列表,list,python-3.x,format,List,Python 3.x,Format,我对python编程相当陌生。我试图从给定的列表创建一个模式。这是我的密码: NONE = '' Column = 7 Rows = 6 def new_game_board() -> [[str]]: board = [] for col in range(BOARD_COLUMNS): board.append([]) for row in range(BOARD_ROWS): board[-1].append(NONE)

我对python编程相当陌生。我试图从给定的列表创建一个模式。这是我的密码:

NONE = ''

Column = 7
Rows = 6

def new_game_board() -> [[str]]:

   board = []

   for col in range(BOARD_COLUMNS):
      board.append([])
      for row in range(BOARD_ROWS):
         board[-1].append(NONE)
return board


gb = new_game_board()

for item in gb:
   print(item)
董事会如下所示:

['', '', '', '', '', '']
['', '', '', '', '', '']
['', '', '', '', '', '']
['', '', '', '', '', '']
['', '', '', '', '', '']
['', '', '', '', '', '']
['', '', '', '', '', '']
鉴于,它应该是:

1  2  3  4  5  6  7
*  *  *  *  *  *  *
*  *  *  *  *  *  *
*  *  *  *  *  *  *
*  *  *  *  *  *  *
*  *  *  *  *  *  *
*  *  *  *  *  *  *
如何将列表格式化为上面的模式

Columns = 7
Rows = 6

def new_game_board() -> [[str]]:
   board = [ ''.join('%3i' % i for i in range(1, 1 + Columns))  ]
   board += Rows*[ Columns*'  *' ]
   return board

gb = new_game_board()

for item in gb:
   print(item)
这将产生以下输出:

  1  2  3  4  5  6  7
  *  *  *  *  *  *  *
  *  *  *  *  *  *  *
  *  *  *  *  *  *  *
  *  *  *  *  *  *  *
  *  *  *  *  *  *  *
  *  *  *  *  *  *  *
或者:假设我们保留现有的新游戏板功能(拼写错误已修复),并添加打印功能:

NONE = ''

Columns = 7
Rows = 6

def new_game_board() -> [[str]]:
   board = []
   for row in range(Rows):
       board.append([])
       for col in range(Columns):
           board[-1].append(NONE)
   return board

def print_board(board):
   print(''.join('%3i' % i for i in range(1, 1 + len(board[0]))))
   for item in board:
       print(''.join('%3s' % (v if v else '*') for v in item))

gb = new_game_board()
print_board(gb)

这将产生与上述相同的输出。

如果将电路板设为类,则可以定义
\uuuu str\uuuu
方法来执行此操作:

class Board(object):

    def __init__(self, r, c, val="*"):
        self.r = r
        self.c = c
        self.tiles = [[j+1 for j in range(c)]]
        self.tiles += [[val for j in range(c)] for i in range(r)] 

    def __str__(self):
        return "\n".join(" ".join(str(c) for c in self.tiles[r])
                         for r in range(len(self.tiles)))
现在
打印(电路板(6,7))
给出:

1 2 3 4 5 6 7
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *
* * * * * * *

这种方法使您可以在幕后以用户友好的方式显示列表列表,还允许您将常见的棋盘游戏动作(例如,“将棋子从(r1,c1)移动到(r2,c2)”)定义为实例方法

如果我们不想改变新的游戏板功能,我们可以把它作为一个单独的功能。相反,如果我们想要一个单独的函数,名为print_board,它只打印电路板?