如何在Python中定义此求和?

时间:2018-03-20 13:37:54

标签: python

我想计算这个数学总和:

Σ(n=1 to 36) (C(36,n))*((-1)**(n+1))*0,23*(0,29**(n-1))

其中36 C n表示这两个数字的组合。我已经掌握了这个功能:

def C(n,k):
    C = factorial(n)/(factorial(k)*factorial(n-k))
    return C

如何进行总结? 我这学期开始学习Python,我很乐意用它做作业。

谢谢。

3 个答案:

答案 0 :(得分:1)

sum(map(lambda n: (C(36,n))*((-1)**(n+1))*0,23*(0,29**(n-1)), range(1, 36+1)))怎么样?

答案 1 :(得分:0)

您可以使用循环将所有值汇总为单个变量。

val = 0
for n in range(1,37):
    intrm_val = C(36,n))*((-1)**(n+1))*0,23*(0,29**(n-1))
    val = val + intrm_val

通过使用这样的列表理解来做同样的事情:

intrm_val_list = [C(36,n))*((-1)**(n+1))*0,23*(0,29**(n-1)) for n in range(1,37)]
val = sum(intrm_val_list) # sum is built-in function of python.

Lambda与内联函数类似。

def foo(a):
    return a*a

上述功能可以像lambda a : a*a一样轻松地重写。这不是太棒了!!我们可以像这样使用lambda重写我们的列表理解

lambda n : C(36,n))*((-1)**(n+1))*0,23*(0,29**(n-1))

map也是python中的内置函数,用于同时将单个函数应用于iterable的多个元素(在我们的例子中为list)。 例如map(func1, list_of_values)

range生成给定范围内的生成器,不包括end元素。 结合以上所有信息,我们得到了另一位好伙伴@Solomon Ucko给出的答案。

答案 2 :(得分:0)

你的目标是这样吗:

def C(n, k):
    return factorial(n)/factorial(k)*factorial(n-k)

sum([C(36,i)*((-1)**(i+1))*0.23*(0.29**(i-1)) for i in range(1,37)])