为了在家安心学习,我决定写一段代码播放上课的铃声。

之前中学时就希望有一个这样的软件,周末就可以高效学习了。

但是网上搜不到相关软件,当时也不会写代码,就用闹钟来代替了。

现在自己写一个试试。

原本我是用C++写的,但后来发现C++太麻烦了。

要用到其他的库,那些库也不好安装,总是有一大堆难以解决的报错,就换Python了。

没想到Python这么方便。

功能一、播放音频

安装playsound库即可运行

from playsound import playsound

playsound('1.wav')

功能二、获取系统时间

import time

def main():

print(time.localtime())

year = time.localtime().tm_year

month = time.localtime().tm_mon

day = time.localtime().tm_mday

hour = time.localtime().tm_hour

minute = time.localtime().tm_min

second = time.localtime().tm_sec

print(year, '年', month, '月', day, '日')

print(hour, '时', minute, '分', second, '秒')

main()

功能三、上课铃声的定时播放

from playsound import playsound

import time

def ring():

playsound('1.wav')

time.sleep(5)

playsound('1.wav')

time.sleep(60)

def timeoff(hour,minute):

if hour == time.localtime().tm_hour and minute == time.localtime().tm_min:

ring()

while 1:

timeoff(8,0)

timeoff(8,45)

timeoff(8,50)

timeoff(9,35)

timeoff(9,50)

timeoff(10,35)

timeoff(10,40)

timeoff(11,25)

timeoff(11,30)

timeoff(12,15)

timeoff(13,30)

timeoff(14,15)

timeoff(14,20)

timeoff(15,20)

timeoff(16,5)

timeoff(16,10)

timeoff(16,55)

timeoff(18,30)

timeoff(19,15)

timeoff(19,20)

timeoff(20,5)

timeoff(20,10)

timeoff(20,55)

注释:

原本连续循环播放一分钟,效果不理想,利用了sleep语句使代码休眠,可以巧妙地解决这个问题

但是仍然存在CPU占用率过高的问题

上课时间表

编译

编译后再使用,就很方便了

优化一 针对CPU占用率过高的优化

原代码用了一个while(1)的循环

每一帧都在刷新比对系统时间,这使得CPU占用率过高

要求精确到分钟,那么现在我们每60秒检查一次时间,就可大大降低CPU占用率

from playsound import playsound

import time

import sys

#上课状态

status=0

def ring():

global status

status=status+1

if status%2==0:

print("当前时间:",time.localtime().tm_hour,"时",time.localtime().tm_min,"分,","状态:下课")

else:

print("当前时间:",time.localtime().tm_hour,"时",time.localtime().tm_min,"分,","状态:上课")

playsound('1.wav')

time.sleep(5)

playsound('1.wav')

def timeoff(hour,minute):

if hour == time.localtime().tm_hour and minute == time.localtime().tm_min:

ring()

def timecheck():

if time.localtime().tm_hour>=8 and time.localtime().tm_hour<=21:

timeoff(8,0)

timeoff(8,45)

timeoff(8,50)

timeoff(9,35)

timeoff(9,50)

timeoff(10,35)

timeoff(10,40)

timeoff(11,25)

timeoff(11,30)

timeoff(12,15)

timeoff(13,30)

timeoff(14,15)

timeoff(14,20)

timeoff(15,20)

timeoff(16,5)

timeoff(16,10)

timeoff(16,55)

timeoff(18,30)

timeoff(19,15)

timeoff(19,20)

timeoff(20,5)

timeoff(20,55)

else:

sys.exit()

while 1:

timecheck()

time.sleep(60)#每60秒检查一次

优化二 改变时间表的数据类型

使用字典、元组存储打铃时间和上下课状态

使代码更符合使用逻辑、运行时的漏洞更少

动态注释版本

了解程序实时的运行过程

from playsound import playsound

import time

def ring():

#一次打铃,重复播放两次,中间间隔5秒

playsound('1.wav')

time.sleep(5)

playsound('1.wav')

def itemcheck(yz,sta):

print("该item的键是:",yz,"(一个元组)")

print("元组小时部分:",yz[0],",分钟部分:",yz[1])

if yz[0] == time.localtime().tm_hour and yz[1] == time.localtime().tm_min:

