用Python写个「倒计时」软件

先抛上公众号二维码再入正题
公众号二维码.jpg

学编程路上遇到一个问题,在电脑前坐着坐着坐久了就忘了时间了。。。
忘了吃饭。。。
忘了去厕所。。。
忘了游戏里收割。。。
忘了做饭时候开着火定时5分钟。。。
忘了说好的10分钟后出门。。。。

可能,你也有以上这困惑?so,一起用python写个倒计时软件吧!
孔子说把问题放在face前,就不是问题了。「文末有视频演示」

可能你说:干嘛不用手机上闹铃??
我想说:拿手机就走神、分心,而且电脑键盘敲数字不比手机切换APP快得多??

01-设想

想的清楚就会做得明白,这个小程序脚本我设想需要以下几方面功能:

  • 倒计时结束需要有声音提示—听觉上刺激我
  • 可以看到倒计时的时间显示—视觉上提醒我
  • 可以输入简单几分钟的—应对几分钟小任务
  • 也可以输入跨天的—应对跨天的大任务(电脑不关机的话)

02-整结构和素材

首先在pycharm里新建一个工程,然后在这个工程下新建一个py文件并找到一个提示音文件, 如下方截图。
image.png
这个声音素材哪里找呢?
这需要万能的百度,我是在这个网站找到的:点我前往
随便找到一个让你紧张刺激的就行咱这是定制嘛~
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

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