输入是计算PI的精度,我需要输出计算出的PI的值以及达到该值的术语数量。
这是我制作的代码,应该打印出来(3.33968,5)。有人可以检查我出错的地方吗?
t_precisionstr = input("Precision Value for Taylor: ")
t_precision = float(t_precisionstr)
t_list = []
def taylor(t_precision):
t_number1 = 0
t_number2 = 1
t_final = 0
while t_final <= abs(m.pi - t_precision):
t_number1 = t_number1 + 1
t_answer = t_number2 + ((-1)**t_number1 / (2*t_number1+1))
print(t_answer)
t_number = t_number1 + t_number2
t_number2 = 0
t_list.append(t_answer)
t_final = 4 * (sum(t_list))
return(t_final,t_number+1)
print(taylor(t_precision))
我认为第一个问题是您的代码很难阅读,因此很难调试。使用有意义的变量名称并尝试最大程度地减少不必要的声明总是最好的。
这是标题所述的问题的工作实施,例如将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
语句被错误地缩进了,因此无论如何,循环在第一次执行时退出。