我正在使用Project Euler练习Python,问题1,但我写的解决它的函数花了太长时间。
我认为这是因为我编码的方式不是实际的方法本身
当我用10或15次迭代运行这个函数时,它立即吐出一个答案,但是一旦我将它跳到20,它就不会显示任何东西甚至几分钟。
如果我需要进行1000次迭代,这显然是一个大问题。
def pe1(n):
counter = 1
total = 0
while counter < n:
if counter%3==0:
total=total+counter
if counter%5==0:
if counter%3==0:
continue
total=total+counter
if counter % 25 == 0:
print (total)
counter=counter+1
return (total)
答案 0 :(得分:6)
因为只要counter
达到15,你的循环就会变成无限continue
- 它总会碰到第二个if
语句的情况。
您需要在继续之前移动counter = counter + 1
行,或者更好地使用for counter in range(1,n)
之类的内容。
答案 1 :(得分:2)
如果counter
等于15,请考虑这种情况,并查看counter%5==0
和counter%3==0
会发生什么,这将在那时首次发生。
还要考虑counter
的值不会发生什么,具体而言,行counter=counter+1
将不会被执行。
答案 2 :(得分:1)
为避免像这样的陷阱,请考虑使用
if ...
elif ...
elif ...
else ...
答案 3 :(得分:0)
您可以使用表驱动。像这样。
counter_map = {3:fun1, 5:func2, 25:fun3} # key is remainder.Of course,fun can be replaced with lambda.