python 超级秒表
設要記錄在沒有自動化的枯燥任務上花了多少時間。你沒有物理秒表,要為筆記本或智能手機找到一個免費的秒表應用,沒有廣告,且不會將你的瀏覽歷史發送給市場營銷人員,又出乎意料地困難(在你同意的許可協議中,它說它可以這樣做。你確實閱讀了許可協議,不是嗎?)。你可以自己用 Python 寫一個簡單的秒表程序
總的來說,你的程序需要完成:
- 記錄從按下回車鍵開始,每次按鍵的時間,每次按鍵都是一個新的“單圈”。
- 打印圈數、總時間和單圈時間。
這意味著代碼將需要完成以下任務:
- 在程序開始時,通過調用 time.time()得到當前時間,將它保存為一個時間戳。在每個單圈開始時也一樣。
- 記錄圈數,每次用戶按下回車鍵時加 1。
- 用時間戳相減,得到計算流逝的時間。
- 處理 KeyboardInterrupt 異常,這樣用戶可以按 Ctrl-C 退出。
打開一個新的文件編輯器窗口,并保存為 stopwatch.py。
設置程序來記錄時間
秒表程序需要用到當前時間,所以要導入的 time 模塊。程序在調用 input()之前,也應該向用戶打印一些簡短的說明,這樣計時器可以在用戶按下回車鍵后開始。然后,代碼將開始記錄單圈時間。在文件編輯器中輸入以下代碼, 為其余的代碼編寫TODO 注釋,作為占位符:
既然我們已經編碼顯示了用戶說明,那就開始第一圈,記下時間,并將圈數設為 1。
?
記錄并打印單圈時間
現在,讓我們編碼開始每一個新的單圈,計算前一圈花了多少時間,并計算自啟動秒表后經過的總時間。我們將顯示的單圈時間和總時間,為每個新的單圈增加圈計數。將下面的代碼添加到程序中:
如果用戶按 Ctrl-C 停止秒表, KeyboardInterrupt 異常將拋出,如果程序的執行不是一個 try 語句,就會崩潰。為了防止崩潰,我們將這部分程序包裝在一個 try 語句中?。我們將在 except 子句中處理異常?,所以當 Ctrl-C 按下并引發異常時,程序執行轉向except 子句,打印 Done,而不是 KeyboardInterrupt 錯誤消息。在此之前,執行處于一個無限循環中,調用 input()并等待,直到用戶按下回車鍵結束一圈。當一圈結束時,我們用當前時間 time.time()減去該圈開始的時間 lastTime,計算該圈花了多少時間。我們用當前時間減去秒表最開始啟動的時間 startTime,計算總共流逝的時間。由于這些時間計算的結果在小數點后有許多位(如 4.766272783279419),所以我們用 round()函數,將浮點值四舍五入到小數點后兩位。我們打印出圈數,消耗的總時間和單圈時間。由于用戶為 input()調用按下回車時,會在屏幕上打印一個換行,所以我們向 print()函數傳入 end='',避免輸出重復空行。打印單圈信息后,我們將計數器 lapNum 加 1,將 lastTime 設置為當前時間(這就是下一圈的開始時間),從而為下一圈做好準備。
?
類似程序的想法
時間追蹤為程序打開了幾種可能性。雖然可以下載應用程序來做其中一些事情,但自己編程的好處是它們是免費的,而且不會充斥著廣告和無用的功能。可以編寫類似的程序來完成以下任務:
- 創建一個簡單的工時表應用程序,當輸入一個人的名字時,用當前的時間記錄下他們進入或離開的時間。
- 為你的程序添加一個功能,顯示自一項處理開始以來的時間,諸如利用 requests模塊進行的下載。
- 間歇性地檢查程序已經運行了多久,并為用戶提供了一個機會,取消耗時太長的任務。
?
完整代碼
#! python3 # stopwatch.py - A simple stopwatch program.import time# Display the program's instructions. print('Press ENTER to begin. Afterwards, press ENTER to "click" the stopwatch. \ Press Ctrl-C to quit.') input() # press Enter to begin print('Started.') startTime = time.time() # get the first lap's start time lastTime = startTime lapNum = 1 # Start tracking the lap times. try:while True:input()lapTime = round(time.time() - lastTime, 2)totalTime = round(time.time() - startTime, 2)print('Lap #%s: %s (%s)' % (lapNum, totalTime, lapTime), end='')lapNum += 1lastTime = time.time() # reset the last lap time except KeyboardInterrupt:# Handle the Ctrl-C exception to keep its error message from displaying.print('\nDone.')?
總結
以上是生活随笔為你收集整理的python 超级秒表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SY7065A 内置5A MOS大电流同
- 下一篇: STM32系列(HAL库)——F103C