隨著一個《霍格沃茨:一段校史》風格的大字(呃,這字好像並不大……)標題的出現,無聊的我沒事干,又開始整活了~
之前我做的程序,一個使用了Tkinter庫,一個則是Pygame,總之都是帶有圖形化的界面的。但作為一個懶漢,我自然能懶必懶(這點我非常有自知之明),這次,我就來一個簡單樸素的沒有圖形界面的程序。
這是一個鬧鐘,一個可以設定時間的鬧鐘(雖然操作的界面有點簡陋,但絲毫不影響它的強大功能)。
首先,我們要編鬧鐘的響鈴程序。
我們先新建一個文件,後綴是“.pyw”(這樣可以保證程序運行的時候不會彈出一個Python自帶的窗口)。
首先,老規矩,第一行一定是:
#coding:utf-8
然後,我們要導入所需的模塊:
import datetime
import pygame
import os
import time
import random
from pynput.keyboard import Key,Listener
本次所需的模塊不多,由於都是我原先安裝好的,所以我也並不確定它們是否要用pip安裝。當然,使用PyCharm進行編程可以自動為你安裝你使用到的未安裝的模塊。
all_songs=[]
all_songs_dict={}
for root, dirs, names in os.walk("d:/Users/{}/Music".format(os.getlogin())):
for filename in names:
if os.path.join(root, filename)[-4:] == ".mp3" or os.path.join(root, filename)[-4:] == ".ogg":
all_songs.append(os.path.join(root, filename)[os.path.join(root, filename).find("\\") + 1:-4])
all_songs_dict[
os.path.join(root, filename)[os.path.join(root, filename).find("\\") + 1:-4]] = os.path.join(root,
filename).replace(
"\\", "/")
首先,我們需要獲取電腦中的音樂。我們用os.walk獲取Music文件夾中的所有ogg和mp3文件(這是由於我播放音樂使用的是Pygame,它似乎只支持這兩種文件的音樂)。同時,通過對路徑字符串的文字處理,提取出音樂名稱存儲入列表all_songs,並將其和原先的路徑對應存入字典all_songs_dict。這時存入這兩個變量中的音樂信息相當於一種保險機制,可以確保在找不到鈴聲文件時有備用鈴聲可以使用(當然,如果你的音樂文件夾是空的,這當然沒用;但我不認為你的文件夾中會沒有音樂)。
finding = open("alarm_list.txt", "a")
finding.close()
finding = open("alarm_list.txt", "r")
alarm_list_undone = finding.readlines()
finding.close()
alarm_list = []
for i in alarm_list_undone:
alarm_list.append(i.replace("\n", ""))我們的鬧鐘時間當然需要存儲在某個文件中,這樣才能防止這個信息丟失。於是,我們打開了一個“alarm_list.txt”文件(為防止文件不存在,我們需要先用寫入的模式打開一次文件,這樣可以在文件不存在時創建;同時為防止這個操作清空文件,我們必須用追加寫的“a”而不是“w”)。我們會讀取文件中的內容,並刪除換行後存入alarm_list。我們不必憂心文件中有無法識別的內容,因為文件是通過另一個編輯程序寫入的,那個程序會保證文件內容是這個程序所能識別的。
finding = open("dates_one.txt", "a")
finding.close()
finding = open("dates_one.txt", "r")
dates_undone_one = finding.readlines()
finding.close()
finding = open("dates_two.txt", "a")
finding.close()
finding = open("dates_two.txt", "r")
dates_undone_two = finding.readlines()
finding.close()
dates = {}
for i in range(len(dates_undone_one)):
dates[dates_undone_one[i].replace("\n", "")] =eval( dates_undone_two[i].replace("\n", ""))同理,對“dates_one.txt”和“dates_two.txt”也需要類似的處理。當然,因為文件中存儲有表格,我們有必要用eval()函數回復它的表格類型。第二個不同在於這兩個文件的內容會被存入一個字典,而不是表格。
finding = open("songs_one.txt", "a")
finding.close()
finding = open("songs_one.txt", "r")
songs_undone_one = finding.readlines()
finding.close()
finding = open("songs_two.txt", "a")
finding.close()
finding = open("songs_two.txt", "r")
songs_undone_two = finding.readlines()
finding.close()
songs = {}
for i in range(len(songs_undone_two)):
try:
open(songs_undone_two[i].replace("\n", ""),"r")
except:
songs_undone_two[i]=all_songs_dict[all_songs[random.randint(0,len(all_songs)-1)]]+"\n"
with open("songs_two.txt", "w")as finding:
finding.writelines(songs_undone_two)
for i in range(len(songs_undone_one)):
songs[songs_undone_one[i].replace("\n", "")] = songs_undone_two[i].replace("\n", "")在對“songs_one.txt”和“songs_two.txt”的處理中,我們就需要用到表格all_songs了。為保證音樂都存在,它會嘗試打開路徑所指向的文件。如果找不到文件,它會將音樂修改為all_songs中所記錄的隨機一個音樂(在這裡可以進行改善:加一個if判斷,如果路徑指向的文件後綴不是“.mp3”或“.ogg”,則也要修改音樂。這個工作感興趣的讀者可以自行加上,在此我不再給出代碼——這主要是由於我在解釋我的程序代碼時即使發現了不合理之處,只要不是大問題,就也不願再行修改的習慣)。
finding = open("alarm_list.txt", "r")
finder=finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("alarm_list.txt", "w") as finding:
finding.write(finder)
finding = open("dates_one.txt", "r")
finder=finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("dates_one.txt", "w") as finding:
finding.write(finder)
finding = open("dates_two.txt", "r")
finder=finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("dates_two.txt", "w") as finding:
finding.write(finder)
finding = open("songs_one.txt", "r")
finder=finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("songs_one.txt", "w") as finding:
finding.write(finder)
finding = open("songs_two.txt", "r")
finder=finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("songs_two.txt", "w") as finding:
finding.write(finder)我的刪除鬧鐘的程序片段不知為何,一直有一些BUG,會在刪除處於結尾的鬧鐘時留下空行(這會導致程序運行出錯)。於是,我們很有必要對其的後果作出一些挽回:將每一個文件結尾的換行符刪除。而這個程序就是進行了這樣一個工作。
def delete(i):
global all_songs, all_songs_dict, alarm_list, dates, songs,alarm_list_undone,dates_undone_one,dates_undone_two,songs_undone_one,songs_undone_two
try:
try:
alarm_list_undone.remove(i)
alarm_list[-1] = alarm_list[-1].replace("\n", "")
except:
alarm_list_undone.remove(i + "\n")
except:
if False:
print()
alarm_list.remove(i)
with open("alarm_list.txt", "w") as finding:
finding.writelines(alarm_list_undone)
for j in range(len(songs_undone_one)):
if songs_undone_one[j] == i or songs_undone_one[j] == i + "\n":
songs_undone_one.pop(j)
songs_undone_two.pop(j)
try:
songs_undone_one[-1]=songs_undone_one[-1].replace("\n", "")
songs_undone_two[-1]=songs_undone_two[-1].replace("\n", "")
except:
if False:
print()
songs = {}
for j in range(len(songs_undone_one)):
songs[songs_undone_one[j].replace("\n", "")] = songs_undone_two[j].replace("\n", "")
with open("songs_one.txt", "w") as finding:
finding.writelines(songs_undone_one)
with open("songs_two.txt", "w") as finding:
finding.writelines(songs_undone_two)
for j in range(len(dates_undone_one)):
if dates_undone_one[j] == i or dates_undone_one[j] == i + "\n":
dates_undone_one.pop(j)
dates_undone_two.pop(j)
try:
dates_undone_one[-1]=dates_undone_one[-1].replace("\n", "")
dates_undone_two[-1]=dates_undone_two[-1].replace("\n", "")
except:
if False:
print()
dates = {}
for j in range(len(dates_undone_one)):
dates[dates_undone_one[j].replace("\n", "")] = dates_undone_two[j].replace("\n", "")
with open("dates_one.txt", "w") as finding:
finding.writelines(dates_undone_one)
with open("dates_two.txt", "w") as finding:
finding.writelines(dates_undone_two)
這就是剛剛提到的有BUG的刪除程序。這裡輸入的i是鬧鐘的時間(在這個程序中,鬧鐘時間具有唯一性,一個時間只對應一個鬧鐘)。這個程序試圖刪除i所對應的所有信息,但是,對於位於文件和表格結尾的鬧鐘,它不能有效處理。我試圖使他刪除上一個條末尾的換行符,但顯然出現了某種錯誤。我因此不得不另加一行代碼來彌補它的後果。
def play_it(url):
global Listener
pygame.mixer.init()
t = pygame.mixer.music.load(url)
pygame.mixer.music.play() def on_release(key):
if key == Key.space:
pygame.mixer.music.stop() with Listener(on_release=on_release) as Listener:
Listener.join()
播放程序,用於在時間到時播放音樂。這裡不僅使用了Pygame的音樂播放,還使用了Pynput的鍵盤監聽,這樣可以在按下空格時關閉音樂(當然,有時候在打字時也許會誤關鬧鐘,但這無關緊要——你完全可以設置另一個不常用的鍵來關閉鬧鐘)。
def alarm():
global all_songs,all_songs_dict,alarm_list,dates,songs
while True:
try:
毫無疑問,在這些代碼後面,跟的是程序的核心代碼。但接下來這一段無疑令人失望:
e = time.time()
finding = open("alarm_list.txt", "a")
finding.close()
finding = open("alarm_list.txt", "r")
alarm_list_undone = finding.readlines()
finding.close()
alarm_list = []
for i in alarm_list_undone:
alarm_list.append(i.replace("\n", ""))
finding = open("dates_one.txt", "a")
finding.close()
finding = open("dates_one.txt", "r")
dates_undone_one = finding.readlines()
finding.close()
finding = open("dates_two.txt", "a")
finding.close()
finding = open("dates_two.txt", "r")
dates_undone_two = finding.readlines()
finding.close()
dates = {}
for i in range(len(dates_undone_one)):
dates[dates_undone_one[i].replace("\n", "")] = eval(dates_undone_two[i].replace("\n", ""))
finding = open("songs_one.txt", "a")
finding.close()
finding = open("songs_one.txt", "r")
songs_undone_one = finding.readlines()
finding.close()
finding = open("songs_two.txt", "a")
finding.close()
finding = open("songs_two.txt", "r")
songs_undone_two = finding.readlines()
finding.close()
songs = {}
for i in range(len(songs_undone_two)):
try:
open(songs_undone_two[i].replace("\n", ""), "r")
except:
songs_undone_two[i] = all_songs_dict[all_songs[random.randint(0, len(all_songs) - 1)]] + "\n"
with open("songs_two.txt", "w") as finding:
finding.writelines(songs_undone_two)
for i in range(len(songs_undone_one)):
songs[songs_undone_one[i].replace("\n", "")] = songs_undone_two[i].replace("\n", "")
finding = open("alarm_list.txt", "r")
finder = finding.read()
while finder[-1] == "\n":
finder = finder[:-1]
with open("alarm_list.txt", "w") as finding:
finding.write(finder)
finding = open("dates_one.txt", "r")
finder = finding.read()
while finder[-1] == "\n":
finder = finder[:-1]
with open("dates_one.txt", "w") as finding:
finding.write(finder)
finding = open("dates_two.txt", "r")
finder = finding.read()
while finder[-1] == "\n":
finder = finder[:-1]
with open("dates_two.txt", "w") as finding:
finding.write(finder) finding = open("songs_one.txt", "r")
finder = finding.read()
while finder[-1] == "\n":
finder = finder[:-1]
with open("songs_one.txt", "w") as finding:
finding.write(finder)
finding = open("songs_two.txt", "r")
finder = finding.read()
while finder[-1] == "\n":
finder = finder[:-1]
with open("songs_two.txt", "w") as finding:
finding.write(finder)
沒錯,這就是前面的存儲載入的代碼。這是為了刷新對文件的讀取,畢竟,你很有可能會在程序運行時修改鬧鐘。
for i in alarm_list:
if str(datetime.datetime.now())[11:16] == i:
if time.strftime("%w", time.localtime()) in dates.get(i):
url = songs.get(i)
True_False=int(time.strftime("%Y", time.localtime())) < int(dates.get(i)[-1][4:8]) or (int(time.strftime("%Y", time.localtime())) == int(dates.get(i)[-1][4:8]) and int(time.strftime("%j", time.localtime())) <= int(dates.get(i)[-1][9:]))
if int(time.strftime("%Y", time.localtime())) > int(dates.get(i)[-1][4:8]) or (
int(time.strftime("%Y", time.localtime())) == int(dates.get(i)[-1][4:8]) and int(
time.strftime("%j", time.localtime())) >= int(dates.get(i)[-1][9:])):
delete(i)
if True_False:
play_it(url)
else:
if int(time.strftime("%Y", time.localtime())) > int(dates.get(i)[-1][4:8]) or (
int(time.strftime("%Y", time.localtime())) == int(dates.get(i)[-1][4:8]) and int(
time.strftime("%j", time.localtime())) > int(dates.get(i)[-1][9:])):
delete(i)
if int(time.strftime("%Y", time.localtime())) == int(dates.get(i)[-1][4:8]) and int(time.strftime("%j", time.localtime())) == int(dates.get(i)[-1][9:]) and int(str(datetime.datetime.now())[11:13])*60+int(str(datetime.datetime.now())[14:16]) > int(i[:2])*60+int(i[3:]):
delete(i)
這才是你們期待的核心代碼(雖然功能很核心,但卻還是很簡單的)我們將鬧鐘列表遍歷,將時間與鬧鐘所設置的時間所比對,如果現在是某個鬧鐘所設定的時間,同時現在日期在一星期中的位置(暫且就這麼表述,我突然發現像“星期一”之類的詞似乎……沒有一個統稱)也存在於對應的表格中,同時現在的日期也沒有超過鬧鐘的截止日期,我們就會響鈴(鈴聲會遵從該鬧鐘的設置)。同時,對於已截至的鬧鐘,它會予以刪除。
這樣,響鈴的程序就已初步完成。但是,為了使程序不擠占進程(很多鬧鐘程序都會如此),我們還是有必要加上這一段代碼:
time.sleep(1 - (time.time() - e))
except:
time.sleep(1 - (time.time() - e))
當然最後得運行函數:
alarm()
這樣,我們就把鬧鐘的程序完成了。
附上完整代碼:
#coding:utf-8
import datetime
import pygame
import os
import time
import random
from pynput.keyboard import Key,Listener
all_songs=[]
all_songs_dict={}
for root, dirs, names in os.walk("d:/Users/{}/Music".format(os.getlogin())):
for filename in names:
if os.path.join(root, filename)[-4:] == ".mp3" or os.path.join(root, filename)[-4:] == ".ogg":
all_songs.append(os.path.join(root, filename)[os.path.join(root, filename).find("\\") + 1:-4])
all_songs_dict[
os.path.join(root, filename)[os.path.join(root, filename).find("\\") + 1:-4]] = os.path.join(root,
filename).replace(
"\\", "/") finding = open("alarm_list.txt", "a")
finding.close()
finding = open("alarm_list.txt", "r")
alarm_list_undone = finding.readlines()
finding.close()
alarm_list = []
for i in alarm_list_undone:
alarm_list.append(i.replace("\n", ""))
finding = open("dates_one.txt", "a")
finding.close()
finding = open("dates_one.txt", "r")
dates_undone_one = finding.readlines()
finding.close()
finding = open("dates_two.txt", "a")
finding.close()
finding = open("dates_two.txt", "r")
dates_undone_two = finding.readlines()
finding.close()
dates = {}
for i in range(len(dates_undone_one)):
dates[dates_undone_one[i].replace("\n", "")] =eval( dates_undone_two[i].replace("\n", ""))
finding = open("songs_one.txt", "a")
finding.close()
finding = open("songs_one.txt", "r")
songs_undone_one = finding.readlines()
finding.close()
finding = open("songs_two.txt", "a")
finding.close()
finding = open("songs_two.txt", "r")
songs_undone_two = finding.readlines()
finding.close()
songs = {}
for i in range(len(songs_undone_two)):
try:
open(songs_undone_two[i].replace("\n", ""),"r")
except:
songs_undone_two[i]=all_songs_dict[all_songs[random.randint(0,len(all_songs)-1)]]+"\n"
with open("songs_two.txt", "w")as finding:
finding.writelines(songs_undone_two)
for i in range(len(songs_undone_one)):
songs[songs_undone_one[i].replace("\n", "")] = songs_undone_two[i].replace("\n", "")
finding = open("alarm_list.txt", "r")
finder=finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("alarm_list.txt", "w") as finding:
finding.write(finder)
finding = open("dates_one.txt", "r")
finder=finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("dates_one.txt", "w") as finding:
finding.write(finder)
finding = open("dates_two.txt", "r")
finder=finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("dates_two.txt", "w") as finding:
finding.write(finder) finding = open("songs_one.txt", "r")
finder=finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("songs_one.txt", "w") as finding:
finding.write(finder)
finding = open("songs_two.txt", "r")
finder=finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("songs_two.txt", "w") as finding:
finding.write(finder)
def delete(i):
global all_songs, all_songs_dict, alarm_list, dates, songs,alarm_list_undone,dates_undone_one,dates_undone_two,songs_undone_one,songs_undone_two
try:
try:
alarm_list_undone.remove(i)
alarm_list[-1] = alarm_list[-1].replace("\n", "")
except:
alarm_list_undone.remove(i + "\n")
except:
if False:
print()
alarm_list.remove(i)
with open("alarm_list.txt", "w") as finding:
finding.writelines(alarm_list_undone)
for j in range(len(songs_undone_one)):
if songs_undone_one[j] == i or songs_undone_one[j] == i + "\n":
songs_undone_one.pop(j)
songs_undone_two.pop(j)
try:
songs_undone_one[-1]=songs_undone_one[-1].replace("\n", "")
songs_undone_two[-1]=songs_undone_two[-1].replace("\n", "")
except:
if False:
print()
songs = {}
for j in range(len(songs_undone_one)):
songs[songs_undone_one[j].replace("\n", "")] = songs_undone_two[j].replace("\n", "")
with open("songs_one.txt", "w") as finding:
finding.writelines(songs_undone_one)
with open("songs_two.txt", "w") as finding:
finding.writelines(songs_undone_two)
for j in range(len(dates_undone_one)):
if dates_undone_one[j] == i or dates_undone_one[j] == i + "\n":
dates_undone_one.pop(j)
dates_undone_two.pop(j)
try:
dates_undone_one[-1]=dates_undone_one[-1].replace("\n", "")
dates_undone_two[-1]=dates_undone_two[-1].replace("\n", "")
except:
if False:
print()
dates = {}
for j in range(len(dates_undone_one)):
dates[dates_undone_one[j].replace("\n", "")] = dates_undone_two[j].replace("\n", "")
with open("dates_one.txt", "w") as finding:
finding.writelines(dates_undone_one)
with open("dates_two.txt", "w") as finding:
finding.writelines(dates_undone_two)
def play_it(url):
global Listener
pygame.mixer.init()
t = pygame.mixer.music.load(url)
pygame.mixer.music.play() def on_release(key):
if key == Key.space:
pygame.mixer.music.stop() with Listener(on_release=on_release) as Listener:
Listener.join()
def alarm():
global all_songs,all_songs_dict,alarm_list,dates,songs
while True:
try:
e = time.time()
finding = open("alarm_list.txt", "a")
finding.close()
finding = open("alarm_list.txt", "r")
alarm_list_undone = finding.readlines()
finding.close()
alarm_list = []
for i in alarm_list_undone:
alarm_list.append(i.replace("\n", ""))
finding = open("dates_one.txt", "a")
finding.close()
finding = open("dates_one.txt", "r")
dates_undone_one = finding.readlines()
finding.close()
finding = open("dates_two.txt", "a")
finding.close()
finding = open("dates_two.txt", "r")
dates_undone_two = finding.readlines()
finding.close()
dates = {}
for i in range(len(dates_undone_one)):
dates[dates_undone_one[i].replace("\n", "")] = eval(dates_undone_two[i].replace("\n", ""))
finding = open("songs_one.txt", "a")
finding.close()
finding = open("songs_one.txt", "r")
songs_undone_one = finding.readlines()
finding.close()
finding = open("songs_two.txt", "a")
finding.close()
finding = open("songs_two.txt", "r")
songs_undone_two = finding.readlines()
finding.close()
songs = {}
for i in range(len(songs_undone_two)):
try:
open(songs_undone_two[i].replace("\n", ""), "r")
except:
songs_undone_two[i] = all_songs_dict[all_songs[random.randint(0, len(all_songs) - 1)]] + "\n"
with open("songs_two.txt", "w") as finding:
finding.writelines(songs_undone_two)
for i in range(len(songs_undone_one)):
songs[songs_undone_one[i].replace("\n", "")] = songs_undone_two[i].replace("\n", "")
finding = open("alarm_list.txt", "r")
finder = finding.read()
while finder[-1] == "\n":
finder = finder[:-1]
with open("alarm_list.txt", "w") as finding:
finding.write(finder)
finding = open("dates_one.txt", "r")
finder = finding.read()
while finder[-1] == "\n":
finder = finder[:-1]
with open("dates_one.txt", "w") as finding:
finding.write(finder)
finding = open("dates_two.txt", "r")
finder = finding.read()
while finder[-1] == "\n":
finder = finder[:-1]
with open("dates_two.txt", "w") as finding:
finding.write(finder) finding = open("songs_one.txt", "r")
finder = finding.read()
while finder[-1] == "\n":
finder = finder[:-1]
with open("songs_one.txt", "w") as finding:
finding.write(finder)
finding = open("songs_two.txt", "r")
finder = finding.read()
while finder[-1] == "\n":
finder = finder[:-1]
with open("songs_two.txt", "w") as finding:
finding.write(finder)
for i in alarm_list:
if str(datetime.datetime.now())[11:16] == i:
if time.strftime("%w", time.localtime()) in dates.get(i):
url = songs.get(i)
True_False=int(time.strftime("%Y", time.localtime())) < int(dates.get(i)[-1][4:8]) or (int(time.strftime("%Y", time.localtime())) == int(dates.get(i)[-1][4:8]) and int(time.strftime("%j", time.localtime())) <= int(dates.get(i)[-1][9:]))
if int(time.strftime("%Y", time.localtime())) > int(dates.get(i)[-1][4:8]) or (
int(time.strftime("%Y", time.localtime())) == int(dates.get(i)[-1][4:8]) and int(
time.strftime("%j", time.localtime())) >= int(dates.get(i)[-1][9:])):
delete(i)
if True_False:
play_it(url)
else:
if int(time.strftime("%Y", time.localtime())) > int(dates.get(i)[-1][4:8]) or (
int(time.strftime("%Y", time.localtime())) == int(dates.get(i)[-1][4:8]) and int(
time.strftime("%j", time.localtime())) > int(dates.get(i)[-1][9:])):
delete(i)
if int(time.strftime("%Y", time.localtime())) == int(dates.get(i)[-1][4:8]) and int(time.strftime("%j", time.localtime())) == int(dates.get(i)[-1][9:]) and int(str(datetime.datetime.now())[11:13])*60+int(str(datetime.datetime.now())[14:16]) > int(i[:2])*60+int(i[3:]):
delete(i)
time.sleep(1 - (time.time() - e))
except:
time.sleep(1 - (time.time() - e)) print(all_songs)
print(all_songs_dict)
print(alarm_list)
print(dates)
print(songs)
alarm()
你是否疑惑:我們如何設置鬧鐘?這後面的內容,我們就來解決這一件事。
最簡單的辦法,當然是將鬧鐘手動輸入到文件中。“alarm_list.txt”中需要輸入的是鬧鐘的時間,格式“00:00”;“dates_one.txt”和“songs_one.txt”中儲存的其實也是這一內容。“songs_two.txt”中是音樂的路徑,這個也沒問題;最重要的是“dates_two.txt”。我們不妨舉個例子。“['1', '2', '3', '4', '5', 'kill9999&99']”,這是什麼意思?“1”“2”“3”“4”“5”指響鈴的星期,其中“0”代表周日,“1”代表周一,後面以此類推。“kill9999&99”是鬧鐘截至日期,或者說有效期,“9999”是年,“99”是在這年中的天數,“kill9999&99”意為“有效期至公元9999年的4月9日”,在這裡我們可以簡單粗暴的認為是永不停止(因為一般來說,這個程序是絕對不會運行到那一天的)。也就是說“['1', '2', '3', '4', '5', 'kill9999&99']”的意思大概就是,每周工作日響鈴,永遠有效。
當然,這麼做實際會比較繁瑣,因此我經過一連串更繁瑣的步驟後,制作了一個鬧鐘的設置程序(在此只給出代碼,因為它裡面主要都是些簡單卻反復的內容):
#coding:utf-8
import random
import os
import datetime
import time
try:
all_songs = []
all_songs_dict = {}
for root, dirs, names in os.walk("d:/Users/{}/Music".format(os.getlogin())):
for filename in names:
if os.path.join(root, filename)[-4:] == ".mp3" or os.path.join(root, filename)[-4:] == ".ogg":
all_songs.append(os.path.join(root, filename)[os.path.join(root, filename).find("\\") + 1:-4])
all_songs_dict[
os.path.join(root, filename)[os.path.join(root, filename).find("\\") + 1:-4]] = os.path.join(root,
filename).replace(
"\\", "/")
finding = open("alarm_list.txt", "a")
finding.close()
finding = open("alarm_list.txt", "r")
alarm_list_undone = finding.readlines()
finding.close()
alarm_list = []
for i in alarm_list_undone:
alarm_list.append(i.replace("\n", ""))
finding = open("dates_one.txt", "a")
finding.close()
finding = open("dates_one.txt", "r")
dates_undone_one = finding.readlines()
finding.close()
finding = open("dates_two.txt", "a")
finding.close()
finding = open("dates_two.txt", "r")
dates_undone_two = finding.readlines()
finding.close()
dates = {}
for i in range(len(dates_undone_one)):
dates[dates_undone_one[i].replace("\n", "")] = eval(dates_undone_two[i].replace("\n", ""))
finding = open("songs_one.txt", "a")
finding.close()
finding = open("songs_one.txt", "r")
songs_undone_one = finding.readlines()
finding.close()
finding = open("songs_two.txt", "a")
finding.close()
finding = open("songs_two.txt", "r")
songs_undone_two = finding.readlines()
finding.close()
songs = {}
for i in range(len(songs_undone_two)):
try:
open(songs_undone_two[i].replace("\n", ""), "r")
except:
songs_undone_two[i] = all_songs_dict[all_songs[random.randint(0, len(all_songs) - 1)]] + "\n"
with open("songs_two.txt", "w") as finding:
finding.writelines(songs_undone_two)
for i in range(len(songs_undone_one)):
songs[songs_undone_one[i].replace("\n", "")] = songs_undone_two[i].replace("\n", "")
finding = open("alarm_list.txt", "r")
finder = finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("alarm_list.txt", "w") as finding:
finding.write(finder)
finding = open("dates_one.txt", "r")
finder = finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("dates_one.txt", "w") as finding:
finding.write(finder)
finding = open("dates_two.txt", "r")
finder = finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("dates_two.txt", "w") as finding:
finding.write(finder) finding = open("songs_one.txt", "r")
finder = finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("songs_one.txt", "w") as finding:
finding.write(finder)
finding = open("songs_two.txt", "r")
finder = finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("songs_two.txt", "w") as finding:
finding.write(finder)
print("請選擇服務:")
print()
print("1:新建鬧鐘")
print("2:管理鬧鐘")
print()
top = input("你的選擇:")
if top == "1":
print()
set_time = input(" 請輸入鬧鐘時間(格式:00:00):")
have_it = False
for i in alarm_list:
if i == set_time:
have_it = True
try:
alarm_list_undone[-1] += "\n"
except:
if False:
print()
alarm_list_undone.append(set_time)
alarm_list = []
for i in alarm_list_undone:
alarm_list.append(i.replace("\n", ""))
with open("alarm_list.txt", "w") as finding:
finding.writelines(alarm_list_undone)
print()
print(" 請選擇響鈴次數:")
print()
print(" 1:僅一次")
print(" 2:每天")
print(" 3:工作日")
print(" 4:自定義")
print()
set_date = input(" 你的選擇:")
if set_date == "1":
if int(set_time[:set_time.find(":")]) * 60 + int(set_time[set_time.find(":") + 1:]) <= int(
str(datetime.datetime.now())[11:16][:str(datetime.datetime.now())[11:16].find(":")]) * 60 + int(
str(datetime.datetime.now())[11:16][str(datetime.datetime.now())[11:16].find(":") + 1:]):
try:
dates_undone_one[-1] += "\n"
except:
if False:
print()
dates_undone_one.append(set_time)
try:
dates_undone_two[-1] += "\n"
except:
if False:
print()
dates_undone_two.append(str([(datetime.datetime.now() + datetime.timedelta(days=1)).strftime("%w"),
"kill{}&{}".format(
(datetime.datetime.now() + datetime.timedelta(days=1)).strftime("%Y"),
(datetime.datetime.now() + datetime.timedelta(days=1)).strftime(
"%j"))]))
else:
try:
dates_undone_one[-1] += "\n"
except:
if False:
print()
dates_undone_one.append(set_time)
try:
dates_undone_two[-1] += "\n"
except:
if False:
print()
dates_undone_two.append(str([(datetime.datetime.now()).strftime("%w"),
"kill{}&{}".format((datetime.datetime.now()).strftime("%Y"),
(datetime.datetime.now()).strftime("%j"))])) dates = {}
for i in range(len(dates_undone_one)):
dates[dates_undone_one[i].replace("\n", "")] = eval(dates_undone_two[i].replace("\n", ""))
with open("dates_one.txt", "w") as finding:
finding.writelines(dates_undone_one)
with open("dates_two.txt", "w") as finding:
finding.writelines(dates_undone_two)
if set_date == "2":
try:
dates_undone_one[-1] += "\n"
except:
if False:
print()
dates_undone_one.append(set_time)
try:
dates_undone_two[-1] += "\n"
except:
if False:
print()
dates_undone_two.append(str(["1", "2", "3", "4", "5", "6", "0", "kill9999&99"]))
dates = {}
for i in range(len(dates_undone_one)):
dates[dates_undone_one[i].replace("\n", "")] = eval(dates_undone_two[i].replace("\n", ""))
with open("dates_one.txt", "w") as finding:
finding.writelines(dates_undone_one)
with open("dates_two.txt", "w") as finding:
finding.writelines(dates_undone_two)
if set_date == "3":
try:
dates_undone_one[-1] += "\n"
except:
if False:
print()
dates_undone_one.append(set_time)
try:
dates_undone_two[-1] += "\n"
except:
if False:
print()
dates_undone_two.append(str(["1", "2", "3", "4", "5", "kill9999&99"]))
dates = {}
for i in range(len(dates_undone_one)):
dates[dates_undone_one[i].replace("\n", "")] = eval(dates_undone_two[i].replace("\n", ""))
with open("dates_one.txt", "w") as finding:
finding.writelines(dates_undone_one)
with open("dates_two.txt", "w") as finding:
finding.writelines(dates_undone_two)
if set_date == "4":
list_one = []
math_to_week = {0: "星期日", 1: "星期一", 2: "星期二", 3: "星期三", 4: "星期四", 5: "星期五", 6: "星期六"}
for i in range(7):
print()
yes_no = input(" {}是否響鈴(是輸入“1”,否輸入“0”):".format(math_to_week.get(i)))
if yes_no == "1":
list_one.append(str(i))
list_one.append("kill9999&99")
try:
dates_undone_one[-1] += "\n"
except:
if False:
print()
dates_undone_one.append(set_time)
try:
dates_undone_two[-1] += "\n"
except:
if False:
print()
dates_undone_two.append(str(list_one))
dates = {}
for i in range(len(dates_undone_one)):
dates[dates_undone_one[i].replace("\n", "")] = eval(dates_undone_two[i].replace("\n", ""))
with open("dates_one.txt", "w") as finding:
finding.writelines(dates_undone_one)
with open("dates_two.txt", "w") as finding:
finding.writelines(dates_undone_two)
print()
print(" 請選擇鈴聲:")
print()
num = 0
for i in all_songs:
num += 1
print(" " + str(num) + ":《" + i + "》")
num += 1
print(" " + str(num) + ":自選")
print()
set_song = input(" 你的選擇:")
if not set_song == str(num):
song = all_songs_dict[all_songs[int(set_song) - 1]]
else:
print()
song = input(" 請輸入路徑:")
try:
songs_undone_one[-1] += "\n"
except:
if False:
print()
songs_undone_one.append(set_time)
try:
songs_undone_two[-1] += "\n"
except:
if False:
print()
songs_undone_two.append(song)
songs = {}
for i in range(len(songs_undone_two)):
try:
open(songs_undone_two[i].replace("\n", ""), "r")
except:
songs_undone_two[i] = all_songs_dict[all_songs[random.randint(0, len(all_songs) - 1)]] + "\n"
with open("songs_two.txt", "w") as finding:
finding.writelines(songs_undone_two)
for i in range(len(songs_undone_one)):
songs[songs_undone_one[i].replace("\n", "")] = songs_undone_two[i].replace("\n", "")
with open("songs_one.txt", "w") as finding:
finding.writelines(songs_undone_one)
with open("songs_two.txt", "w") as finding:
finding.writelines(songs_undone_two)
else:
print()
print(" 請選擇需要刪除的鬧鐘:")
print()
for i in range(len(alarm_list)):
if dates[alarm_list[i]][-1] != "kill9999&99":
date_type = "僅一次"
elif dates[alarm_list[i]] == ["1", "2", "3", "4", "5", "6", "0", "kill9999&99"]:
date_type = "每天"
elif dates[alarm_list[i]] == ["1", "2", "3", "4", "5", "kill9999&99"]:
date_type = "工作日"
else:
date_type = "自定義"
print(" {}:時間:{};響鈴次數:{};音樂:《{}》;".format(i + 1, alarm_list[i], date_type, songs[alarm_list[i]][
songs[alarm_list[i]].rfind(
"/") + 1:songs[
alarm_list[i]].rfind(".")]))
print()
delete = int(input(" 你的選擇:"))
alarm_list_undone.pop(delete - 1)
dates_undone_one.pop(delete - 1)
dates_undone_two.pop(delete - 1)
songs_undone_one.pop(delete - 1)
songs_undone_two.pop(delete - 1)
with open("alarm_list.txt", "w") as finding:
finding.writelines(alarm_list_undone)
with open("songs_one.txt", "w") as finding:
finding.writelines(songs_undone_one)
with open("songs_two.txt", "w") as finding:
finding.writelines(songs_undone_two)
with open("dates_one.txt", "w") as finding:
finding.writelines(dates_undone_one)
with open("dates_two.txt", "w") as finding:
finding.writelines(dates_undone_two)
finding = open("alarm_list.txt", "a")
finding.close()
finding = open("alarm_list.txt", "r")
alarm_list_undone = finding.readlines()
finding.close()
alarm_list = []
for i in alarm_list_undone:
alarm_list.append(i.replace("\n", ""))
finding = open("dates_one.txt", "a")
finding.close()
finding = open("dates_one.txt", "r")
dates_undone_one = finding.readlines()
finding.close()
finding = open("dates_two.txt", "a")
finding.close()
finding = open("dates_two.txt", "r")
dates_undone_two = finding.readlines()
finding.close()
dates = {}
for i in range(len(dates_undone_one)):
dates[dates_undone_one[i].replace("\n", "")] = eval(dates_undone_two[i].replace("\n", ""))
finding = open("songs_one.txt", "a")
finding.close()
finding = open("songs_one.txt", "r")
songs_undone_one = finding.readlines()
finding.close()
finding = open("songs_two.txt", "a")
finding.close()
finding = open("songs_two.txt", "r")
songs_undone_two = finding.readlines()
finding.close()
songs = {}
for i in range(len(songs_undone_two)):
try:
open(songs_undone_two[i].replace("\n", ""), "r")
except:
songs_undone_two[i] = all_songs_dict[all_songs[random.randint(0, len(all_songs) - 1)]] + "\n"
with open("songs_two.txt", "w") as finding:
finding.writelines(songs_undone_two)
for i in range(len(songs_undone_one)):
songs[songs_undone_one[i].replace("\n", "")] = songs_undone_two[i].replace("\n", "")
finding = open("alarm_list.txt", "r")
finder = finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("alarm_list.txt", "w") as finding:
finding.write(finder)
finding = open("dates_one.txt", "r")
finder = finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("dates_one.txt", "w") as finding:
finding.write(finder)
finding = open("dates_two.txt", "r")
finder = finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("dates_two.txt", "w") as finding:
finding.write(finder) finding = open("songs_one.txt", "r")
finder = finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("songs_one.txt", "w") as finding:
finding.write(finder)
finding = open("songs_two.txt", "r")
finder = finding.read()
try:
while finder[-1] == "\n":
finder = finder[:-1]
except:
while False:
print()
with open("songs_two.txt", "w") as finding:
finding.write(finder)
except:
while False:
print()
這個程序不能是pyw文件,而必須是py(因為它需要輸入與輸出)。我們需要將其和剛剛的響鈴程序放在同一個文件夾中,並對兩個程序分別創建一個快捷方式。然後,我們要將響鈴程序放入“啟動”文件夾(在C盤,名稱叫“StartUp”。它在我的電腦上路徑為“C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp”,不同電腦上路徑可能稍有不同,但搜索總是能找到的)。而另一個,這個設置程序的快捷方式,你可以放在桌面,方便打開程序。
之前項目需求要實現一個鬧鐘,github上找了半天發現都是很舊的代碼了,所以就准備自己寫一個,剛好最近在學習Swift,就用Swift寫了一個demo放在這裡:https://github.com/P ...
自己寫的鬧鐘, 只可以播放wav格式的音頻. import time import sys soundFile = 'sound.wav' not_executed = 1 def soundStar ...
https://www.zhihu.com/question/25874136 class test: l=[] def init(self): self.l=['1','2','7'] a1=tes ...
收集報警信息 鬧鈴時間,鬧鈴備注信息 鬧鈴引起系統變化的點: 1. Send Notification (正點鬧鐘能夠設置不發送) 2. Play audio 鬧鈴信息結構體 ClockInfo{ S ...
python擁有這種單獨起一個服務器監聽端口的能力,用標准庫的wsgiref就行. from wsgiref.simple_server import make_server def simple_a ...
如何建立一個高速的分布式計算平台?Parallel python此目的. Parallel Python(http://www.parallelpython.com/content/view/15/3 ...
前提條件:windows系統上安裝python 如果想把D:\asdm作為提供下載的目錄, 打開cmd然後cd命令進入該目錄:cd D:\asdm, 然後執行Python -m SimpleHTTPS ...
1.創建類,設置屬性和給屬性設定默認值,設置方法並訪問類的屬性: 2.利用類創建多個實例,以及調用類的方法的兩種辦法: 3.設置更新屬性的函數,並更新實例的屬性. class dog(object): ...
1,看了30多個視頻,是一些基本操作的.粗略的了解了語法,函數,循環,正則表達,將視頻內容全部敲入文本: 2,看了100頁的書,習題不太會,進展很慢.第五章10以後的題都沒做: 3,看C++的書,有點 ...
最近寫了一些工具,想到分享給同事時好麻煩,並且自己每次用也是需要打開pycharm這些工具,感覺很麻煩,因此想到打包,網上有些例子,照做後又摸索很久方成,索性記錄一下,以備不時之需. 主要參考:htt ...
之前在測試環境(centos7.2)上部署了openstack雲平台(完整部署CentOS7.2+OpenStack+kvm 雲平台環境(1)--基礎環境搭建),openstack在neutron組網 ...
HTML5 游戲開發是一個熱門的話題,開發人員和設計人員最近經常談論到.雖然不能迅速取代 Flash 的地位,但是 HTML5 憑借它的開放性和強大的編程能力,取代 Flash 是必然的趨勢.你會看到 ...
一.為什麼要格式化? 接著之前的文章-利用 ELK系統分析Nginx日志並對數據進行可視化展示.下面是http訪問的日志,裡面有一個字段,bytes 傳輸的字節,如下圖: 綠色框框內選中的就是本次請求 ...
1. label的mouseChildren屬性為true,但label本身是不需要監聽textfield的任何事件的, 個人猜測是為了給TextInput, TextArea用的,因為後兩者需要監聽 ...
1.下載java開發常用的IDE(Integrated Development Environment)--eclipse.http://www.eclipse.org/downloads/ 2.下載 ...
前言 我們都知道,API網關是工作在應用層上網關程序,為何要這樣設計呢,而不是將網關程序直接工作在傳輸層.或者網絡層等等更底層的環境呢?讓我們先來簡單的了解一下TCP/IP的五層模型. (圖片 ...
Write a function that reverses a string. The input string is given as an array of characters char[]. ...
Navicat for MySql 11.1.13 企業版 下載地址: 鏈接:https://pan.baidu.com/s/1N3ZQXNyx-W8D4AsuZdsMug 密碼:x0rd 第二個是N ...
一.yum服務器端配置1.安裝FTP軟件#yum install vsftpd #service vsftpd start#chkconfig --add vsftpd#chkconfig vsftp ...
首先是要安裝了中文輸入法,下面以搜狗為例. 2 從system settings 進入language support ,在keyboard input method system 中是看不到自己安裝 ...
Python code is automatically converted to other programming language code
If you will Python Code is aut
How to implement the connection to the dubbo interface (the registry is nacos, and the namespace needs to be passed) through Python?
Telnet cant be implemented, th