我在使用Project Euler#6时遇到了麻烦。问题如下:
找出前100个自然数的平方和与总和的平方之间的差异。
我正在尝试以这样的方式编写我的代码:Euler(所有数字,包括100)中的内容可以替换您喜欢的任何数字(所有数字都包括x)。我决定,为了做到这一点,你需要3个功能。代码是:
#the sumSquare function squares every number from 0 to number called
#in the function and adds each term to a list. the function returns the sum
#of all numbers in this list
def sumSquare(num):
list1 = []
for i in range(num+1):
x = i^2
list1.append(x)
return sum(list1)
#the squareSum function adds every whole number from 0 up to and including
#the number called in the function to list2. It returns the sum squared of #every number in the list
def squareSum(num):
list2 = []
for i in range(1,num+1):
list2.append(i)
return (sum(list2) * sum(list2))
def ans(num):
return squareSum(num) - sumSquare(num)
print ans(100)
我的输出是2549748,但我在网上看到正确的解决方案是25164150.有没有人知道我哪里出错了。我只是在学习编码,所以我可能会遗漏那些经验丰富的人很容易发现的东西。但据我所知,这些清单在汇总之前已经填满了适当的数字。
答案 0 :(得分:2)
这个
i^2
Python中不是正方形。使用i*i
或i**2
作为正方形。
答案 1 :(得分:0)
您的代码是任何语言代码。但是有了sintax的错误。 真正的Python功能是** 如此。
Python风格的代码看起来像那样:
print(sum(range(1, 101))**2 - sum([i**2 for i in range(1, 101)]))
这就是为什么他们喜欢Python(R)
答案 2 :(得分:0)
感谢大家的投入。在思考了一下后,我意识到这段代码过于复杂。我意识到如果所有三个函数都采用相同的变量来解决问题,它可以简化为一个函数,它自己处理每个步骤。提出这个解决方案显然效率更高:
import time
def ans(num):
numSq = []
for i in range(1, num+1):
numSq.append(i**2)
return ((sum(range(1, num+1))**2)-sum(numSq))
start_time = time.time()
print ans(100)
print "This program took {} seconds to execute.".\
format(time.time() - start_time)
运行你得到的程序:
25164150
This program took 0.00800013542175 seconds to execute.
再次感谢我在第一篇文章中的输入!
答案 3 :(得分:0)
def diffSum():
sumSquares = 0
squareSum = 0
sumT = 0
for i in range(1,101):
sumSquares = sumSquares + (i * i)
for i in range(1,101):
sumT = sumT + i
squareSum = sumT * sumT
return squareSum - sumSquares
#sumsquares gets all the summation of the square numbers of the first 100 numbers
#sumT stores the summation of the first 100 numbers
#squareSum squares the summation of the first 100 numbers
#returns the difference between sumSquares and squareSum