2013-04-27 197 views
0

我想寫一個函數boom(h,m,s),從主輸入開始打印HH:MM:SS格式化倒計時時鐘,然後打印「繁榮」。
我不能使用現有模塊除了time.sleep(),所以我要立足於雖然\ For循環。python中的時鐘倒數計算

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參數I輸入零,它與時鐘搞亂。

回答

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!" 
+0

,是不是在他的代碼的問題! – pradyunsg 2013-04-27 06:56:07

+0

我改變了它......我沒有讀它所有的方式入手:P – 2013-04-27 06:56:34

+0

很好的建議(+1) – NPE 2013-04-27 06:58:13

1

的問題是在這裏:

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

如果m == 0,並s == 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!! 
+0

當m == 0和s == 0母艦一樣沒有進入循環呢? – 2013-04-27 07:02:49

+0

假設'M == 0',讓你進入while循環,一旦條件單曲> 0'是假,內而結束,但我們仍然在外一段時間,於是我們進入無限循環,在s> 0之後發生的是False。 IF'M == 0',你進入'M' while循環,我們不退出.. :)在情況我不清楚,使用調試器,你就明白 – pradyunsg 2013-04-27 07:06:26

+0

啊咄(CAMT相信我沒有通知那):) +1 ...特別是因爲不像我,你沒有爲他做功課 – 2013-04-27 07:07:30