如何正确查找下一个完全平方数?我的Python代码为何输入121返回122而非144
代码异常根因
- 方法调用形式错误:
is_integer是浮点数的实例方法,必须加括号调用才能返回“值是否为整数”的布尔结果。原代码写math.sqrt(sq).is_integer没加括号,实际是引用方法对象本身,只要方法存在(浮点数类型永远有这个方法),if判断就会恒为真,完全没做平方根是否为整数的实际校验。 - 核心逻辑偏差:相邻两个完全平方数的差值为
2n+1(n为前一个平方数的平方根),差值永远大于1,原代码在判定输入为平方数后,给原数加1再判断是否为平方数,这个分支从逻辑上就不可能命中——哪怕前面的判断写对,也永远找不到正确结果。
正确实现方案
无需逐值遍历校验,直接基于平方根计算即可,实现流程:
- 计算输入值的算术平方根
- 校验平方根是否为整数,判断输入本身是否为完全平方数
- 若输入不是完全平方数,直接返回-1
- 若输入是完全平方数,将平方根取整后加1,重新做平方运算,得到的就是紧随其后的下一个完全平方数
修正后代码:
import math def find_next_square(sq): root = math.sqrt(sq) if not root.is_integer(): return -1 next_root = int(root) + 1 return next_root ** 2
验证示例:传入121时,计算得到平方根为11.0,满足完全平方数判定,下一个根为12,返回12的平方值144,符合预期;传入非平方数(如122)时,平方根非整数,直接返回-1。
内容的提问来源于stack exchange,提问作者Cookiecrumble
相关产品推荐
相关产品推荐

