在python中对连续的第三个数字求和

时间:2012-06-18 04:00:07

标签: python

我该如何解决这个问题?

程序应包含函数sumTri(cutOff)的定义。该函数将三个数字添加到总和中。

三位数是第三个数字:1, 4, 7, 10, ....只要三位数小于cutOff,该函数就会将连续的三位数1, 4, 7, ...添加到总和中。该函数返回这些数字的总和。

2 个答案:

答案 0 :(得分:5)

很简单:

def sumTri(cutOff):
  return sum(range(1,cutOff,3))

或者,当你需要它低级时:

def sumTri(cutOff):
  sum = 0
  tri = 1
  while tri < cutOff:
    sum += tri
    tri += 3
  return sum

我会试着稍微解释两个灵魂。

在第一种情况下,您使用Python的两个“高级”功能,这些功能可以让您完成所有工作:sumrangerange(a,b,c)函数会生成从ab的数字列表,其中包含步骤c。 E.g:

In [1]: range(1,10,3)
Out[1]: [1, 4, 7]

In [2]: range(1,22,3)
Out[2]: [1, 4, 7, 10, 13, 16, 19]

您必须在此注意range生成数字,直到列表中的数字小于b,而不是小于或等于。正是您的任务所需。

sum显然会计算并返回列表中数字的总和作为参数:

In [3]: sum([1])
Out[3]: 1

In [4]: sum([1,2])
Out[4]: 3

In [5]: sum([1,2,3])
Out[5]: 6

现在你需要结合这两个功能:

return sum(range(1,cutOff,3))

第二种解决方案更“低级”和“算法”。你在这里没有使用特殊的python函数,而是自己做所有事情。

您使用两个变量来计算总和:

  • sum - 存储金额的变量
  • tri - 具有您逐步添加的当前数字值的变量

当你写下这样的东西时:

a = a + 5

这意味着:“现在我希望a等于a之前加5”或“增加a 5”。你可以写得更短:

a += 5 

这两种形式是等效的。

但你不需要简单地添加一些东西。你需要做很多次,直到发生了什么事。在python中,您可以使用while

来完成
while someting-is-true:
  do-something

每次while检查something-is-true条件,并且当它为真时,它会生成while(缩进)下的命令,即do-something

现在您知道编写解决方案所需的一切:

def sumTri(cutOff):
  sum = 0                      # we start the sum from 0
  tri = 1                      # and the first number to add is 1
  while tri < cutOff:          # next number to add < cutOff?
    sum += tri                 # than add it to sum
    tri += 3                   # and increase the number by 3
  return sum                   # now you have the result, return it

这就是完成工作的功能。现在您可以使用该功能。 你是怎么做到的?

def sumTri(cutOff):
  ...

# anywhere in you program:
# presuming a is the cutOff
print sumTri(a)

如果要运行该函数并使用其结果,只需编写function_name(args)

答案 1 :(得分:4)

此序列与triangular numbers

相关

这是一个O(1)

def sumTri(cutoff):
    n = (cutoff+1)//3
    return (3*n-1)*n//2