Python实现power_ranger函数时n=3异常,求排查解决
解决power_ranger函数的浮点数精度问题
问题原因
你当前代码的核心问题是浮点数精度误差:用i**(1/n)计算n次方根时,结果往往不是精确的整数。比如27**(1/3)在Python中实际返回2.9999999999999996,而非精确的3,这会导致(i**(1/n))%1 == 0的判断失效,漏掉符合条件的数。
正确实现思路
换个方向计算:从正整数1开始,依次计算每个数的n次幂,判断结果是否落在区间[a, b]内,直到计算出的n次幂超过b时停止。这种方式完全避开浮点数运算,彻底解决精度问题。
修正后的代码
def power_ranger(n, a, b): count = 0 num = 1 while True: current_power = num ** n if current_power > b: break if current_power >= a: count += 1 print(current_power) num += 1 return count
测试验证
- 执行
power_ranger(3, 1, 27):输出1、8、27,返回3,符合预期。 - 执行
power_ranger(3, 1, 72):输出1、8、27、64,返回4(原代码漏掉了64,就是因为浮点数精度问题)。 - 执行
power_ranger(10, 1, 5):输出1,返回1,正常工作。
内容的提问来源于stack exchange,提问作者aviralsingh
相关产品推荐
相关产品推荐

