<p>你的问题是,你从来没有更新'现在',所以你的时钟将永远轮询。您可以修改while循环以获得每个循环的时间。你知道吗</p>
<p>但你应该尽量避免投票。它效率低下,如果系统中发生了其他事情,您可能会错过窗口。在你的情况下这不太可能,因为你只需要在一分钟内击中。。。除非夏令时来临,你完全错过了。你知道吗</p>
<p>既然你已经有了小时和分钟,而且它们很容易转换成秒,那就睡个好觉吧</p>
<pre><code>if userInput == "set alarm":
espeak.synth("What hour would you like to set the alarm?")
hour = raw_input("What hour would you like to set the alarm?: ")
espeak.synth("What minute would you like to set the alarm?")
minute = raw_input("What minute would tou like to set the alarm?: ")
espeak.synth("What would you like me to say after the alarm?")
message = raw_input("What would you like me to say after the alarm?: ")
# setup alarm for today but if its already past, go to tomorrow
now = datetime.datetime.now()
nominate = datetime.datetime(now.year, now.month, now.day,
int(hour), int(minute))
if nominate < now:
nominate += datetime.timedelta(days=1)
time.sleep((nominate - now).seconds)
os.system("omxplayer takemetochurch.mp3")
espeak.synth(message)
print(message)
</code></pre>