我遇到一个问题,让python 2.5 shell做我需要做的事情。我试图让用户输入“n”的值,表示循环将重复的次数。实际上,我需要让用户输入N对应于Gregory-Leibniz系列中的术语数量,并输出pi的近似值。
Gregory-Leibniz系列 PI = 4 *((1/1) - (1/3)+(1/5) - (1/7)+(1/9) - (1/11)+(1/31)...)
所以当n为3时,我需要循环计算高达1/5。不幸的是,它总是给我一个值为0的变量。
我现在的代码是错误的,我知道。只是寻求一些帮助。代码如下:
def main():
n = int(raw_input("What value of N would you like to calculate?"))
for i in range(1,n,7):
total = (((1)/(i+i+1))-((1)/(i+i+2))+((1)/(i+i+4)))
value = 4*(1-total)
print(value)
main()
答案 0 :(得分:2)
您需要累积条款。 e.g。
total = 0.0
term = 1.0
for i in range (1,n+1):
denom = 2*i-1
total += term/denom
term = -term
当然,你可以更简洁地表达这个
也许更自然地使用它来代替
总计= 0.0 term = 1.0 对于范围内的i(n): denom = 2 * i + 1 总计+ =期限/ denom term = -term
当你以这种方式使用范围中最自然形式的n个术语时。注意计算分母的差异。
答案 1 :(得分:2)
这使用整数除法,因此您将得到零:
total = (((1)/(i+i+1))-((1)/(i+i+2))+((1)/(i+i+4)))
相反,使用浮动来获得浮动除法。
total = ((1.0/(i+i+1))-(1.0/(i+i+2))+(1.0/(i+i+4)))
在python 2中,默认情况下对整数执行/
会得到一个整数。
在python 3中,这已被更改,/
始终执行浮点除法(//
执行整数除法。)
答案 2 :(得分:1)
Q1)转到https://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80找到π的莱布尼兹公式。设S是用于近似π的项的序列。我们可以看到,S中的第一项是+1,S中的第二项是-1/3,S中的第三项是+1/5,依此类推。找到最小数量的项,使得4 * S和π之间的差小于0.01。即,abs(4 * S-math.pi)< = 0.01。