你可能之前有见过有人使用Python语言构建闹钟,帮助他唤醒或提醒他一个重要的会议 。
这些都是很简单,没有任何智能,他们所做的只是播放你设置的闹钟音乐,或者随机选择一个YouTube视频或歌曲来播放 。
所以,让我们更上一层楼,做一些更聪明,更个性化的东西,它能理解你,帮助你更快更好地醒来 。
我们将在本文中构建的个性化闹钟系统将从过去的事件中学习并理解它们,以便在下一个闹钟中获得更好的性能 。每次使用它都会变得更好 。
它会记录用户关闭闹钟所花的时间(用户醒来所用的时间),并推荐有助于你更快醒来的闹铃调音 。
所以,让我们开始制造闹钟系统 。我们将在下面一步一步地建造它 。
导入所需的包第一步是将所需的包导入到Python代码中,以便在构建闹钟时使用它们 。
如果没有安装它们,你需要首先使用pip安装方法安装它们 。完成安装步骤后,继续将它们导入代码中 。
import datetimeimport osimport timeimport randomimport csvfrom pygame import mixerimport pandas as pdimport numpy as np
设置Tunes文件夹下一步是设置一个AlarmTunes文件夹,用户将在其中存储他选的闹铃 。
【用Python构建个性化智能闹钟】你可以设置闹铃的路径,我更喜欢Python脚本所在的文件夹创建一个新文件夹 。
我们只需要创建一次文件夹,所以我们需要检查该文件夹是否存在 。如果文件夹不存在,我们将创建一个 。
# 获取脚本的当前路径path = os.getcwd()# 设置闹铃路径alarm_path = path + 'Alarm_Tunes'# 如果没有,创建一个 。if not os.path.isdir(alarm_path):os.makedirs(alarm_path)
现在,在我们的文件夹被创建后,如果并且仅当文件夹当前是空的,我们将要求用户添加一些闹铃到文件夹,
# 要求用户在文件夹中添加一些闹铃 。while len(os.listdir(alarm_path))==0:print("No Alarm Tunes Present. Please add some tunes to the folder before proceeding.")confirm = input("Have you added songs? Press Y or N:t")if(confirm=="Y"):print("Good! Let's continue!")continueelse:continue
因此,如上所述,我们要求用户至少添加一个闹铃 。如果没有闹铃,发出警告并再次询问用户 。
创建CSV文件并定义helper函数现在,让我们在跳转到CSV文件创建部分之前定义一个helper函数 。
这个helper函数帮助我们计算两个Python列表之间的差异 。这将在以后的程序中使用 。
def List_diff(list1, list2):if len(list1)>=len(list2):return (list(set(list1) - set(list2)))else:return (list(set(list2) - set(list1)))
现在,我们已经编写了helper函数来计算两个列表之间的差异 。
如果csv文件还不存在的话,我们继续创建一个CSV文件,csv文件代表闹钟的参数 。
# 如果没有csv文件,则创建参数为零的列表if not os.path.isfile("tune_parameters.csv"):tune_list = os.listdir(alarm_path)tune_time = [60]*len(tune_list)tune_counter = [1]*len(tune_list)tune_avg = [60]*len(tune_list)tune_prob_rev = [1/len(tune_list)]*len(tune_list)tune_prob = [1/len(tune_list)]*len(tune_list)
所以,上面的代码检查我们是否有一个CSV文件存在,如果没有,我们将创建,正如你在上面看到的那样 。我们将在程序结束时将这些保存在CSV文件中 。
现在,让我们解释一下代码中每个列表的重要性 。让我们一个接一个地看 。
- tune_list:它存储闹铃的名称,它存储的是闹钟路径中存在的文件列表,从代码中可以看出 。
- tune_time:它存储用户关闭特定闹钟所用的时间总和,即用户唤醒所用的时间 。
- tune_counter:它会记录到现在为止每个闹铃的播放次数 。
- tune_avg:它计算用户在每次闹铃时唤醒和关闭闹钟所用的平均时间 。
- tune_prob_rev:它根据用户每次闹铃所需的平均时间计算一种反向概率 。
- tune_prob:这是每次播放闹铃的概率 。它会根据先前的结果不断更新,并使用tune_rev_prob计算 。
所以,我更倾向于假设这些闹铃都运行过一次,平均时间是60秒 。这样我们的工作就容易多了 。
现在,如果CSV文件已经存在,我们需要从CSV文件加载数据 。
此外,我们需要注意闹铃文件夹是否有任何变化 。用户可能添加了新的音乐或删除了一些现有的音乐 。因此,我们要么需要更新到我们的列表,要么从文件夹中删除 。
推荐阅读
- Windows也适用 国产Linux操作系统下可用的五款免费的CAD软件
- Excel高手常用的35个函数解析
- SpringBoot使用OpenCV总结
- 云南沱茶保存方法,普洱沱茶的饮用方法
- 蓝蝴蝶花茶的副作用,五花茶的副作用是什么
- 黄芪枸杞茶的功效,黄芪红茶的功效与作用怎么样
- SSH只能用于远程Linux主机?那说明你见识太小了
- 使用时间轮实现“延时任务”
- 黄金芽茶的功效与作用,莫干黄芽茶多少度冲好
- 喝罗布麻茶的副作用,罗布麻茶罗布麻茶的副作用