循环遍历产品以计算python中的serie

时间:2016-10-07 09:41:33

标签: python

我要在python中计算下面serie的结果:

公式

enter image description here

所以,这是我的计算函数:

 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*/

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

3 个答案:

答案 0 :(得分:1)

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

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

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))

*即使没有这个,Python 3也会使用4/(something)进行浮动除法,但是Python 2.7需要from __future__ import division除以Python 3之外的自由,否则除法将导致任何整数方式。

答案 1 :(得分:0)

你有//而不是/,你想要分组,但是做了分区

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

答案 2 :(得分:0)

通过放置一个4将其中一个更改为浮点数。在它之后并将//更改为/。它使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)