在python中循环乘积以计算序列

在python中循环乘积以计算序列,python,Python,我将用python计算以下系列的结果: 公式 下面是我要计算的函数: def compute(limit): pi = 1 for i in range(1,limit): pi = pi * ((4*(i**2))//(4*(i**2)-1)) print(2*pi) compute(10000) /*returns 2*/ 我知道这是一个愚蠢的问题。但是你能解决这个片段的问题吗?你有/而不是/,你想要除法,但是做了地板除法 def c

我将用python计算以下系列的结果:

公式

下面是我要计算的函数:

 def compute(limit):
     pi = 1
     for i in range(1,limit):
         pi = pi * ((4*(i**2))//(4*(i**2)-1))
     print(2*pi)

 compute(10000) /*returns 2*/

我知道这是一个愚蠢的问题。但是你能解决这个片段的问题吗?

你有
/
而不是
/
,你想要除法,但是做了地板除法

def compute(limit):
    pi = 1
    for i in range(1,limit):
        pi = pi * ((4*(i**2))/(4*(i**2)-1))  # you had here //
    print(2*pi)

compute(10000)
输出:

3.1415141108281714

将一个4s换成一个浮球,方法是将一个4s换成浮球。在它之后,将//更改为/。它使python将所有内容解释为浮动:

def compute(limit):
    pi = 1
    for i in range(1,limit):
        pi = pi * ((4.*(i**2))/(4*(i**2)-1))
    print(2*pi)

compute(10000) 

正如其他人已经提到的,
/
是整数除法。无论是除浮点数还是除整数,结果始终是整数。Pi不是整数,所以应该使用float division:
/
,并通过将其中一个数字转换为float*,明确地告诉Python您确实需要一个float。例如,您可以执行
4
->
4.
(注意点)

您可以使用and模块和生成器表达式以更清晰的方式执行相同的操作

import functools 
import operator

def compute(limit):
    return 2 * functools.reduce(operator.mul, ((4.*(i**2)/(4*(i**2)-1) for i in range(1, limit + 1))

*Python3使用
4/(某物)
进行浮点除法,即使没有这个功能,但是Python2.7需要
from\uuuuuuuuuuuuuuuu导入除法
来像Python3一样自由除法,否则除法将以任何方式产生整数。

。。。您的好意。在Python 3中,您不需要将4转换为浮点,但这并不有害。啊,您是对的,我仍然使用Python 2.7.x,但事实上,在Python 3中,您不需要这样做。如果您想要一个收敛更快的系列,请看