def wallis(n):
pi = 0.0
for i in range(n):
left = (2 * i)/(2 * i - 1)
right = (2 * i)/(2 * i + 1)
total = left * right
pi = pi + total
return pi
print wallis(1000)
print wallis(10000)
print wallis(100000)
Run Code Online (Sandbox Code Playgroud)
我完全复制了公式,但我一直得到0作为输出.有人可以告诉我我做错了什么.Python 2.7.
公式的链接在这里
Python正在进行整数除法,并截断小数.这是因为两个值除以整数.将其中一个数字转换为浮点数以获得浮点值.
left = float(2 * i)/(2 * i - 1)
right = float(2 * i)/(2 * i + 1)
Run Code Online (Sandbox Code Playgroud)
或者,正如@kindall指出的那样,您可以直接将常量更改为浮点数并避免调用该float
函数:
left = (2.0 * i)/(2 * i - 1) # just 2. works, too
right = (2.0 * i)/(2 * i + 1)
Run Code Online (Sandbox Code Playgroud)
如果/当你切换到python 3.x时,你不需要这样做.实际上,您需要显式请求整数除法//
.
根据@Serdalis的评论,您还可以from __future__ import division
在文件的顶部添加以获得与python 3.x相同的行为(即您不需要float
在等式中添加.)