计算一系列的总和?

新手上路,请多包涵

这是我的任务,在我的一生中,我似乎想不出办法去做。这是我到目前为止的代码:

 sum = 0
k = 1
while k <= 0.0001:
     if k % 2 == 1:
       sum = sum + 1.0/k
     else:
      sum = sum - 1.0/k
 k = k + 1
 print()

这是我的任务:

创建一个名为 sumseries.py 的 python 程序,它执行以下操作: 在程序的顶部放置注释,其中包含您的姓名、日期和程序功能的描述。

编写一个程序来计算和显示级数的总和:

1 - 12 + 13 - 14 + …

直到达到小于 0.0001 的项。

10,000 次迭代的答案似乎是 0.6930971830599583

我用 1,000,000,000(十亿)次迭代运行该程序并得出数字 0.6931471810606472。我需要创建一个循环来以编程方式创建系列。

原文由 Jamie Schwiderski 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 516
2 个回答

实际上,你可以写得更短:

 Answer = sum(1.0 / k if k % 2 else -1.0 / k for k in range(1, 10001))


这段代码的作用:

  • 最里面的部分是一个 生成器 表达式,它“即时”计算一系列的元素
    • 1.0 / k if k % 2 else -1.0 / k results in 1.0 / k if k is odd and -1.0 / k otherwise ( a - b is the same as a + (-b)
    • for k in range(1, 10001) 遍历所有 k 范围从1(包括)到10001(排除)
  • sum 可以计算任何序列(准确地说是任何 可迭代 的)的总和,无论是列表、元组还是生成器表达式

没有生成器表达式也一样:

 Answer = 0
for k in range(1, 10001):
    if k % 2:
        Answer += 1.0 / k
    else:
        Answer -= 1.0 / k

    # or simply:
    # Answer += 1.0 / k if k % 2 else -1.0 / k

原文由 ForceBru 发布,翻译遵循 CC BY-SA 3.0 许可协议

你快到了,你需要做的就是更换

while k <= 0.0001:

和:

  while term <= 0.0001:

项自然是 1/k

原文由 Dominique Lorre 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题