用Python写个「倒计时」软件

作者: 董汇标MINUS | 来源:发表于2020-03-13 17:38 被阅读0次

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


    公众号二维码.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

    相关文章

      网友评论

        本文标题:用Python写个「倒计时」软件

        本文链接:https://www.haomeiwen.com/subject/hnyjshtx.html