先拋上公衆號二維碼再入正題
學編程路上遇到一個問題,在電腦前坐着坐着坐久了就忘了時間了。。。
忘了喫飯。。。
忘了去廁所。。。
忘了遊戲裏收割。。。
忘了做飯時候開着火定時5分鐘。。。
忘了說好的10分鐘後出門。。。。
可能,你也有以上這困惑?so,一起用python寫個倒計時軟件吧!
孔子說把問題放在face前,就不是問題了。「文末有視頻演示」
可能你說:幹嘛不用手機上鬧鈴??
我想說:拿手機就走神、分心,而且電腦鍵盤敲數字不比手機切換APP快得多??
01-設想
想的清楚就會做得明白,這個小程序腳本我設想需要以下幾方面功能:
- 倒計時結束需要有聲音提示—聽覺上刺激我
- 可以看到倒計時的時間顯示—視覺上提醒我
- 可以輸入簡單幾分鐘的—應對幾分鐘小任務
- 也可以輸入跨天的—應對跨天的大任務(電腦不關機的話)
02-整結構和素材
首先在pycharm裏新建一個工程,然後在這個工程下新建一個py文件並找到一個提示音文件, 如下方截圖。
這個聲音素材哪裏找呢?
這需要萬能的百度,我是在這個網站找到的:點我前往
隨便找到一個讓你緊張刺激的就行咱這是定製嘛~
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 邀請你的來到!