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

