[英]How do I Break a “while True” Loop With a Command?
我正在构建一个简单的计时器程序,当你告诉它时它应该关闭(使用 SpeechRecognition 模块),但到目前为止它只在听你的时候关闭,然后继续运行(它重复为“听,声音警报,重复”之类的方式)。
警报的 function 如下所示:
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
如果您还需要 function 用于“关闭”部分,这里是:
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'只从一个循环中逃脱; 你有两个嵌套循环。 因此,要脱离外循环,您需要在外循环上添加一个条件。 像这样,例如:
def alarms():
on = True
while on:
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):
on = False
print("hello")
break
现在,您正在检查警报是否仍然开启,而不是“当真”。 或者,由于这个 function 上面没有其他内容,您可以返回:
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")
return
这是一个有点烦人的问题,因为有时你想摆脱更复杂的嵌套循环,这样的修改并不总是那么实用; 你最终需要在外循环上额外添加一个“if not on: break”来进行检查。
为了解决这个问题,一些语言为您提供了“标记循环”或“中断”,以便您可以指定要转义的循环或要转义的循环数; 然而,如果这些被滥用会使代码不那么清晰,这就是为什么Python 不包含此功能的原因。
顺便说一句,您的第一个问题是由于您在响铃之前尝试录制 - 您可能希望在开始录制之前至少响一次。 对于第二个,想想内循环:你会一直呆在里面,对吧? 所以你会想要在里面录制,而不是在外面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.