我想计算这个数学总和:
Σ(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,我很乐意用它做作业。
谢谢。
答案 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)])