ring()

if sta==0:

print("当前时间:",time.localtime().tm_hour,"时",time.localtime().tm_min,"分,","状态:下课")

#休眠5分钟

print("休眠5分钟")

time.sleep(240)

else:

print("当前时间:",time.localtime().tm_hour,"时",time.localtime().tm_min,"分,","状态:上课")

#休眠45分钟

print("休眠45分钟")

time.sleep(2640)

def timecheck():

#建立一个字典存放打铃时间和对应的状态

dict1 = {(8,0):1,(8,45):0,(8,50):1,(9,35):0,

(9,50):1,(10,35):0,(10,40):1,(11,25):0,

(11,30):1,(12,15):0,(13,30):1,(14,15):0,

(14,20):1,(15,5):0,(15,20):0,(16,5):0,

(16,10):1,(16,55):0,(18,30):1,(19,15):0,

(19,20):1,(20,5):0,(20,10):1,(20,55):0}

print("打铃时间表:",dict1)

print("正在遍历时间表里的全部item:")

for k in dict1.keys() :

#k是字典的键,dict1[k]是它对应的值

print("这个键是",k ,"它的值是",dict1[k])

itemcheck(k,dict1[k])

while 1:

timecheck()

time.sleep(60)#每60秒检查一次

纯净版本

from playsound import playsound

import time

def ring():

#一次打铃,重复播放两次,中间间隔5秒

playsound('1.wav')

time.sleep(5)

playsound('1.wav')

def itemcheck(yz,sta):

if yz[0] == time.localtime().tm_hour and yz[1] == time.localtime().tm_min:

if sta==0:

print("当前时间:",time.localtime().tm_hour,"时",time.localtime().tm_min,"分,","状态:下课")

else:

print("当前时间:",time.localtime().tm_hour,"时",time.localtime().tm_min,"分,","状态:上课")

ring()

if sta==0:

#休眠5分钟

time.sleep(240)

else:

#休眠45分钟

time.sleep(2640)

def timecheck():

#建立一个字典存放打铃时间和对应的状态

dict1 = {(8,0):1,(8,45):0,(8,50):1,(9,35):0,

(9,50):1,(10,35):0,(10,40):1,(11,25):0,

(11,30):1,(12,15):0,(13,30):1,(14,15):0,

(14,20):1,(15,5):0,(15,20):0,(16,5):0,

(16,10):1,(16,55):0,(18,30):1,(19,15):0,

(19,20):1,(20,5):0,(20,10):1,(20,55):0}

for k in dict1.keys() :

#k是字典的键,dict1[k]是它对应的值

itemcheck(k,dict1[k])

while 1:

timecheck()

time.sleep(30)#每30秒检查一次

优化三、睡眠时间自适应

from playsound import playsound

import time

breakflag=0

def ring():

#一次打铃,重复播放两次,中间间隔5秒

playsound('1.wav')

time.sleep(5)

playsound('1.wav')

def itemcheck(yz,sta):

if yz[0] == time.localtime().tm_hour and yz[1] == time.localtime().tm_min:

if sta==0:

print("当前时间:",time.localtime().tm_hour,"时",time.localtime().tm_min,"分,","状态:下课")

else:

print("当前时间:",time.localtime().tm_hour,"时",time.localtime().tm_min,"分,","状态:上课")

ring()

elif yz[0] > time.localtime().tm_hour or ( yz[0] == time.localtime().tm_hour and yz[1] > time.localtime().tm_min ):

gaptime=(yz[0]-time.localtime().tm_hour-1)*60+yz[1]+(60-time.localtime().tm_min)

print("距离",yz[0],":",yz[1],"的打铃还有",gaptime,"分钟")

global breakflag

breakflag=1

print("休眠",gaptime-1,"分钟")

time.sleep(gaptime*60-60)

def timecheck():

#建立一个字典存放打铃时间和对应的状态

dict1 = {(8,0):1,(8,45):0,(8,50):1,(9,35):0,

(9,50):1,(10,35):0,(10,40):1,(11,25):0,

(11,30):1,(12,15):0,(13,30):1,(14,15):0,

(14,20):1,(15,5):0,(15,20):0,(16,5):0,

(16,10):1,(16,55):0,(18,30):1,(19,15):0,

(19,20):1,(20,5):0,(20,10):1,(20,55):0}

