Python函数问题:判断点列表是否全部位于矩形内
解决判断点列表是否全部在矩形内的问题
先给你拆解下原代码的核心问题:
- 迭代逻辑完全错误:遍历第一个点时只要满足条件就直接
return True,根本没检查后续点。比如你测试的[(1,1), (0,0), (5,6)],第一个点符合就直接返回,完全忽略了后面超出范围的(5,6)。 - 矩形边界判断冗余:没必要写四个
if分支,先算出x、y方向的最大最小值,不管输入的两个对角是什么顺序,判断逻辑都能统一。 - 空列表处理失效:你把空列表判断放在循环内部,当列表为空时循环根本不会执行,自然没有返回值。
- 没必要依赖numpy:作业要求避免用库,直接遍历原生列表就行。
修正后的代码
def allIn(firstCorner=(0,0), secondCorner=(0,0), pointList=[]): # 处理空列表:这里默认空列表返回True(无点需要检查),若作业要求返回False可直接修改 if not pointList: return True # 计算矩形的真实边界,适配任意对角输入 x_min = min(firstCorner[0], secondCorner[0]) x_max = max(firstCorner[0], secondCorner[0]) y_min = min(firstCorner[1], secondCorner[1]) y_max = max(firstCorner[1], secondCorner[1]) # 遍历所有点,只要有一个点超出范围就返回False for x, y in pointList: if not (x_min <= x <= x_max and y_min <= y <= y_max): return False # 所有点都符合条件,返回True return True
代码说明
- 空列表处理:用
if not pointList直接判断列表是否为空,提前处理避免无返回值的问题。 - 边界计算:通过
min和max获取矩形x、y方向的真实边界,不管输入的两个角是左上右下还是右上左下,都能正确锁定矩形范围。 - 迭代逻辑:遍历每个点,只要发现一个点不在范围内立刻返回
False;只有所有点都通过检查,最后才返回True,确保所有点都被验证。 - 无依赖库:完全用原生Python实现,符合作业要求。
测试你的示例
allIn((0,0), (5,5), [(1,1), (0,0), (5,6)])→ 返回False(符合预期)allIn((0,0),(5,5),[(0,-1), (0,0), (5,6)])→ 返回False(符合预期)allIn((0,0), (5,5), [])→ 返回True(若需返回False,修改开头的return True即可)
内容的提问来源于stack exchange,提问作者insectsongs
相关产品推荐
相关产品推荐

