功能运行方式太慢

时间:2013-08-23 02:25:00

标签: python

我正在使用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)

4 个答案:

答案 0 :(得分:6)

因为只要counter达到15,你的循环就会变成无限continue - 它总会碰到第二个if语句的情况。

您需要在继续之前移动counter = counter + 1行,或者更好地使用for counter in range(1,n)之类的内容。

答案 1 :(得分:2)

如果counter等于15,请考虑这种情况,并查看counter%5==0counter%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.