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

Python棋盘绘制模块draw方法生成多余空行问题求助

问题原因排查

多余空行来自三个逻辑错误:

  • 前序行拼接时每行末尾重复加\n,最后多了额外换行符
  • 目标行修改完成后拼接剩余行的切片范围错误,包含了无效空元素
  • 遍历取前height行的逻辑存在下标越界问题,导致误取末尾空行拼接

修复后完整代码

class board:
    def __init__(self, length, height, default_char='.'):
        # 初始化棋盘,每行结尾不加多余换行,避免split产生空元素
        self.layout = '\n'.join([(' ' + default_char) * length + ' ' for _ in range(height)])
        self.length = length
        self.height = height
        self.objects = {}

    def draw(self, pos_x=None, pos_y=None, draw_char=None, double=False, show=True):
        # 无参数时直接打印棋盘
        if pos_x is None or pos_y is None or draw_char is None:
            print(self.layout)
            return
        # 只取字符第一个
        if draw_char != '':
            draw_char = draw_char[0]
        # 拆分棋盘为行列表,无多余空元素
        layout = self.layout.split('\n')
        # 坐标合法性校验
        if pos_y < 0 or pos_y >= len(layout):
            raise ValueError("y坐标超出棋盘范围")
        if pos_x < 0 or pos_x >= self.length:
            raise ValueError("x坐标超出棋盘范围")
        
        # 拆分前序行、目标行、后续行
        pre_lines = layout[:pos_y]
        target_line = list(layout[pos_y])
        post_lines = layout[pos_y+1:]
        
        # 替换目标位置字符,x坐标对应位置是pos_x*2(因为每个字符前有空格)
        replace_idx = pos_x * 2 + 1
        old_block = target_line[replace_idx]
        target_line[replace_idx] = draw_char
        target_line = ''.join(target_line)
        
        # 拼接新棋盘,不额外加多余换行
        new_layout = '\n'.join(pre_lines + [target_line] + post_lines)
        self.layout = new_layout
        self.objects[draw_char] = (pos_x, pos_y, old_block)
        
        if show:
            if double:
                print(new_layout.replace(' ', '  '))
            else:
                print(new_layout)

关键修改说明

  • 初始化棋盘时改用'\n'.join生成布局,避免末尾多余换行
  • 去掉了错误的下标减1逻辑,改用切片拆分前序行、目标行、后续行,逻辑更清晰不易出错
  • 拼接新布局时统一用'\n'.join处理,不会额外增加多余换行
  • 新增了坐标合法性校验,避免下标越界问题

测试示例

# 测试:生成5*5的棋盘,在(2,2)位置画X
b = board(5,5)
b.draw(2,2,'X')

运行后不会出现多余空行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:15:03