我在Wallis产品上的python代码有什么问题?

2024-10-02 18:14:19 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,我被要求编写沃利斯产品的代码,它并不复杂。所以我做了一个代码,但显然,它只能为Wallis(1)工作,而不能为其余的工作。有人能帮我吗?谢谢您!在

def Wallis (n):
    result = 1
    for count in range(2, n+2, 2):
        result = result * (count**2/((count-1)*(count+1)))
    return result

瓦利斯积的计算公式

^{pr2}$

输出

Wallis(1) = (2*2)/(3*5) = 0.267
Wallis(2) = Wallis(1) * (4*4)/(5*7) = 0.122

Tags: 代码inforreturn产品defcountrange
3条回答

主要是你的射程指令是错误的:

range(2, 2*n+2, 2)

或者,您可以将复杂性转移到公式中,即:

^{pr2}$

正如其他人所说,你的range()需要改变。在

对于n=3

for count in range(2, n+2, 2):
    print(i)

将打印

^{pr2}$

{但你也需要。在

正如Python文档所说

class range(start, stop[, step]) 

For a positive step, the contents of a range r are determined by the formula r[i] = start + step*i where i >= 0 and r[i] < stop.

不包括stop的含义。在

这里step是{},您可以使用

^{4}$

而且求幂比乘法要贵。所以

count*count

count**2

所以修改后的版本可以是

def Wallis(n):
    result=1
    for count in range(2, 2*(n+1), 2):
        result*=((count*count)/((count-1)*(count+1)))
    return result

注意,Wallis返回的值只有Pi值的一半。在

您可以将return语句修改为

return result*2

如果你想的话。在

代码的问题是count等于等式中的2*n,因此在(count**2/((count-1)*(count+1)))count**2与{}相同,但是下面的{}应该与{}相同,但实际上是{}。count+1也是如此。在

我做了我自己的版本,应该会对你有所帮助(虽然我使用了一个不同的方程式,在https://www.wikiwand.com/en/Wallis_product

def wallis(limit):
    result = 1
    for x in range(2, limit, 2):
        result *= (x / (x - 1)) * (x / (x + 1))
    return result

limit越高,它就越接近半π。在

相关问题 更多 >