<input id="ohw05"></input>
  • <table id="ohw05"><menu id="ohw05"></menu></table>
  • <var id="ohw05"></var>
  • <code id="ohw05"><cite id="ohw05"></cite></code>
    <label id="ohw05"></label>
    <var id="ohw05"></var>
  • 側邊欄

    Python:一個鬧鐘

    隨著一個《霍格沃茨:一段校史》風格的大字(呃,這字好像并不大……)標題的出現,無聊的我沒事干,又開始整活了~

    之前我做的程序,一個使用了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”,不同電腦上路徑可能稍有不同,但搜索總是能找到的)。而另一個,這個設置程序的快捷方式,你可以放在桌面,方便打開程序。

    posted @ 2022-06-28 12:42  GodForever  閱讀(286)  評論(5編輯  收藏  舉報
    国产美女a做受大片观看