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

基于两点生成矩形的全局矩阵函数失效:仅首次调用生效

问题分析与修复

核心问题

你的createRect函数存在两个关键缺陷,导致第二次调用无有效输出:

  1. 硬编码的行范围:函数中for j in range(1,6)固定只处理从x+1到x+5的行,仅适配第一次调用中x1-x=5的场景,第二次调用x3-x2=3时,既会处理超出矩形边界的行,又没有完整覆盖目标行范围。
  2. 不完整的矩形绘制逻辑:仅实现了上边横线和右边竖线的绘制,缺少左边竖线、下边横线的绘制,同时填充逻辑依赖固定行范围,导致矩形形态不完整,部分区域被第一次调用的内容覆盖后,无法直观看到第二次调用的效果。

修复后的代码

重构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()

修复说明

  1. 动态边界计算:通过min和max确定矩形的左、右、上、下边界,无需依赖输入坐标的顺序。
  2. 完整四边绘制:分别绘制矩形的四条边,确保矩形轮廓完整。
  3. 可选内部填充:添加了内部填充的逻辑,若不需要填充可直接删除该部分代码。
  4. 通用适配性:无论输入的两个对角点坐标如何,都能生成正确的矩形,解决了原函数仅适配固定行差的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:45:26