Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 所有数字之和_Python - Fatal编程技术网

Python 所有数字之和

Python 所有数字之和,python,Python,我需要写一个函数来计算所有数字n的和 Row 1: 1 Row 2: 2 3 Row 3: 4 5 6 Row 4: 7 8 9 10 Row 5: 11 12 13 14 15 Row 6: 16 17 18 19 20 21 这有助于将上面的行想象成一个“数字三角形”。函数应该取一个数字n,它表示要使用多少个数字以及哪一行。第五排的总数是65。如何让我的函数对任何n值进行计算 为了清楚起见,这不是家庭作业。

我需要写一个函数来计算所有数字n的和

Row 1:          1 
Row 2:         2 3 
Row 3:        4 5 6 
Row 4:       7 8 9 10 
Row 5:     11 12 13 14 15 
Row 6:   16 17 18 19 20 21 
这有助于将上面的行想象成一个“数字三角形”。函数应该取一个数字n,它表示要使用多少个数字以及哪一行。第五排的总数是65。如何让我的函数对任何n值进行计算


为了清楚起见,这不是家庭作业。那是最近的期中考试,不用说,我被难住了。

数字1、3、6、10等被称为三角形数字,并且有一个明确的级数。只需计算两个边界三角形数,使用
range()
从两个三角形数中获取相应行中的数字,然后
sum()
它们。

第5列中最左边的数字是
11=(4+3+2+1)+1
,即
sum(range(5))+1
。这通常适用于任何
n

因此:


正如许多人所指出的,你可以用分析的方式将
sum(range(n))
表示为
n*(n-1)//2
,因此这可以通过以下方式更优雅地实现:

def triangle_sum(n):
    start = n*(n-1)//2+1
    return sum(range(start,start+n))
或许

def sum_row(n):
    final = n*(n+1)/2
    return sum((final - i) for i in range(n))
它是如何工作的:

函数要做的第一件事是计算每行的最后一个数字。对于n=5,它返回15。它为什么有效?因为每一行都会将右边的数字按行数递增;首先你有1;那么1+2=3;然后3+3=6;然后6+4=10,ecc。这个小鬼说你只是在计算1+2+3+…+n、 对于一个著名的公式,它等于n(n+1)/2

然后,您可以将数字从final加到final-n+1(一个简单的for循环将起作用,或者可能是像列表理解这样的奇特的东西)
或者将从1到final的所有数字相加,然后将从1到final的数字之和减去-n,就像我在所示公式中所做的那样;您可以通过一些数学运算做得更好这里有一个通用的解决方案:

start=1
n=5
for i in range(n):
    start += len (range(i))
answer=sum(range(start,start+n))
作为一项功能:

def trio(n):
    start=1
    for i in range(n):
            start += len (range(i))
    answer=sum(range(start,start+n))
    return answer

一个使用方程的解决方案,但是要得到这个方程需要一些工作

def sumRow(n):
    return (n**3+n)/2

提示:看到每行最左边数字的规律性了吗?1,2,4,7,11,16,…我想说第二个版本实际上稍微不那么优雅,但效率稍高。我认为不需要“转换为双精度而不是返回到整数”的想法,因为n**3和n总是具有相同的奇偶性,因此它们的和总是相等的。你可以简单地
返回(n**3+n)/2
。@elias我相信你是对的。我不知道为什么我认为我必须先转换成双人。
def trio(n):
    start=1
    for i in range(n):
            start += len (range(i))
    answer=sum(range(start,start+n))
    return answer
def sumRow(n):
    return (n**3+n)/2
def compute(n):
   first = n * (n - 1) / 2 + 1
   last = first + n - 1
   return sum(xrange(first, last + 1))