自制python計時器

簡單版-不加字體效果

出發點是想在工作的時候在電腦上放一個倒計時提醒一下自己,按照一般常規思路我去搜索下載一個倒計時的客戶端。

搜到一個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)

可以愉快又專心地進行工作了呢😘 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章