如何在运行循环后对所有整数求和

时间:2016-08-10 19:38:54

标签: python python-2.7 python-3.x

我写过一个剧本,但我不知道是否有可能获得总数。我的脚本会给我每个循环的总数,但我希望得到一切的总和。例如,如果我输入6,我希望结果为168.如果我输入5,我希望结果为105.

由于

我的脚本如下:

def multiples(n, high):
    i = 0
    res = 0
    while i <= high:
        res = res + (n+i)
        i = i + 1
    print res
    return res

def p(high):
    i = 1
    while i <= high:
        multiples(i, i)
        i = i + 1

p(6)  # Expected Output: 168

2 个答案:

答案 0 :(得分:1)

一些事情,

首先,这是一种非常老式的循环。

i = 0
while i <= some_number:
    do_something
    i = i + 1

我使用的最后一种语言需要像Basic这样的模式。使用for循环。一个标准的for循环(注意:不是Python的,但我会在一分钟内得到它)看起来像for i=0; i<=some_number; i++ { do_something }。那就是:

  1. 初始化i
  2. 何时保持循环的条件
  3. 每个循环块后要做什么
  4. Python更加清晰。 for遍历任何可迭代,所以:

    for element in [1,3,5,7,9]:
        ...
    

    在循环体中为您提供1,然后3,然后5,然后7,然后9element。将此与range内置结合使用以循环N次。

    for i in range(high):
        # do something `high` number of times
    

    天真的重写看起来像:

    def multiples(k, n):
        res = 0
        for i in range(n):
            res += (k+i)
        print(res)
        return res
    
    def p(n):
        for i in range(n):
            multiples(i, i)
    

    然而,这并不能真正给你你想要的东西。您想要的是将值multiples(i, i)分配给某些东西。

    def p(n):
        total = 0
        for i in range(n):
            total += multiples(i, i)
        return total
    

    现在我们正在跟踪p内的总计,并在之后返回。

    result = p(6)
    print(result)  # does what you want
    

    <小时/> 当然没有充分理由打破这两个功能。您可以轻松地写下:

    def p(n):
        total = 0
        for i in range(n):
            for j in range(i):
                total += j+i
        return total
    

答案 1 :(得分:0)

通过最小的更改,这将允许p(6)返回168

def multiples(n, high):
   i = 0
   res = 0
   while i <= high:
      res = res + (n+i)
      i = i + 1
   print res
   return res

def p(high):
   i = 1
   lumpSum = 0
   while i <= high:
      lumpSum += multiples(i, i)
      i = i + 1
   return lumpSum

print p(6)

或者,您可以缩短p

def p(high):
    return sum([multiples(i, i) for i in range(1, high + 1)])

编辑:整个代码确实可以简化为:Adam Smith中指出his comment

p = lambda n: sum(i+j for i in range(n) for j in range(i))