2014-09-19 22 views
-1

我一直在尋找這一段時間,並且一直在探索它的工作原理。 我知道它的第一部分,但是當我到櫃檯我被卡住在這個倒數計時器是如何工作的?

hr, sc = divmod(counter, 3600) 
    mn, sc = divmod(sc, 60) 

我看着divmod(),但我仍然困惑就其實際作用。爲什麼sc在這裏沒有定義的時候在這裏工作?

總結:

1:什麼是divemod() 2:什麼是上面的代碼做在下面的倒計時器,它是如何做到的呢?

hours= int(input("Hours: ")) 
minutes= int(input("Minutes: ")) 
sec= int(input("Seconds: ")) 

counter=hours*3600+minutes*60+sec 
mins=int(counter/60) 
hr=int(mins/60) 

while counter > 0: 
    counter-=1 
    hr, sc = divmod(counter, 3600) 
    mn, sc = divmod(sc, 60) 
    print ('%d hours, %d minutes and %d seconds' % (hr, mn, sc)) 
    mins=int(counter/60) 
    hr=int(mins/60) 
    time.sleep(1) 

謝謝!

+0

提示:'divmod'對兩個數字執行除法,並返回商和餘數。 – Kevin 2014-09-19 19:29:13

+1

你是什麼意思?爲什麼sc在這裏沒有定義的時候在這裏工作?'?在'hr,sc = divmod(counter,3600)''行中定義'sc'。該行定義了兩個變量。這是否使它更有意義? – 2014-09-19 19:29:44

+0

它只是在左側有兩個變量的語法?這些只與等號右邊的兩個匹配。 – 2014-09-19 19:29:53

回答

2

Divmod是一個函數,它執行除法並返回兩個值,整數商和餘數。它在技術上返回一個兩個數字元組,並將其解壓縮爲兩個變量。

例如,divmod(10, 3)返回(3, 1),其中3是10/3和1的結果爲10 % 3(10 MOD 3)的結果。

說出a, b = divmod(10, 3)相當於a, b = (3, 1),它分配3到a和1到b

在定時器的情況下,這是以秒爲單位的數值,並且打出與小時數和分鐘數相對應的秒數。每3600秒是一小時,每60秒(在減去小時後)是幾分鐘。

因此,當定時器的剩餘秒數爲10,000時,第一個divmod表示「這實際上是2小時2800秒」,而第二個divmod是2800表示的,「這實際上是46分鐘和40秒「。放在一起,這兩行說「10,000秒實際上是2小時46分40秒」。


除了如圖1所示,在執行這些計算的代碼利用非零時間,所以這個倒計時定時器實際上將慢於期望的,因爲它需要略微大於第二更向下計數每個第二(它睡覺用於第二然後執行一些計算)。


除了2,你寫的代碼可以歸納爲以下:

hours = int(input("Hours: ")) 
minutes = int(input("Minutes: ")) 
seconds = int(input("Seconds: ")) 

counter = hours*3600 + minutes*60 + seconds 

while counter > 0: 
    counter -= 1 
    hours, seconds = divmod(counter, 3600) 
    minutes, seconds = divmod(seconds, 60) 
    print('%d hours, %d minutes and %d seconds' % (hours, minutes, seconds)) 
    time.sleep(1) 

除了3,提防輸入功能。如果用戶輸入一個表達式而不是一個數字,它將由python解釋器進行評估。請參閱Is it ever useful to use Python's input over raw_input?

您已經將輸入結果轉換爲整數。使用raw_input INSTEAD input !!!!! (除非這是python3,在這種情況下raw_input已被重命名爲input)。對於python2,請執行以下操作:

hours = int(raw_input("Hours: ")) 
minutes = int(raw_input("Minutes: ")) 
seconds = int(raw_input("Seconds: ")) 
+0

謝謝你的深刻解答。它精美地解釋了一切。 另外,所以你說這個計時器會關閉一秒?如果是這樣,你有一個更好的計時器的想法,打印出來類似? 例如:1小時20分30秒 – user3763447 2014-09-19 19:41:48

+0

@ user3763447這並不是說它會關閉一秒鐘。這就需要1.0005秒鐘的時間來倒計時(儘管這個數字可能會根據您運行的系統和運行的內容而有很大不同)。 – Zags 2014-09-19 19:46:10

+0

@ user3763447要創建一個精確的計時器,您需要在程序的開頭存儲'timer_start = datetime.datetime.now()',並使用當前時間與'timer_start'之間的差值而不是'counter'。另外,'timeit'庫有'datetime'以外的選項。 – Zags 2014-09-19 19:48:05