自制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)

可以愉快又专心地进行工作了呢😘 

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