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

Python计算下一个完全平方数时while循环test值不更新陷入无限循环

问题核心原因
  • 变量未在循环内更新:plusone、test的计算逻辑写在while循环外,仅会在函数调用时执行一次。后续i递增后没有重新计算这两个变量,导致test的值永远固定,陷入无限循环。
  • 循环判断逻辑错误:你自定义的isfloat函数仅判断变量能不能转为float类型,而Python中整数的平方根结果哪怕是整数值,也会以float格式存储(比如144**0.5 = 12.0),isfloat(test)永远返回True,循环永远不会终止。你应该用已实现的isint函数判断test是否为整数,作为循环终止条件。
优化后的完整实现

其实不需要循环逐个试数,只要确认输入是完全平方数后,给平方根加1再平方即可直接得到下一个完全平方数,效率更高:

def isint(x): # tests to see if a variable is a whole number
    try:
        a = float(x)
        b = int(a)
    except (TypeError, ValueError):
        return False
    else:
        return a == b
    
def find_next_square(sq):
    square_root = sq ** 0.5 # 对输入开平方
    if not isint(square_root): # 输入不是完全平方数直接返回-1
        return -1
    # 直接计算下一个完全平方数
    return (int(square_root) + 1) ** 2

sq = 121 # 输入
print(find_next_square(sq))
print('End')

运行后输出结果为144,符合预期。

若要保留原循环逻辑修复

把plusone和test的计算移到循环内,同时修改判断条件即可:

def determine_next_square(sq):
    i = 1
    while True:
        plusone = sq + i
        test = plusone ** 0.5
        if isint(test):
            return test ** 2
        i += 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:06:00