You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python平方根函数困惑:判断完全平方数时0返回值异常

问题原因分析

原函数输入n=0返回False的核心问题出在第一个判断条件:

if n == -abs(n):
    return False

因为abs(0)的结果是0,-abs(0)同样等于0,所以当n=0时,这个条件会成立,直接触发返回False的逻辑,完全跳过了后续的平方数判断步骤。

而你单独测试的test_function没有这个前置判断,所以能正常执行平方数校验逻辑,正确返回True。

修正方案

把第一个条件改成直接判断n是否小于0,这样0不会被误判:

import math
def is_square(n):
    if n < 0:
        return False
    elif math.sqrt(n) != int(math.sqrt(n)):
        print("NOT PERFECT")
        return False
    else:
        print("PERFECT")
        return True

额外提示:使用math.sqrt存在浮点数精度风险(比如超大完全平方数转浮点数时可能丢失精度),更可靠的方式是计算整数平方根后再平方对比:

import math
def is_square(n):
    if n < 0:
        return False
    root = math.isqrt(n)  # Python 3.8+支持,返回非负整数平方根
    return root * root == n

内容的提问来源于stack exchange,提问作者France Miguel Jaen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 20:12:35