简单版-不加字体效果
出发点是想在工作的时候在电脑上放一个倒计时提醒一下自己,按照一般常规思路我去搜索下载一个倒计时的客户端。
搜到一个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)
可以愉快又专心地进行工作了呢😘