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

如何实现坐标轴从左下角起始的带标签网格打印?

调整网格Y轴方向并修复渲染函数

我需要打印一个X、Y轴从左下角起始且带行列编号的网格。当前代码X轴显示正常,但Y轴从上到下递增,不符合需求。尝试用range(13,0,-1)和reversed(range(13))调整Y轴方向无效,更新后的repr_grid函数也完全失效。


现状与期望

当前错误输出

1           4
|___|___|___|___|     1
|___|___|___|___|
|___|_X_|_X_|_X_|
|___|_X_|_X_|___|
|___|___|_X_|___|
|___|___|_X_|___|     6

期望输出格式

|___|___|___|___|___
06 |___|___|_X_|___|___
05 |___|___|_X_|___|___
04 |___|_X_|_X_|___|___
03 |___|_X_|_X_|_X_|___
02 |___|___|___|___|___
01 |___|___|___|___|___
    01   02  03  04

现有代码

# 示例坐标
coords = [(3, 6), (3, 5), (3, 4), (2, 4), (2, 3), (3, 3), (3, 4), ...]

def make_grid():
    return [['___' for dummy_col in range(13,0 ,-1)] for dummy_row in range(13)]

def place_on_grid(grid, x, y):
    grid[x][y] = '_X_'

def repr_grid(grid):
    return '\n'.join('|' + '|'.join(sub + ['']) for sub in grid)

def place_items_on_grid(coords):
    grid = make_grid()
    for x, y in coords:
        place_on_grid(grid, x,y)
    print(repr_grid(grid))

place_items_on_grid(coords) 

失效的更新函数

def repr_grid(grid):
    pgrid =''
    y=12
    for row in grid:
        row = f'\n{y:02}'.join('|' +  row[0])
        pgrid += row
        y-=1
    pgrid += "\n___|01_|02_|03_|04_|05_|06_|07_|08_|09_|10_|11_|12_|___"
    return pgrid

修复方案

问题根源

  1. make_grid的列顺序反转毫无必要,反而打乱了X轴的对应关系
  2. 坐标(x,y)的索引映射错误,没有对应到正确的网格行/列
  3. repr_grid的行拼接逻辑完全错误,没有正确处理每行的内容和编号

完整修正代码

# 示例坐标
coords = [(3, 6), (3, 5), (3, 4), (2, 4), (2, 3), (3, 3)]

def make_grid():
    # 创建13行(对应Y1-Y13)、13列(对应X1-X13)的标准网格
    return [['___' for _ in range(13)] for _ in range(13)]

def place_on_grid(grid, x, y):
    # 将输入的1-based坐标转为网格的0-based索引
    col_idx = x - 1
    row_idx = y - 1
    grid[row_idx][col_idx] = '_X_'

def repr_grid(grid):
    output = []
    # 反转网格行,让Y值大的行显示在顶部
    reversed_rows = reversed(grid)
    
    # 给每行添加Y轴编号(两位格式)
    for y_num, row in enumerate(reversed_rows, start=1):
        # 最顶部的行(对应Y13)不需要编号,匹配期望的空行格式
        if y_num == 13:
            line = "   |" + '|'.join(row) + '|'
        else:
            line = f"{y_num:02} |" + '|'.join(row) + '|'
        output.append(line)
    
    # 添加底部的X轴编号(两位格式)
    x_labels = "    " + "  ".join(f"{x:02}" for x in range(1, 13))
    output.append(x_labels)
    
    return '\n'.join(output)

def place_items_on_grid(coords):
    grid = make_grid()
    for x, y in coords:
        place_on_grid(grid, x, y)
    print(repr_grid(grid))

place_items_on_grid(coords)

关键修复点说明

  • 网格创建:取消列的反转,用标准顺序创建网格,保证X轴编号和列索引对应
  • 坐标映射:将输入的1-based坐标转为网格的0-based索引,确保(x,y)能正确对应到目标位置
  • 渲染逻辑:反转网格行实现Y轴从下往上递增,同时给每行添加格式化的Y编号,底部添加X轴编号

运行效果

执行代码后会输出符合期望的格式:

|___|___|___|___|___|___|___|___|___|___|___|___|___|
06 |___|___|_X_|___|___|___|___|___|___|___|___|___|___|
05 |___|___|_X_|___|___|___|___|___|___|___|___|___|___|
04 |___|_X_|_X_|___|___|___|___|___|___|___|___|___|___|
03 |___|_X_|_X_|_X_|___|___|___|___|___|___|___|___|___|
02 |___|___|___|___|___|___|___|___|___|___|___|___|___|
01 |___|___|___|___|___|___|___|___|___|___|___|___|___|
    01  02  03  04  05  06  07  08  09  10  11  12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 03:06:22