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

SHA*_*AIN 0 python for-loop python-3.x

让我们假设这个系列

1+2+3+....+n
Run Code Online (Sandbox Code Playgroud)

在带有for循环的c中,我们可以轻松完成此操作

for(i=1;i<=n;i++)
{
    sum += i;
}
Run Code Online (Sandbox Code Playgroud)

python我能够使用while循环完成此操作

while(num <= n):

      sum += num
      num = num+1
Run Code Online (Sandbox Code Playgroud)

但我无法使用python for循环来做到这一点

Nat*_*han 5

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

这样你就可以做到

for i in range(1, n + 1):
Run Code Online (Sandbox Code Playgroud)

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

summation = 0
for i in range(1, n + 1):
    summation += i # shorthand for summation = summation + i
Run Code Online (Sandbox Code Playgroud)

但是,由于求和事情很常见,因此有一个内置函数sum可以为你做这个,不需要循环.你只需传递一个可迭代的(例如一个列表,一个元组,......),它将返回所有项目的总和.因此,上面的for循环等同于更短的循环

summation = sum(range(1, n + 1))
Run Code Online (Sandbox Code Playgroud)

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

因为你可能会发现这对Python有用,所以你可以直接循环迭代的元素也很好.例如,如果我有一个名单列表并想为每个人打印问候语,我可以采用"传统"方式:

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

或者以更简洁的"Pythonic"方式:

for name in names:
    print("Hello", name)
Run Code Online (Sandbox Code Playgroud)