簡單版-不加字體效果
出發點是想在工作的時候在電腦上放一個倒計時提醒一下自己,按照一般常規思路我去搜索下載一個倒計時的客戶端。
搜到一個2M的(好小)的軟件,我突然意識到,我可是一個成熟的程序員了(手動滑稽),我爲啥不自己實現想要的小工具?
計時器而已,邏輯不難,關鍵在於有頭有尾的實現,還要有提示功能。
爲此我複習了怎麼在同一行輸出倒計時的 分鐘:秒數,還學到了python怎麼調用windows系統的蜂鳴報警器。
代碼實現如下:
#-*- coding:utf-8 –*-
import time
import winsound
if __name__ == '__main__':
minutes, seconds = 30, 10
while minutes*seconds >= 0:
print('\r倒計時: %d:%d' %(minutes,seconds), end='')
time.sleep(1)
if seconds == 0:
minutes -= 1
seconds = 59
else:
seconds -= 1
print('\n時間到,請交卷!!!')
winsound.Beep(60, 6000)
代碼邏輯比較簡單,當然也可以直接用總秒數遞減,然後輸出結果時再換算小時、分鐘和秒數,可能更加靈活。
在使用蜂鳴報警器時遇到一個問題,當我把第一個參數設置爲30(頻率)的時候,程序運行報錯
winsound.Beep(30, 6000)
ValueError: frequency must be in 37 thru 32767
我搜了一下,有說法稱
考慮到37到32767頻率之外的聲音超出人耳能感受到的範圍,故作此規定。
挺有道理的,可以參考一下。
複雜版-終端顯示加上高亮提醒
按照一般說法是這樣改
將
print('\r倒計時: %d:%d' %(minutes,seconds), end='')
改爲
print('\r\033[1;32;40m倒計時: %d:%d\033[0m' %(minutes,seconds), end='')
其中\033是轉義序列ESC的ASCII碼,1表示高亮顯示,32是綠色,40m是背景色黑色,注意結尾加 \033[0m 是爲了讓超出文字的部分不要加奇奇怪怪的背景色。pycharm運行效果如下:
看起來很正常,可是搬到終端運行。。
。
what?爲啥不識別轉義字符
解決方法,加一個包
from colorama import init
init(autoreset=True)
終端顯示的效果:
結束,可以正常使用了。
等等,好像還少了一點什麼?我難道每次設置倒計時的時間都得進程序改參數嗎?用戶體驗在哪裏?
說改就改
進階版-用戶體驗
加提示,加左補零,加異常提示,同時出現異常程序也不會斷掉,用戶可以繼續輸入。
異常情況:
最終代碼如下:
#-*- coding:utf-8 –*-
import time
import winsound
from colorama import init
if __name__ == '__main__':
print('\t倒計時小程序上線!!')
while True:
try:
minutes = int(input('\t請輸入時分數:'))
seconds = int(input('\t請輸入時秒數:'))
except:
print('\t請輸入正確的數字!!')
continue
init(autoreset=True)
while (minutes*seconds) >= 0:
print('\r\033[1;32;40m\t倒計時: %02d:%02d\033[0m' %(minutes,seconds), end='')
time.sleep(1)
if seconds == 0:
minutes -= 1
seconds = 59
else:
seconds -= 1
print('\n\t時間到,請交卷!!!')
winsound.Beep(60, 6000)
可以愉快又專心地進行工作了呢😘