global breakflag

breakflag=0

for k in dict1.keys() :

#k是字典的键,dict1[k]是它对应的值

if breakflag ==0:

itemcheck(k,dict1[k])

else :

break

while 1:

timecheck()

time.sleep(5)#倒计时1分钟时,每5秒检查一次

效果

打开软件时,自适应休眠

倒计时一分钟时,休眠结束,每5秒刷新一次

时间到了,打铃

打铃结束,进入休眠

优化四 加入铃声状态的判断

from playsound import playsound

import time

breakflag=0

def ring():

#一次打铃,重复播放两次,中间间隔5秒

playsound('1.wav')

time.sleep(5)

playsound('1.wav')

def itemcheck(yz,sta):

if yz[0] == time.localtime().tm_hour and yz[1] == time.localtime().tm_min:

if sta==0:

print("当前时间:",time.localtime().tm_hour,"时",time.localtime().tm_min,"分,","状态:下课")

else:

print("当前时间:",time.localtime().tm_hour,"时",time.localtime().tm_min,"分,","状态:上课")

ring()

elif yz[0] > time.localtime().tm_hour or ( yz[0] == time.localtime().tm_hour and yz[1] > time.localtime().tm_min ):

gaptime=(yz[0]-time.localtime().tm_hour-1)*60+yz[1]+(60-time.localtime().tm_min)

if sta==0:

st="下课铃"

else:

st="上课铃"

print("距离",yz[0],":",yz[1],"的",st,"还有",gaptime,"分钟")

global breakflag

breakflag=1

print("休眠",gaptime-1,"分钟")

time.sleep(gaptime*60-60)

def timecheck():

#建立一个字典存放打铃时间和对应的状态

dict1 = {(8,0):1,(8,45):0,(8,50):1,(9,35):0,

(9,50):1,(10,35):0,(10,40):1,(11,25):0,

(11,30):1,(12,15):0,(13,30):1,(14,15):0,

(14,20):1,(15,5):0,(15,20):0,(16,5):0,

(16,10):1,(16,55):0,(18,30):1,(19,15):0,

(19,20):1,(20,5):0,(20,10):1,(20,55):0}

global breakflag

breakflag=0

for k in dict1.keys() :

#k是字典的键,dict1[k]是它对应的值

if breakflag ==0:

itemcheck(k,dict1[k])

else :

break

while 1:

timecheck()

time.sleep(5)#倒计时1分钟时,每5秒检查一次

优化五 加入倒计时功能

from playsound import playsound

import time

breakflag=0

def ring():

#一次打铃,重复播放两次,中间间隔5秒

playsound('1.wav')

time.sleep(5)

playsound('1.wav')

def itemcheck(yz,sta):

if yz[0] == time.localtime().tm_hour and yz[1] == time.localtime().tm_min:

if sta==0:

print("当前时间:",time.localtime().tm_hour,"时",time.localtime().tm_min,"分,","状态:下课")

else:

print("当前时间:",time.localtime().tm_hour,"时",time.localtime().tm_min,"分,","状态:上课")

ring()

elif yz[0] > time.localtime().tm_hour or ( yz[0] == time.localtime().tm_hour and yz[1]>time.localtime().tm_min):

gaptime=(yz[0]-time.localtime().tm_hour-1)*60+yz[1]+(60-time.localtime().tm_min)

if sta==0:

st="下课铃"

else:

st="上课铃"

global breakflag

breakflag=1

if gaptime-1>0 :

print("距离",yz[0],":",yz[1],"的",st,"还有",gaptime,"分钟")

print("(程序休眠",gaptime-1,"分钟)")

time.sleep(gaptime*60-60)

else:

print("倒计时",60-time.localtime().tm_sec,"秒")

def timecheck():

#建立一个字典存放打铃时间和对应的状态

dict1 = {(8,0):1,(8,45):0,(8,50):1,(9,35):0,

(9,50):1,(10,35):0,(10,40):1,(11,25):0,

(11,30):1,(12,15):0,(13,30):1,(14,15):0,

(14,20):1,(15,5):0,(15,20):0,(16,5):0,

(16,10):1,(16,55):0,(18,30):1,(19,15):0,

(19,20):1,(20,5):0,(20,10):1,(20,55):0}

