我正在构建一个简单的计时器程序,它应该在你告诉它时关闭(使用SpeechRecognition模块),但到目前为止,它只在听你说话时关闭,然后继续运行(它以“听,声音报警,重复”的方式重复)
报警功能如下所示:
def alarms():
while True:
h1 = '08:00 AM'
h2 = '01:00 PM'
h3 = '08:30 PM'
t = time.strftime('%I:%M %p')
text = record_audio()
while t == h1 or t == h2 or t == h3:
ps('alarm.mp3')
time.sleep(1)
if turn_off(text):
print("hello") #This was just to test if it was listening to me
break
如果您还需要“关闭”部分的功能,请参见:
offWords = ['stop', 'will stop', 'i\'m here', 'turn off']
text = text.lower()
for phrase in offWords: #determines if what you said includes anything in the list
if phrase in text:
return True
return False
我还没有尝试过其他的方法,因为我还是一个初学者,但我觉得这里有比我现在做的更有效的方法。该程序还有两个其他错误:
我不知道他们是否与主要问题联系在一起,但为了安全起见,我将他们包括在内。我昨天花了一整天的时间试图解决这个问题,任何帮助都将不胜感激
这里的问题是“break”只从一个循环中逃逸;有两个嵌套循环。因此,要从外部循环中退出,需要在外部循环中添加一个条件。比如说:
现在,你要检查的不是“while true”,而是闹钟是否还在响。或者,由于此函数上没有其他内容,您可以返回:
这是一个有点烦人的问题,因为有时候你想逃离更复杂的嵌套循环,这样的修改并不总是那么实用;最后,您需要在外循环上附加一个“if not on:break”来进行检查
为了解决这个问题,一些语言为您提供了“带标签的循环”或“中断”,以便您可以指定要转义的循环或要转义的循环数;但是,如果滥用这些代码,代码就不那么清晰,这就是为什么Python did not include this feature
顺便说一句,你的第一个问题是因为你试图在闹钟响之前录音——你可能想在开始录音之前至少响一次。对于第二个问题,考虑一下内部循环:你会一直呆在它里面,对吗?所以你要在里面录音,而不是在外面
相关问题 更多 >
编程相关推荐