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

Series Summation using for loop in python

假设这个系列

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

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

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

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

1
2
3
4
while(num <= n):

      sum += num
      num = num+1

但是我不能用python来做循环


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

这样你就可以做到

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

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

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

然而,由于总结是如此常见,所以有一个内置的函数sum可以为您做到这一点,不需要循环。你只要给它传递一个iterable(例如list,tuple,…),它就会返回所有项的总和。因此,上面的for循环相当于更短的

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

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

因为在继续使用python时可能会发现这一点很有用,所以可以直接循环iterable的元素也很好。例如,如果我有一个名字列表,并且想为每个人打印一个问候语,我可以用"传统"的方式:

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

或者用更简洁的"Python式"方式:

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


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

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

55

我们有1个

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

2.28333

对于1/n^2,我们有

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

1.463611