1. 程式人生 > 實用技巧 >python快速上手-讓繁瑣工作自動化之超級秒錶,解決判斷輸入為回車以及時間相減

python快速上手-讓繁瑣工作自動化之超級秒錶,解決判斷輸入為回車以及時間相減

本文概要:解決了超級秒錶這個題目並對自己在題目中遇到的難點作出了適當分析。主要解決的問題點在於時間相減以及判斷輸入為回車

題目是:

專案:超級秒錶

假設要記錄在沒有自動化的枯燥任務上花了多少時間。你沒有物理秒錶,要為
筆記本或智慧手機找到一個免費的秒錶應用,沒有廣告,且不會將你的瀏覽歷史發
送給市場營銷人員,又出乎意料地困難(在你同意的許可協議中,它說它可以這樣做。
你確實閱讀了許可協議,不是嗎?)。你可以自己用 Python 寫一個簡單的秒錶程式。
總的來說,你的程式需要完成:
 記錄從按下回車鍵開始,每次按鍵的時間,每次按鍵都是一個新的“單圈”。
 列印圈數、總時間和單圈時間。

這意味著程式碼將需要完成以下任務:
 在程式開始時,通過呼叫 time.time()得到當前時間,將它儲存為一個時間戳。
在每個單圈開始時也一樣。
 記錄圈數,每次使用者按下回車鍵時加 1。
 用時間戳相減,得到計算流逝的時間。
 處理 KeyboardInterrupt 異常,這樣使用者可以按 Ctrl-C 退出。
開啟一個新的檔案編輯器視窗,並儲存為 stopwatch.py。

執行結果如下:

解決程式碼:

# 超級秒錶
import time
import sys
import logging
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s-%(levelname)s-%(message)s") # 這個是對logging日誌模組的設定,如果你不設,你打印不出來東西


def super_clock():
time_interval = [] # 這個作為最終結果列表,比如第一次他儲存了幾點幾秒
time_list = [] # 這個是普通列表,來儲存time.time()的值

while True:
try:
key_value = input(">>") # 這個>>就很細節,讓你輸入覺得很舒服
if key_value != "": # 這個啊,讓我想了好久。我一直在查到底什麼字元算是回車,結果百度沒有一個讓我覺得還過得去的答案。最後我想通了,既然程式將你的回車判斷為一次輸出的結束,那麼很顯然你下次字元判斷為空字串就行了,這就意味著你輸入的是回車
logging.debug(key_value)
logging.debug("you got continue")
continue
except KeyboardInterrupt: # 這個去捕獲下ctrl+c異常
print("ctrl + c happend")
logging.debug(time_list)
logging.debug(len(time_list) - 1)

# 這個是把普通列表中的值一一相減,然後得到最終結果列表的值,直接告訴使用者,第一次幾秒,第二次幾秒
for i in range(len(time_list) - 1):
logging.debug("i = " + str(i))
value = (float(time_list[i + 1]) - float(time_list[i])) # 這個我也想了挺久了。。。可能是我菜吧。你只需要知道time_list[i]是string型別的,那麼你就用float轉換為浮點型的就好了
logging.debug("time - == " + str(value))
time_interval.append(value) # 這裡直接就是將結果儲存到結果列表

logging.debug("time_interval = " + str(time_interval))

for i in range(len(time_interval)): # 最後列印
print("第", str(i + 1), "次計時為", time_interval[i])
sys.exit()
else: # 在try catch語句塊中,這個else代表的是try成功執行就執行這個else的內容。這裡的話,就是利用time.time()來捕捉到你摁回車的時間,並存儲到普通列表去
logging.debug(29)
logging.debug(str(time.time()))
time_list.append(str(time.time()))
logging.debug(32)


super_clock()


補充:後來我還查了下關於時間控制的其他方法:
比如
# 測試時間模組
import time
import datetime

# 這個是用到了datetime模組,用的函式比較多,其實也差不多
a = datetime.datetime.now()
print(a)
time.sleep(1)
b = datetime.datetime.now()
c = int(b.timestamp() - a.timestamp())
print(c)

# 這個的話依然是用time.time(),其實兩個time是可以相減的,拿到差值,最後強轉就好了。我之前是一直拿字串去轉,所以沒成功
value1 = time.time()
time.sleep(1)
value2 = time.time()
value3 = value2 - value1
print("value3 = " + str(int(value3)))
本文總結:時間相減其實很簡單,目的就是拿到差值,你可以讓相同型別的相減(比如time型別的)然後用str()或者float()函式去強轉;你也可以使用datetime模組的那兩個方法去轉;最後本文對“如何判斷輸入為空格”這個問題提出了臉滾鍵盤式的解決方案

最後讓我囉嗦一句,別動不動就轉發別人的部落格,轉發了也不是你的東西。我以前看見值得學的東西就收藏想著以後看,搞到最後就是啥都沒看,最後全部推翻刪掉。
還有就是,我下午查資料的時候,問一個問題,回答前三的明明都是同樣的答案,這也能佔前三???配嗎?自己不去證實,把別人答案抄過來在另外一個平臺上釋出就把自己訪問量刷上去了,真的很噁心。