我要在python中计算下面serie的结果:
公式
所以,这是我的计算函数:
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*/
我知道这是一个愚蠢的问题。但是你能解决这个片段的问题吗?
答案 0 :(得分:1)
正如其他人已经提到的,//
是整数除法。无论您是将浮点数还是整数划分,结果都将是整数。 Pi不是一个整数,所以你应该使用浮点除法:/
并通过将其中一个数字转换为float * 来明确告诉Python你真的想要一个浮点数。例如,您可以执行4
- > 4.
(注意点)。
您可以使用functools
和operator
模块以及生成器表达式以更清晰的方式执行相同的操作。
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)