python中的时钟倒计时计算

时间:2013-04-27 06:42:17

标签: python loops counter clock

我想编写一个名为boom(h,m,s)的函数,在从main开始输入后,以 HH:MM:SS 格式打印倒计时时钟,然后打印“boom”。
我不允许使用除time.sleep()之外的现有模块,所以我必须基于While \ For循环。

import time

def boom(h,m,s):
    while h>0:
        while m>0:
            while s>0:
                print ("%d:%d:%d"%(h,m,s))
                time.sleep(1)
                s-=1
            print ("%d:%d:%d"%(h,m,s))
            time.sleep(1)
            s=59
            m-=1
        print ("%d:%d:%d"%(h,m,s))
        time.sleep(1)
        s=59
        m=59
        h-=1
    while h==0:
        while m==0:
            while s>0:
                print ("%d:%d:%d"%(h,m,s))
                time.sleep(1)
                s-=1
    print ("BooM!!")

我想到了如何计算秒部分,但是当我在H和M参数上输入零时,它正在弄乱时钟。

2 个答案:

答案 0 :(得分:1)

问题在于:

while h==0:
    while m==0:
        while s>0:

如果m == 0s == 0 while循环没有中断,那么就会出现无限循环。
只需在(最后和最)最内容while中添加一个else子句,如下所示:

while s>0:
    ...
else: # executed once the above condition is False.
    print ('BooM!!')
    return # no need to break out of all the whiles!!

答案 1 :(得分:0)

将它全部转换为秒并在打印时将其转换回来...

def hmsToSecs(h,m,s):
    return h*3600 + m*60 + s

def secsToHms(secs):
    hours = secs//3600
    secs -= hours*3600
    mins = secs//60
    secs -= mins*60
    return hours,mins,secs

def countdown(h,m,s):
    seconds = hmsToSecs(h,m,s)
    while seconds > 0:
         print "%02d:%02d:%02d"%secsToHms(seconds)
         seconds -= 1
         sleep(1)
    print "Done!"