为什么在这两种情况下时间函数的工作方式不同?

问题描述 投票:0回答:1

我正在解决Euler项目的问题14,我编写了2个程序,一个程序经过优化,而另一个则没有。我什至导入了时间模块来计算所用的时间,但是它不能正常工作。在未优化的代码中可以正常工作:

import time
start = time.time()
def collatz(n):
    chain=1
    while(n>1):
        chain+=1
        if(n%2==0):
            n/=2
        else:
            n = 3*n+1
    return chain

maxChain = 0
num=0
counter = 10**6

while(counter>13):
    coll = collatz(counter)
    if(coll > maxChain):
        maxChain = coll
        num = counter
    counter-=1
end = time.time()
print("Time taken:",end-start)
print(start+', '+ end)

输出为:

Time taken: 47.83728861808777
1591290440.8452923, 1591290488.682581

但是在我的其他代码中:

import time
start = time.time()

dict = {n:0 for n in range(1,10**6)}
dict[1], dict[2] = 1,2

for i in range(3,10**6):
    counter = 0
    start = i

    while(i > 1):
        #Have we already encountered this sequence?
        if(i < start):
            dict[start] = counter + dict[i]
            break

        if(i%2==0):
            i/=2
        else:
            i = 3*i+1
        counter += 1


end = time.time()
print('Time taken:',end-start)
print(start+', '+end)

输出为:

Time taken: 1590290651.4527032
999999, 1591290650.4527032

The start time in the second program is 999999 while the end time is fine. this problem doesn't occur in the first program, I don't know why this is happening?

python time
1个回答
2
投票

翻译自评论:

您可以在第二版代码中看到阴影/重复使用变量start,并将其用作计数器。因此,输出中的999999和奇怪的结果。

将其重命名为其他名称将立即解决您的问题=)

© www.soinside.com 2019 - 2024. All rights reserved.