瓦利斯的pi公式

Sha*_*ars 3 python python-2.7

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.

公式的链接在这里

Set*_*ton 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在等式中添加.)