使用Python标准库打印带自适应间距的2048游戏棋盘
2048棋盘自适应宽度打印实现方案
核心思路
- 动态计算所有棋盘数字的最大显示长度,以此确定每个单元格的统一宽度,避免大数字挤压排版
- 基于计算出的单元格宽度动态生成边框、分隔线,而非写死边框字符长度
- 使用Python字符串格式化的对齐语法,保证每个格子内的数字居中显示,空格自适应填充
完整实现代码
def print_2048_board(board): # 处理空值(默认0为空白格),计算所有数字的最大字符串长度 all_nums = [str(num) if num != 0 else '' for row in board for num in row] max_len = max(len(s) for s in all_nums) # 固定格子宽度可直接修改max_len为固定值,比如max_len=4适配到2048数字 cell_width = max_len + 2 # 前后各留1个空格,视觉更美观 # 生成各类边框线 top_border = '╔' + '╤'.join(['═' * cell_width for _ in range(4)]) + '╗' sep_border = '╟' + '┼'.join(['─' * cell_width for _ in range(4)]) + '╢' bottom_border = '╚' + '╧'.join(['═' * cell_width for _ in range(4)]) + '╝' # 生成每一行的内容 rows = [top_border] for row in board: # 每个数字居中显示,空值显示为空白 cell_content = [f"{num if num !=0 else '':^{max_len}}" for num in row] # 拼接格子前后的空格和分隔符 row_line = '║' + '│'.join([f' {content} ' for content in cell_content]) + '║' rows.append(row_line) rows.append(sep_border) # 删掉最后多余的分隔线,换成底部边框 rows.pop() rows.append(bottom_border) # 打印最终棋盘 print('\n'.join(rows)) # 测试用例 if __name__ == '__main__': test_board = [ [1, 1256, 3, 4], [3, 2, 4, 123], [1, 1, 4, 2], [6, 2048, 4, 3] ] print_2048_board(test_board)
彩色输出适配说明
如果需要添加ANSI彩色转义码,只需要在生成cell_content的时候,给数字包裹对应的彩色转义序列即可,计算单元格宽度时使用的是纯数字的长度,不会受转义码影响出现排版错乱。
内容的提问来源于stack exchange,提问作者Random_Pythoneer59
相关产品推荐
相关产品推荐

