在python中使用for循环的系列求和

新手上路,请多包涵

让我们假设这个系列

1+2+3+....+n

在带有 for 循环c 语言中,我们可以很容易地做到这一点

for(i=1;i<=n;i++)
{
    sum += i;
}

python 中,我可以使用 while 循环 来完成这个

while(num <= n):

      sum += num
      num = num+1

但我不能使用 python for 循环来做到这一点

原文由 SHAH MD IMRAN HOSSAIN 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 467
2 个回答

Python 语法与 c 有点不同。特别是,我们通常使用 range 函数为迭代器变量创建值(这是 Stephen Rauch 的评论中的内容)。 range 的第一个参数是起始值,第二个是最终值(不包含),第三个值是步长(默认为1)。如果您只提供一个值(例如 range(5) ),则起始值为 0,提供的值为结束值(相当于 range(0, 5) )。

这样你就可以做

for i in range(1, n + 1):

创建一个 for 循环,其中 i 采用与 c 循环中相同的值。您的代码的完整版本可能是:

 summation = 0
for i in range(1, n + 1):
    summation += i # shorthand for summation = summation + i

但是,由于求和是如此常见,因此有一个内置函数 sum 可以为您完成此操作,无需循环。您只需将一个可迭代对象(例如列表、元组…)传递给它,它就会返回所有项目的总和。因此上面的 for 循环等同于更短的

summation = sum(range(1, n + 1))

请注意,因为 sum 是内置函数的名称,所以您不应将其用作变量名;这就是我在这里使用 summation 的原因。

因为您可能会发现这对 Python 的发展很有用,所以您可以直接遍历 iterable 的元素也很好。例如,如果我有一个姓名列表并想为每个人打印问候语,我可以使用“传统”方式来实现:

 names = ["Samuel", "Rachel"]
for i in range(len(names)):  # len returns the length of the list
    print("Hello", names[i])

或者以更简洁的“Pythonic”方式:

 for name in names:
    print("Hello", name)

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

对于一个系列,建立您的列表,然后将它们全部添加在一起

n = 10
sum(range(n+1))

55


对于 1/n 我们有

n = 5
sum([1/i for i in range(1,n+1)])

2.28333


对于 1/n^2 我们有

n = 5
sum([1/i**2 for i in range(1,n+1)])

1.463611

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

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