global breakflag

breakflag=0

for k in dict1.keys() :

#k是字典的键,dict1[k]是它对应的值

if breakflag ==0:

itemcheck(k,dict1[k])

else :

break

while 1:

#print(time.localtime().tm_hour,"时",time.localtime().tm_min,"分",time.localtime().tm_sec,"秒")

timecheck()

time.sleep(1)#倒计时1分钟时,每1秒检查一次

优化六 定时退出

from playsound import playsound

import time

import sys

breakflag=0

def ring():

#一次打铃,重复播放两次,中间间隔15秒

playsound('1.wav')

time.sleep(15)

playsound('1.wav')

def itemcheck(yz,sta):

if yz[0] == time.localtime().tm_hour and yz[1] == time.localtime().tm_min:

if sta==0:

print("当前时间:",time.localtime().tm_hour,"时",time.localtime().tm_min,"分,","状态:下课")

else:

print("当前时间:",time.localtime().tm_hour,"时",time.localtime().tm_min,"分,","状态:上课")

ring()

elif yz[0] > time.localtime().tm_hour or ( yz[0] == time.localtime().tm_hour and yz[1]>time.localtime().tm_min):

gaptime=(yz[0]-time.localtime().tm_hour-1)*60+yz[1]+(60-time.localtime().tm_min)

if sta==0:

st="下课铃"

else:

st="上课铃"

global breakflag

breakflag=1

if gaptime-1>0 :

print("距离",yz[0],":",yz[1],"的",st,"还有",gaptime,"分钟")

print("(程序休眠",gaptime-1,"分钟)")

time.sleep(gaptime*60-60)

else:

print("倒计时",60-time.localtime().tm_sec,"秒")

elif time.localtime().tm_hour >=23 and time.localtime().tm_min >= 30 and time.localtime().tm_sec > 20:

#定时退出(23:30:20)

sys.exit()

def timecheck():

#建立一个字典存放打铃时间和对应的状态

dict1 = {(8,0):1,(8,45):0,(8,50):1,(9,35):0,

(9,50):1,(10,35):0,(10,40):1,(11,25):0,

(11,30):1,(12,15):0,(13,30):1,(14,15):0,

(14,20):1,(15,5):0,(15,20):1,(16,5):0,

(16,10):1,(16,55):0,(18,30):1,(19,15):0,

(19,20):1,(20,5):0,(20,10):1,(20,55):0,

(21,30):0,(22,00):0,(23,00):0,(23,30):0}

global breakflag

breakflag=0

for k in dict1.keys() :

#k是字典的键,dict1[k]是它对应的值

if breakflag ==0:

itemcheck(k,dict1[k])

else :

break

playsound('1.wav')

time.sleep(15)

playsound('1.wav')

while 1:

timecheck()

time.sleep(1)#倒计时1分钟时,每1秒检查一次

编译

记得调整电脑休眠时间

>>铃声下载地址

