You need to enable JavaScript to run this app. 如何正确查找下一个完全平方数?我的Python代码为何输入121返回122而非144
优惠活动
大模型
产品
解决方案
定价
更多

如何正确查找下一个完全平方数?我的Python代码为何输入121返回122而非144

代码异常根因
  • 方法调用形式错误:is_integer是浮点数的实例方法,必须加括号调用才能返回“值是否为整数”的布尔结果。原代码写math.sqrt(sq).is_integer没加括号,实际是引用方法对象本身,只要方法存在(浮点数类型永远有这个方法),if判断就会恒为真,完全没做平方根是否为整数的实际校验。
  • 核心逻辑偏差:相邻两个完全平方数的差值为2n+1(n为前一个平方数的平方根),差值永远大于1,原代码在判定输入为平方数后,给原数加1再判断是否为平方数,这个分支从逻辑上就不可能命中——哪怕前面的判断写对,也永远找不到正确结果。
正确实现方案

无需逐值遍历校验,直接基于平方根计算即可,实现流程:

  1. 计算输入值的算术平方根
  2. 校验平方根是否为整数,判断输入本身是否为完全平方数
  3. 若输入不是完全平方数,直接返回-1
  4. 若输入是完全平方数,将平方根取整后加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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 15:54:05