输入是计算pi的精度,我需要输出计算出的pi的值和达到该值的项数。
这是我编写的代码,应该可以打印出来(3.33968,5)。有人可以检查我哪里出了问题吗?
答案 0 :(得分:0)
我认为第一个问题是您的代码难以阅读,因此难以调试。最好使用有意义的变量名,并尽量减少不必要的变量声明。
如标题所述,这是您的问题的有效实现方式,例如计算给定精度的pi:
# Pi/4 = 1 - 1/3 + 1/5 - 1/7 + ...
import numpy as np
def taylor(precision):
t_pi, factor, error, order = 0, 0, np.pi, 0
while (error >= precision):
t_pi += 4 * (-1)**factor / (2*factor + 1)
error = abs(np.pi - t_pi)
order += 1
factor += 1
return t_pi, order
taylor(0.2)
>>> (3.3396825396825403, 5)
这是您的代码的更正版本:
def taylor(t_precision):
t_list = []
t_number = 0
t_final = 0
while t_precision <= abs(np.pi - t_final):
t_answer = (-1)**t_number / (2*t_number+1)
print(t_answer)
t_list.append(t_answer)
t_final = 4 * (sum(t_list))
t_number = t_number + 1
return (t_final,t_number)
t_precision = 0.2
taylor(t_precision)
>>> (3.3396825396825403, 5)
错误是:
while
循环的条件。您正在根据pi的实际值与所需精度之间的差异来检查最终近似值。例如如果您的近似值为2.6
,精度为0.1
,则该条件已经成立,而误差大于所需的精度
return
语句的缩进错误,因此无论什么情况,循环都会在第一次执行时退出。