生成和汇总数字列表的自然数系列

时间:2017-11-23 03:03:51

标签: python

我是python的新手,希望有人可以帮助我解决我的练习中的问题。我正在尝试创建一个函数,该函数将从列表中为每个数字添加1的数字总和。例如,[4,2,3]应返回

的结果
((1+2+3+4) + (1+2) + (1+2+3)) = 19

2 个答案:

答案 0 :(得分:1)

试试这个:

lists = [4,3,2]

total = 0

for data in lists:

  for c in range(data):

    n = c+1

    total += n

print total

答案 1 :(得分:0)

我不会给你一个答案,但我会告诉你一个过程,可以帮助你打破这个问题(以及你以后会遇到的其他人)。

看看你的目标:

您希望能够传入一个整数列表,例如[4,2,3],并将从1开始的总和结果返回到列表的每个整数。

尝试将其分解为尽可能多的部分:

如何将整数列表传递给函数? 如何对列表的每个元素执行某些操作? 只给出一个整数n(列表的一个元素),如何计算所有数字1 + 2 + ... + n的总和? 我该如何退回这个号码?

我觉得这个任务最重要的部分是,给定一个整数,计算所有数字的总和。幸运的是,存在一个数学表达式。给定数字n,小于或等于n的所有自然数之和为(n)(n+1) / 2。如果您以前没有看过这个公式,请尝试几次。 (1)(1+1) / 2 = 2 / 2 = 12(2+1)/2 = 6/2 = 3(3)(3+1) / 2 = 12/2 = 6。效果很好。

我关注的下一部分是如何为列表中的每个元素执行此操作。我们迭代列表中每个元素的循环怎么样?这可以通过以下方式完成:

for i in your_list:
    ... #Enter code you want to happen for every element here

如果您不熟悉这些循环的工作方式,则会对列表的每个元素重复循环,i(或者您想要的任何变量,_真的是常见的一个)成为列表的元素。所以,如果你做了

your_list = [5,4,3,6]
for i in your_list:
    print(i)

输出将是

5
4
3
6

让我们尝试使用上一步的加法公式。

your_list = [4,2,3]
for i in your_list:
    natural_sum = (i)*(i+1)/2
    print(natural_sum)

输出:

10
3
6

所以现在我们正在获取我们的附加数字,但我们不想打印它们,我们想要将它们全部添加。这是返回值步骤的一部分。我们想要归还全部金额。我们将此tot_sum称为total_sum。首先我们将其初始化为零,然后在循环中我们将natural_sum添加到total_sum中。

tot_sum = 0
your_list = [4,2,3]
for i in your_list:
    natural_sum = (i)*(i+1)/2
    tot_sum += natural_sum
return tot_sum

然而,返回tot_sum并没有多大意义,因为我们不在函数中。这是我们发现的第一件事的一部分:我们如何传递函数?好吧,像这样:

def your_sum(your_list):
    tot_sum = 0

    for i in your_list:
        natural_sum = (i)*(i+1)/2
        tot_sum += natural_sum
    return tot_sum

 #Then call it
 print(your_sum([4,2,3]))