基于两点生成矩形的全局矩阵函数失效:仅首次调用生效
问题分析与修复
核心问题
你的createRect函数存在两个关键缺陷,导致第二次调用无有效输出:
- 硬编码的行范围:函数中
for j in range(1,6)固定只处理从x+1到x+5的行,仅适配第一次调用中x1-x=5的场景,第二次调用x3-x2=3时,既会处理超出矩形边界的行,又没有完整覆盖目标行范围。 - 不完整的矩形绘制逻辑:仅实现了上边横线和右边竖线的绘制,缺少左边竖线、下边横线的绘制,同时填充逻辑依赖固定行范围,导致矩形形态不完整,部分区域被第一次调用的内容覆盖后,无法直观看到第二次调用的效果。
修复后的代码
重构createRect函数,使其能根据任意两个对角点坐标生成完整矩形,兼容坐标顺序的任意情况:
def createRect(x, y, x1, y1, item): global matrix # 确定矩形的实际边界,兼容x1<x或y1<y的情况 left = min(x, x1) right = max(x, x1) top = min(y, y1) bottom = max(y, y1) # 绘制四条边 # 上边:left行,top到bottom列 for col in range(top, bottom + 1): matrix[left][col] = item # 下边:right行,top到bottom列 for col in range(top, bottom + 1): matrix[right][col] = item # 左边:left到right行,top列 for row in range(left, right + 1): matrix[row][top] = item # 右边:left到right行,bottom列 for row in range(left, right + 1): matrix[row][bottom] = item # 可选:填充矩形内部 for row in range(left + 1, right): for col in range(top + 1, bottom): matrix[row][col] = item matrix = [['. ']*50 for _ in range(50)] x,y,x1,y1 = 25+2,25+5,25+7,25+9 x2,y2,x3,y3 = 25+6,25+2,25+9,25+10 createRect(x,y,x1,y1,'# ') createRect(x2,y2,x3,y3,'- ') for i in range(50): for j in range(50): print(matrix[i][j], end = "") print()
修复说明
- 动态边界计算:通过
min和max确定矩形的左、右、上、下边界,无需依赖输入坐标的顺序。 - 完整四边绘制:分别绘制矩形的四条边,确保矩形轮廓完整。
- 可选内部填充:添加了内部填充的逻辑,若不需要填充可直接删除该部分代码。
- 通用适配性:无论输入的两个对角点坐标如何,都能生成正确的矩形,解决了原函数仅适配固定行差的问题。
内容的提问来源于stack exchange,提问作者Anchit Kumar
相关产品推荐
相关产品推荐

