我正在尝试编写一个名为sum_square_differencen 的函数,并返回前n个自然数的平方和与它们的和的平方之间的差值.
我想我知道如何编写一个定义平方和的函数
def sum_of_squares(numbers):
total = 0
for num in numbers:
total += (num ** 2)
return(total)
Run Code Online (Sandbox Code Playgroud)
我试图实现一个sums函数的平方:
def square_sum(numbers):
total = 0
for each in range:
total = total + each
return total**2
Run Code Online (Sandbox Code Playgroud)
我不知道如何结合功能来区分,我不知道我的功能是否正确.
有什么建议吗?我使用的是Python 3.3
谢谢.
Vol*_*ity 10
该函数可以使用纯数学编写,如下所示:

翻译成Python:
def square_sum_difference(n):
return int((3*n**2 + 2*n) * (1 - n**2) / 12)
Run Code Online (Sandbox Code Playgroud)
该公式是两个其他公式的简化:
def square_sum_difference(n):
return int(n*(n+1)*(2*n+1)/6 - (n*(n+1)/2)**2)
Run Code Online (Sandbox Code Playgroud)
n*(n+1)*(2*n+1)/6是这里描述的公式,它返回第一个n自然数的平方和.
(n*(n+1)/2))**2使用三角形数公式,它是第一个n自然数的总和,然后是平方.
这也可以通过内置sum功能完成.这里是:
def sum_square_difference(n):
r = range(1, n+1) # first n natural numbers
return sum(i**2 for i in r) - sum(r)**2
Run Code Online (Sandbox Code Playgroud)
所述range(1, n+1)产生的第一个迭代n的自然数.
>>> list(range(1, 4+1))
[1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
sum(i**2 for i in r)返回r中数字的平方和,并sum(r)**2返回r中数字总和的平方.
#正如beta所说,
#(sum(i))^ 2-(sum(i ^ 2))很容易计算:)
#A = sum(i)= i *(i + 1)/ 2
#B = sum(i ^ 2)= i *(i + 1)*(2 * i +1)/ 6
#A ^ 2-B = i(i + 1)(3(i ^ 2)-i-2)/ 12
#:)
#没有循环...只是一个公式!**