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

Python双重while循环实现平方根计算逻辑错误排查

平方根估算代码逻辑Bug修复

问题背景

编写了包含双重while循环的平方根估算代码,运行异常,逻辑复杂度较高存在隐藏bug,原实现代码如下:

import math
print("How many numbers am I estimating John?")
count = int(input("COUNT> "))
print("Input each number to estimate.")
better_guess = 0
initial_guess = 10
i = 0
j = 0
t = 1
list = []
for j in range(count):
  num = float(input("NUMBER> "))
  list.append(num)
  j = j + 1
  if j == count:
    print("The square roots are as follows:")
while i <= len(list):
  while t != 0 :
    initial_guess = 10
    better_guess = (initial_guess + (list[i])/initial_guess) / 2
    if initial_guess == better_guess:
     print(f"OUTPUT After {t} iterations, {list[i]}^0.5 = {better_guess}")
     i = i + 1
     break
   initial_guess = better_guess
  i = i + 1

核心Bug点

  • 索引逻辑错误:外层for循环手动执行j = j +1属于冗余操作,for j in range(count)会自动完成索引迭代,手动修改会打乱迭代节奏;外层while循环判断条件i <= len(list)会触发列表索引越界,列表合法索引范围为0到len(list)-1。
  • 内层循环逻辑失效:每次进入内层while循环都会将initial_guess重置为10,无法使用上一轮迭代得到的better_guess更新猜测值,永远无法收敛到正确结果;迭代计数变量t从未做自增操作,既无法统计真实迭代次数,t !=0的循环终止条件也完全不生效。
  • 浮点数判断逻辑错误:直接用==判断两个浮点数相等,很容易因为浮点精度问题触发死循环,实际应该设置精度阈值(比如差值小于1e-8)判断是否收敛。
  • 变量初始化位置错误:初始猜测值initial_guess、迭代计数t的初始化放在了全局位置,处理完第一个待开方数后变量残留值会干扰后续数字的计算,应该放在每个数字计算的循环内部初始化。
  • 缩进错误:原代码中initial_guess = better_guess行缩进不匹配,会直接触发语法报错。

修正后可运行代码

import math
print("How many numbers am I estimating John?")
count = int(input("COUNT> "))
print("Input each number to estimate.")
num_list = []
# 收集待计算数字,移除冗余的手动索引自增逻辑
for _ in range(count):
    num = float(input("NUMBER> "))
    num_list.append(num)
print("The square roots are as follows:")

i = 0
# 修正索引越界问题,用<代替<=
while i < len(num_list):
    # 每个数字计算前单独初始化变量,避免前序计算值残留干扰
    initial_guess = 10
    t = 1
    # 设置收敛阈值,避免浮点数精度问题导致死循环
    while True:
        better_guess = (initial_guess + num_list[i]/initial_guess) / 2
        # 差值小于阈值即判定为收敛
        if abs(better_guess - initial_guess) < 1e-9:
            print(f"OUTPUT After {t} iterations, {num_list[i]}^0.5 = {better_guess}")
            break
        initial_guess = better_guess
        t += 1
    i += 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:09:16