You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python完全平方数判断函数Bug修复:误判4/25为非平方数问题

修复完全平方数判断函数的逻辑错误

嘿,我一眼就瞅见你代码里的问题啦!

你的核心问题出在for循环里的else语句位置:当前代码里,每次循环只要i*i不等于n,就立刻返回False。拿输入4举例,第一次循环i=0,0²≠4,直接就返回False了——根本没机会让i走到2这个正确值!这就是为什么加了else后4和25会被误判的原因。

修复方案一:调整循环逻辑

把else从循环内的if分支里移出来,只有当整个循环跑完、所有可能的i都试过都不匹配时,才返回False。另外还可以优化循环范围,不用从0遍历到n,因为一个数的平方根最大不会超过它的一半(n>1时),或者直接取到sqrt(n)+1,这样效率更高:

def is_square(n):
    if n < 0:
        return False
    # 0和1都是完全平方数,直接返回True
    if n == 0 or n == 1:
        return True
    # 只循环到n的平方根整数部分+1,减少不必要的遍历
    for i in range(2, int(n**0.5) + 1):
        if i * i == n:
            return True
    # 整个循环结束都没找到匹配的i,说明不是完全平方数
    return False

测试一下:输入25时,i会走到5,5²=25,直接返回True;输入27时,循环到5(因为sqrt(27)≈5.196,取整后是5,+1后循环到6),所有i的平方都不等于27,最后返回False,完美符合你的需求。

修复方案二:更简洁的数学验证法

其实不用循环也能搞定,直接计算n的平方根取整,再验证这个整数的平方是否等于n:

def is_square(n):
    if n < 0:
        return False
    root = int(n**0.5)
    return root * root == n

这个方法效率更高,尤其当n很大的时候,不用遍历大量数值。比如输入27时,int(27**0.5)=5,5²=25≠27,返回False;输入25时,int(25**0.5)=5,5²=25,返回True,完全满足要求。

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

火山引擎 最新活动