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:

Ifm == 0s == 0 while ループが壊れないので、無限ループになります。
次のように、else 句を (最後で) 最も内側の に追加するだけです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 に答える