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
相关产品推荐
相关产品推荐

