编写判断两数是否接近的Python函数遇异常:返回值错误求助
问题分析与修复方案
咱们先来拆解下你代码里的几个关键问题,然后给出更简洁可靠的解决方案:
现有代码的问题
- 多余的
while循环:你的while close>=0循环只会执行一次——因为循环体里不管什么情况都会触发return,根本不会进入下一次循环。更糟的是,如果close是负数,循环直接跳过,函数没有任何返回值,调用时会得到None,完全不符合你预期的布尔值结果。 - 冗余的条件判断:你分别判断
num1-num2<=close和num2-num1<=close,其实这本质上就是判断两个数差值的绝对值是否小于等于close,完全可以合并简化。
修复后的代码
def assert_within_tolerance(num1, num2, close): # 将所有参数转为浮点数,兼容字符串输入的场景 num1 = float(num1) num2 = float(num2) close = float(close) # 核心逻辑:计算两数的绝对差值,判断是否在容忍范围内 return abs(num1 - num2) <= close
改进点说明
- 移除无用循环:直接通过
abs()计算两数的距离,逻辑清晰且高效,不需要循环冗余。 - 健壮性提升:把
close也转为浮点数,避免传入字符串类型参数时出错;同时不管close是正还是负(业务场景中close应该是非负的,但代码做了兼容),都会返回明确的布尔值,不会出现None的情况。 - 逻辑简化:一行核心判断就能替代原来的多分支条件,可读性更强。
可以用这些测试用例验证效果:
assert_within_tolerance(5, 7, 2)→ 返回True(差值等于容忍度)assert_within_tolerance(3.5, 4.2, 0.6)→ 返回False(差值0.7大于容忍度0.6)assert_within_tolerance("10", "10.5", "0.5")→ 返回True(字符串转浮点数后差值符合要求)
内容的提问来源于stack exchange,提问作者Marti Butlor
相关产品推荐
相关产品推荐

