如何实现坐标轴从左下角起始的带标签网格打印?
调整网格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
修复方案
问题根源
make_grid的列顺序反转毫无必要,反而打乱了X轴的对应关系- 坐标
(x,y)的索引映射错误,没有对应到正确的网格行/列 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
相关产品推荐
相关产品推荐

