You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:39:05