之前的python创作:用Python写个翻译软件 | 用Python写个理财计算器 |
学编程路上遇到一个问题,在电脑前坐着坐着坐久了就忘了时间了。。。 忘了吃饭。。。 忘了去厕所。。。 忘了游戏里收割。。。 忘了做饭时候开着火定时5分钟。。。 忘了说好的10分钟后出门。。。。 可能,你也有以上这困惑?so,一起用python写个倒计时软件吧!孔子说把问题放在face前,就不是问题了。 「文末有视频演示」01-设想 想的清楚就会做得明白,这个小程序脚本我设想需要以下几方面功能:
倒计时结束需要有声音提示—听觉上刺激我
可以看到倒计时的时间显示—视觉上提醒我
可以输入简单几分钟的—应对几分钟小任务
也可以输入跨天的—应对跨天的大任务(电脑不关机的话)
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()
可以做但我没做的
目前来说这个我天天用,做个饭、烧个水、桌子趴会、灵活的提示等足以。
我的本意就是,设定一个时间后,到点提醒我,现在它满足了。
并且在终端中运行,可以开好几个窗口一块多进程运行。
如果说可以升级迭代的,以下内容可能可以拓展:
加UI面板页面,让人看着更专业一些
打包,方便别人使用
做到Web页面,浏览器里css给渲染更好看点
最后,录个操作过程如下短视频:
招人了
秀儿
come on !
第一时间加入本公众号交流群, 共同交流Python 数据分析 SQL Hive Web爬虫等等内容 .
添加vx: rovesoul 邀请你的来到!
历史文章:MySQL查询
MySQL 操作之「增改删」
用Python写个理财计算器
新型冠状肺炎疫情数据爬虫
通俗易懂:基金、指数基金、定投
——The End——
欢迎留言、转发、关注SUMER、点击 [ 在看 ] 一条龙~