之前我做的程序,一个使用了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_twotry: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 Listenerpygame.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,songswhile 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_twotry: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 Listenerpygame.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,songswhile 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 = Falsefor i in alarm_list:if i == set_time:have_it = Truetry: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 = 0for i in all_songs:num += 1print(" " + str(num) + ":《" + i + "》")num += 1print(" " + 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”,不同电脑上路径可能稍有不同,但搜索总是能找到的)。而另一个,这个设置程序的快捷方式,你可以放在桌面,方便打开程序。

最后: 可以在公众号:伤心的辣条 ! 自行领取一份216页软件测试工程师面试宝典文档资料【免费的】。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

我推荐一个【Python自动化测试交流群:746506216】,大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,助你快速进阶Python自动化测试/测试开发,走向高薪之路。

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!

Python:一个闹钟相关推荐

  1. python自动化--如何用10行Python代码调一个闹钟 #电脑调闹钟

    python自动化--如何用10行Python代码写一个闹钟 前言: 文末彩蛋--轻松一刻 更多关于Python的知识请加关注哟~~.若需联系博主请私信或者加博主联系方式:       QQ:1542 ...

  2. python做一个闹钟软件下载_Python编写一个闹钟功能

    Python编写一个闹钟功能 音频文件放入和.py文件同级的目录下 import winsound # 导入此模块实现声音播放功能 import time # 导入此模块,获取当前时间 # 提示用户设 ...

  3. python写小程序-用python编写一个闹钟小程序

    今天看到了一个闹钟的视频,于是想到了不如自己也编写一个.让我们先来理一下思路,界面用tkinter编辑,主要是其他的GUI也没用过,datetime获取本地时间...... 1.好的,思路理完了,让我 ...

  4. python编程100个小程序-用python编写一个闹钟小程序

    今天看到了一个闹钟的视频,于是想到了不如自己也编写一个.让我们先来理一下思路,界面用tkinter编辑,主要是其他的GUI也没用过,datetime获取本地时间...... 1.好的,思路理完了,让我 ...

  5. python实现闹钟功能

    哈喽,今天分享一下用Python实现闹钟功能.最终效果是当你设置一个时间,比如:17:27,当电脑时间达到你设置的时间后,会自动打开Groove 音乐,播放你指定的音乐,此时程序已经break了,你只 ...

  6. Win7系统便签怎样设置一个闹钟提醒

    Win7系统便签怎么设置一个闹钟提醒呢?在便签上设置提醒事项,还可以确定任务完成时间,让每一项任务都在规定时间内完成,杜绝拖延快速完成工作.想要在便签上设置提醒,首先要有一款会提醒的便签,还要了解在该 ...

  7. Python一个月实训记录

    文章目录 Python一个月实训 0701 0702 0703 0706 0707 0708 0709 0710 0713 1.爬虫介绍 1.1 大数据时代 1.2 什么爬虫? 1.3 爬虫如何爬取网 ...

  8. Java实验05-使用JavaSwing制作一个闹钟(播放mp3文件,修改properties文件)

    一个比较简单的swing程序,关于swing的一点基础在我的java游戏项目中有.需要修改的自行修改吧,当前只支持设置一个闹钟,可以保存设置的闹钟,闹钟响起后50s自动关闭,就不花时间完善了. 文章目 ...

  9. python工程师一个月多少钱-python一个月后

    广告关闭 2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品.未来,我们一起乘风破浪,创造无限可能. 对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握 python ...

最新文章

  1. java反射po转vo_三步走使用Dozer (Do,Po,Vo转换工具)
  2. C#里调用带输出参数的存储过程
  3. 以太坊是什么 - 以太坊开发入门指南
  4. 第二阶段冲刺-个人总结09
  5. sql长整型_SQL 性能优化梳理
  6. 物联网IoT接入技术分类以及华为OC平台特性
  7. java如何添加自定义的图片_java代码将图片加上自定义水印 -4
  8. MATLAB生成正弦波
  9. java长连接心跳包_socket中的短连接与长连接,心跳包示例详解
  10. Git客户端Mac版:SmartGit
  11. 国外企业级区块链 联盟链
  12. 高质量病毒——暴风一号(BoyFine)代码.vbs
  13. 牛客网在线编程Javascript输入输出
  14. 微信公众号开发详细过程(亲手总结)
  15. 为什么相敬如宾是对的?
  16. Python 一个漂亮的音乐节奏可视化方案
  17. 通过ssh tunnel从外网访问内网kali
  18. MIPI通讯的初理解
  19. scrapy爬虫 出现10054错误 远程主机强迫关闭了一个现有的连接
  20. UE4之Control Rig

热门文章

  1. thunderbird(雷鸟)企业邮件每次启动重复收到同一份邮件解决方法
  2. 胡适致毕业生:在不健全的中国,如何不堕落?
  3. 动态规划——背包问题(Knapsack Problem)入门
  4. julia 学习_与Julia和合子一起学习异或
  5. Oracle培训总结
  6. 【实战】Unity3d实战之Unity3d网络游戏实战篇(11):消息分发
  7. 一个大龄青年的新正电工技术上岸之旅
  8. 修改DISCUZ支持又拍云缩略图
  9. android开发必备日志打印工具类
  10. 国产数字源表在三极管性能测试上面的应用