为何计算π近似值的Python代码输出结果不正确?
问题原因分析
你的代码核心问题是循环次数错误,导致多计算了额外的项:
- 需求明确n=1对应第一项(结果3),n=2对应前两项(3 + 4/(2×3×4))。
- 你的代码中,当n>1时,初始
approx_pi已经是第一项(3),但循环用了range(1, n+1),会执行n次循环。以n=2为例,循环执行2次,在初始值基础上额外加了2个项,最终计算的是前4项的结果(3 + 4/(2×3×4) −4/(4×5×6)+4/(6×7×8)),这就是你得到3.145238095238095的原因。 - 另外,代码里的
counter变量完全多余,for循环的range已经控制了循环次数,手动修改counter毫无意义。
修正后的代码
def approximate_pi(n): approx_pi = 3 sign = 1 numb = 2 # 初始值是第1项,只需循环n-1次添加后续项 for _ in range(n-1): approx_pi += sign * (4 / (numb * (numb+1) * (numb+2))) sign *= -1 numb += 2 print(approx_pi) approximate_pi(2) # 输出3.1666666666666665
验证结果
- n=1时,循环执行0次,直接输出3,符合需求。
- n=2时,循环执行1次,加上第一个正分式,结果为3 + 4/(2×3×4) = 3 + 1/6 ≈3.166666667,和预期一致。
内容的提问来源于stack exchange,提问作者thumpy
相关产品推荐
相关产品推荐

