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

Python打印带坐标轴标签的网格时双位数索引对齐实现方法

问题原因

错位的核心原因是输出固定宽度不匹配:

  • 原代码打印网格单元格时,每个单元格固定占2个打印宽度(1个字符内容+1个末尾空格)
  • 打印底部列号时直接用print(Column, end=' '),个位列号占2宽度(1位数字+1空格)刚好匹配,但两位及以上列号占3+宽度,超出单元格宽度,逐列累积后就会出现错位;同时右侧行号的预留宽度是写死的3位,当行号超过两位数时也会撑坏格式。
无依赖解决方案

不需要引入任何外部模块,只需先动态计算索引所需的最大宽度,统一所有单元格、列号、行号的输出占位宽度,就能实现任意行列数下的完美对齐。
修正后的printG方法代码如下:

def printG(self):
    # 计算行列索引的最大字符长度,动态确定单元格占位宽度
    max_idx = max(self.rows - 1, self.cols - 1)
    idx_len = len(str(max_idx))
    cell_width = idx_len + 1  # 每个单元格/列号固定占宽度,留1个空格做分隔

    # 逐行打印网格内容 + 右侧行号
    for row in range(self.rows):
        for col in range(self.cols):
            # 每个网格内容左对齐,占满固定宽度
            print(f"{self.Grid[row][col]:<{cell_width}}", end='')
        # 右侧行号右对齐,宽度适配最大索引长度
        print(f"|{row:>{idx_len}}")
    
    # 打印底部列号,每个列号和网格单元格同宽度左对齐
    for col in range(self.cols):
        print(f"{col:<{cell_width}}", end='')
    print()
实现效果

以15行15列网格为例,修正后的输出完全对齐,不会出现偏移:

_  _  _  _  _  _  _  _  _  _  _  _  _  _  _  | 0
_  _  _  _  _  _  _  _  _  _  _  _  _  _  _  | 1
_  _  _  _  _  _  _  _  _  _  _  _  _  _  _  | 2
_  _  _  _  _  _  _  _  _  _  _  _  _  _  _  | 3
_  _  _  _  _  _  _  _  _  _  _  _  _  _  _  | 4
_  _  _  _  _  _  _  _  _  _  _  _  _  _  _  | 5
_  _  _  _  _  _  _  _  _  _  _  _  _  _  ■  | 6
_  _  _  _  _  _  _  _  _  _  _  _  _  _  _  | 7
_  _  _  _  _  _  _  _  _  _  _  _  _  _  _  | 8
_  _  _  _  _  _  _  _  _  _  _  _  _  _  _  | 9
_  _  _  _  _  _  _  _  _  _  _  _  _  _  _  |10
_  _  _  _  _  _  _  _  _  _  _  _  _  _  _  |11
_  _  _  _  _  _  _  _  _  _  _  _  _  _  _  |12
_  _  _  _  _  _  _  _  _  _  _  _  _  _  _  |13
_  _  _  _  _  _  _  _  _  _  _  _  _  _  _  |14
0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 

如果后续网格行列数扩展到100行/列以上,代码会自动把单元格宽度调整为4(3位索引+1个分隔空格),始终保持对齐。

内容的提问来源于stack exchange,提问作者Ahab N

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:24:24