0

我想编写一个函数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 参数上输入零时,它会弄乱时钟。

4

2 回答 2

1

问题在这里:

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

如果m == 0, 并且s == 0 while 循环没有中断,所以有一个无限循环。
只需将 else 子句添加到 (last and) inner-most while,如下所示:

while s>0:
    ...
else: # executed once the above condition is False.
    print ('BooM!!')
    return # no need to break out of all the whiles!!
于 2013-04-27T06:55:30.327 回答
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!"
于 2013-04-27T06:45:57.990 回答