用Python写个「倒计时」软件
先抛上公众号二维码再入正题
公众号二维码.jpg
学编程路上遇到一个问题,在电脑前坐着坐着坐久了就忘了时间了。。。
忘了吃饭。。。
忘了去厕所。。。
忘了游戏里收割。。。
忘了做饭时候开着火定时5分钟。。。
忘了说好的10分钟后出门。。。。
可能,你也有以上这困惑?so,一起用python写个倒计时软件吧!
孔子说把问题放在face前,就不是问题了。「文末有视频演示」
可能你说:干嘛不用手机上闹铃??
我想说:拿手机就走神、分心,而且电脑键盘敲数字不比手机切换APP快得多??
01-设想
想的清楚就会做得明白,这个小程序脚本我设想需要以下几方面功能:
- 倒计时结束需要有声音提示—听觉上刺激我
- 可以看到倒计时的时间显示—视觉上提醒我
- 可以输入简单几分钟的—应对几分钟小任务
- 也可以输入跨天的—应对跨天的大任务(电脑不关机的话)
02-整结构和素材
首先在pycharm里新建一个工程,然后在这个工程下新建一个py文件并找到一个提示音文件, 如下方截图。
这个声音素材哪里找呢?
这需要万能的百度,我是在这个网站找到的:点我前往
随便找到一个让你紧张刺激的就行咱这是定制嘛~
image.png
03-Coding
创建好上方的结构,那么就完成90%工作内容了,剩下的就交给键盘打字了
用到的包
掉包侠需要用到的包如下:倒计时嘛,怎么少得了time和datetime;os是清屏用的,pygame是播放音乐用的。
import time,os
from pygame import mixer
import datetime
解决播放音频文件问题
用pygame模块的音乐功能来放音乐,别的播放音乐的包也有不少,比如mutagen
但pygame我不用搜索就知道怎么用了,所以写一个放音频的函数
默认传入个文件名后,设置从头播放,满音量播放(这个视你用的音频文件音量大小去调节)
def playMusic(filename, loops=0, start=0.0, value=1):
"""
:param filename: 文件名
:param loops: 循环次数
:param start: 从多少秒开始播放
:param value: 设置播放的音量,音量value的范围为0.0到1.0
"""
mixer.init()
mixer.music.load(filename)
mixer.music.play(loops=loops, start=start)
mixer.music.set_volume(value) # 来设置播放的音量,音量value的范围为0.0到1.0。
解决打印秒数问题
我的需求里有一个是:能看到还剩多少秒就结束倒计时了,因此需要做一个打印时间的方法,这个方法如下:
默认了日期、小时、分钟、秒都是0,这样传哪个参数就用哪个参数参与seconds 那行的公式计算,为0的自然乘积还是0
timess这行指的是:如果我输入33分钟,我要看到33分钟后是几点,所以用datetime的方法给算一下。
for循环:因为我要看到秒数一点一点减少,所以这个循环就能实现这个功能。哪个time.sleep()一定给1哈,不然你的时间感跟别人不一样。。
def daojishi(day=0, hour=0, min=0.0, second=0):
print(f'总时间{day}day; {hour}H; {min}min')
seconds = int(day * 24 * 3600 + hour * 3600 + min * 60 + second)
timess = (datetime.datetime.now() + datetime.timedelta(days=day, hours=hour, minutes=min)).strftime("%Y/%m/%d %H:%M:%S")
print(f'目标时间:{timess}')
for i in reversed(range(0, seconds)):
print("\r倒计时:{}秒".format(i), end="")
time.sleep(1)
playMusic('BeepStop.WAV')
time.sleep(0.2)
解决输入时间问题
我的需求还有一句,可以在一天内算,也可以在多天跨天的算,因此有了以下这两个方法
在in one day方法里,直接输入倒计时分钟数,看里边有个float转换,因此想输入4分30秒的话,直接输入4.5即可;
如果输入q则退出这个计时;
为了防止误触、或者输入了不该输入的,封装个try/except;
在in some day方法里,可以输入天数、小时数,分钟数。比如1天1小时1分钟,比如8小时后那就输入0天8小时0分钟。。。
# 一天的
def in_one_day():
os.system('clear')
while 1:
try:
os.system('clear')
get_time = input('请输入倒计时时间(单位:分)')
if get_time == 'q':
break
else:
os.system('clear')
daojishi(min=float(get_time))
except Exception as e:
print('输入错误,请输入倒计时分钟')
time.sleep(1)
#多天的
def in_some_day():
os.system('clear')
while 1:
try:
os.system('clear')
print('请输入天--时--分')
get_time_day = input('请输入倒计时天(单位:天)')
get_time_hour = input('请输入倒计时(单位:小时)')
get_time_min = input('请输入倒计时分(单位:分钟)')
if get_time_day == 'q' or get_time_hour == 'q' or get_time_min == 'q':
break
os.system('clear')
daojishi(day=int(get_time_day), hour=int(get_time_hour), min=int(get_time_min))
except Exception as e:
print('输入错误,请输入倒计时分钟')
time.sleep(1)
解决启动端口
上边的所有已经解决了99.999%的内容,还差那么一丁点就是启动他们,因此再做一个启动入口:
这个if name....这句有点多余,但我看别人都这么写的,,我就加上吧,谁知道为嘛这么写,请留言!
启动后先判定计算1天内的,还是计算跨天的,1或2选择,q键加回车退出
判定后启动上边的输入时间函数~一切就那么顺滑。
def qidong():
while 1:
os.system('clear')
cut = input('1为1天内计时, 2为多天计时, q退出\n\n请选择:')
try:
if cut == 'q':
break
elif int(cut) == 1:
in_one_day()
elif int(cut) == 2:
in_some_day()
else:
print('you!输入错误')
time.sleep(1)
except Exception as e:
os.system('clear')
print('you!输入错误')
time.sleep(1)
if __name__ == '__main__':
qidong()
最后,录个操作过程如下短视频:
前往观看
第一时间加入我弄得交流群, 共同交流Python 数据分析 SQL Hive Web爬虫等等内容 .
添加vx: rovesoul 邀请你的来到!
公众号二维码.jpg