python背景怎么自定义铃声_Python 上课铃声的定时播放(具有较强的自我管理意识.jpg)...相关推荐

  1. python背景怎么自定义铃声_Python 上课铃声的定时播放(具有较强的自我管理能力.jpg)...

    为了在家安心学习,我决定写一段代码播放上课的铃声. 之前中学时就希望有一个这样的软件,周末就可以高效学习了. 但是网上搜不到相关软件,当时也不会写代码,就用闹钟来代替了. 现在自己写一个试试. 原本我 ...

  2. python背景怎么自定义铃声_python爬取手机铃声

    相信每个人都会给自己的手机调一个好听的音乐作为铃声,但是对于iphone用户来说换铃声一般都会去找第三方平台来进行更换,众多平台当中不得不说的就是爱思手机助手,今天我将带你通过python爬虫来批量进 ...

  3. python背景怎么自定义铃声_Python 制作音乐高潮副歌提取器

    有些时候,我们为了设定手机铃声或者发抖音视频时,会耗费大量时间在音乐剪辑上.尤其是想发布大量抖音视频的时候,我们得收集大量的短音乐,这是一个相当耗费时间的工作.那么,这个音乐高潮的提取能不能自动化呢? ...

  4. python背景怎么自定义铃声_用python来教你做个音乐高潮提取器

    有些时候,我们为了设定手机铃声或者发抖音视频时,会耗费大量时间在音乐剪辑上.尤其是想发布大量抖音视频的时候,我们得收集大量的短音乐,这是一个相当耗费时间的工作.那么,这个音乐高潮的提取能不能自动化呢? ...

  5. python动态调用自定义模块_python importlib动态导入模块 reload重载模块

    阅读目录 一般而言,当我们需要某些功能的模块时(无论是内置模块或自定义功能的模块),可以通过import module 或者 from * import module的方式导入,这属于静态导入,很容易 ...

  6. python两个自定义函数_Python自定义函数实现求两个数最大公约数、最小公倍数示例...

    本文实例讲述了Python自定义函数实现求两个数最大公约数.最小公倍数.分享给大家供大家参考,具体如下: 1. 求最小公倍数的算法: 最小公倍数  =  两个整数的乘积 /  最大公约数 所以我们首先 ...

  7. python中如何自定义函数_Python中自定义函数的教程

    在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回. 我们以自定义一个求绝对值的my_abs函数 ...

  8. python中func自定义函数_Python函数之自定义函数作用域闭包

    一 前言 1.1 为什么要用函数 代码的组织结构更清晰,可读性好: 遇到重复的功能不需要重新编写代码,调用函数即可,代码不会冗余: 功能需要扩展时,只需要修改函数内容即可,实现统一管理,降低代码维护难 ...

  9. python背景颜色词云图_python中实现词云图

    import matplotlib.pyplot as plt import jieba from wordcloud import wordcloud # 1.读出词语 text = open('t ...

  10. python如何定义自定义函数_python类中系统自定义函数

    标签: python类 双下划线特殊函数 今天遇到python类内部系统以双下划线开头和结尾的情况,特去学习一部分的应用情况,顺便记录一下.python 的OOP编程中,每个类拥有一些系统特殊定义的函 ...

最新文章

  1. 打造专属BGM,​Python 深度学习教你
  2. 微信开发接口调用(前端+.net服务端)
  3. 基于SSM的勤工助学管理系统
  4. linux 文本中的不可见字符和处理
  5. 使用mybatis的resultMap进行复杂查询
  6. iOS UITextField限制输入字数
  7. 如何检查Xcode是否被植入了XcodeGhost
  8. 20科大考研经验分享-数学
  9. Javaweb图书管理系统的设计与实现(含毕业设计)
  10. Monkey test 汇总
  11. 为什么学习线性代数?
  12. 海洋技术课设遥感反演matlab,国家重点研发计划项目“新型海洋微波遥感探测机理模型与应用研究” 课题一“微波极化遥感机理与应用技术”学术研讨会顺利召开...
  13. PHP实现一个在线选择答题系统
  14. 零基础入门python好学么
  15. ZipFile 解压多个.zip压缩文件
  16. 关于系统时钟的配置问题,如是stm32f1的系统时钟为72Mhz
  17. 从0制作一个多线程游戏实录
  18. Java基于jsp的火车票网上订票系统
  19. 泰凌微 Telink TLSR825X Printf gpio 模拟 串口 打印信息 log
  20. 免费计算机操作基础知识ppt,计算机基础知识与基本操作要点课件.ppt

热门文章

  1. 中科大开源数据集CCPD 2019详细介绍
  2. 输出流缓冲的意义 何时缓冲 Stdout Buffering
  3. java工程师项目简历_java软件工程师岗位项目经历怎么写
  4. 五、Matlab 画图——万能的plot函数
  5. oracle官网下载plsql,Oracle、OracleClient、PLSQL下载安装配置(64位)
  6. MATLAB印刷体汉字识别
  7. Unity 脚本生成瓦片地图TileMap
  8. 什么是A*(Astar)算法?(简单叙述)
  9. 计算机主机前声音口怎么设置吗,电脑耳机没声音怎么设置_耳机没声音怎么设置-太平洋IT百科手机版...
  10. 自动阅读脚本成本分析大全(单月阅读成本核对)