python背景怎么自定义铃声_Python 上课铃声的定时播放(具有较强的自我管理意识.jpg)...
為了在家安心學習,我決定寫一段代碼播放上課的鈴聲。
之前中學時就希望有一個這樣的軟件,周末就可以高效學習了。
但是網上搜不到相關軟件,當時也不會寫代碼,就用鬧鐘來代替了。
現在自己寫一個試試。
原本我是用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)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Reflected File Downl
- 下一篇: (翻译)黑底白字样式的使用时机