Python线性搜索求整数平方根(禁用幂运算符):输入1返回None问题
问题分析与解决
你的代码问题出在循环范围的取值上:当输入x=1时,range(x)生成的序列是[0],循环里i只会取到0,根本不会执行到i=1的情况。0*0=0 < 1,不满足i*i >=x的条件,循环结束后函数没有返回任何值,所以默认返回None。
修正方案
把循环的range(x)改成range(1, x+1),这样当x=1时,循环会遍历到i=1,此时1*1 >=1成立,触发返回逻辑,返回1//1=1,符合预期。修正后的代码如下:
def mySqrt(x): if x == 0: return x for i in range(1, x+1): if i*i >= x: return x // i print(mySqrt(4)) # Output 2 print(mySqrt(1)) # Output 1 print(mySqrt(12)) # Output 3
额外说明
原代码里x=0已经单独处理,循环从1开始可以避免无效的0值迭代,同时覆盖所有需要判断的整数情况。对于完全平方数(如4),i取到平方根时触发返回,x//i刚好等于平方根;对于非完全平方数(如12),i取到第一个平方大于x的整数,x//i就是向下取整的平方根,逻辑是正确的。
内容的提问来源于stack exchange,提问作者SohaibP
相关产品推荐
相关产品推荐

