python 闹钟在指定时间出现问题
Problems with python alarm at specified hours
我正在尝试为我的 类 制作一个 "alarm" 并且它会在某个时间到来时执行某些操作(在这种情况下它只是打印,我会在代码有效)并重复直到下一个 alarm.The 这里的问题是当我 运行 代码在它打印 it's time
之前 1 分钟,然后它到达警报时间并且它仍然打印相同而不是 not yet
.
我希望代码在 if 语句之后保持 运行ning。这是代码:
from datetime import datetime
import time
now = datetime.now()
current_time = now.strftime("%H:%M")
today = now.strftime("%A")
cn = "22:14"
ing ="21:23"
day = {0:"Monday", 1:"Tuesday", 2:"Wednesday"
, 3:"Thursday", 4:"Friday", 5:"Saturday", 6:"Sunday"}
def mday():
if (today == day[0]) and (current_time == cn):
print("its time")
time.sleep(1)
mday()
else:
print("not yet")
time.sleep(1)
mday()
mday()
您的代码的主要问题(为什么它根本不起作用)是您没有更新 today
和 current_time
变量的值。您在每次调用 mday()
时休眠一秒钟不会影响这些变量。您需要在 mday
.
的入口处更新它们
第二个问题是这里有无限递归。无限 loops 运行 永远,我想这就是你想要的。另一方面,无限递归只会用完堆栈,并使您的应用程序崩溃。您需要将递归函数 mday
转换为具有无限循环的函数。为此,将 mday
内的所有 if
语句置于一个永久循环内:(while True:
),以及
还从分支的末尾删除两个递归调用。您还可以从 if
中取出 sleep
调用 - 删除其中一个,并将另一个放在 else
块的内容之后:
from datetime import datetime
import time
cn = "22:14"
ing ="21:23"
day = {
0:"Monday",
1:"Tuesday",
2:"Wednesday",
3:"Thursday",
4:"Friday",
5:"Saturday",
6:"Sunday"
}
def mday():
while True:
# Update current time values
now = datetime.now()
current_time = now.strftime("%H:%M")
today = now.strftime("%A")
# Print alarm/no-alarm message
if (today == day[0]) and (current_time == cn):
print("its time")
else:
print("not yet")
time.sleep(1)
mday()
可以通过多种方式优化此代码,但以上将大致产生您想要的结果。
我正在尝试为我的 类 制作一个 "alarm" 并且它会在某个时间到来时执行某些操作(在这种情况下它只是打印,我会在代码有效)并重复直到下一个 alarm.The 这里的问题是当我 运行 代码在它打印 it's time
之前 1 分钟,然后它到达警报时间并且它仍然打印相同而不是 not yet
.
我希望代码在 if 语句之后保持 运行ning。这是代码:
from datetime import datetime
import time
now = datetime.now()
current_time = now.strftime("%H:%M")
today = now.strftime("%A")
cn = "22:14"
ing ="21:23"
day = {0:"Monday", 1:"Tuesday", 2:"Wednesday"
, 3:"Thursday", 4:"Friday", 5:"Saturday", 6:"Sunday"}
def mday():
if (today == day[0]) and (current_time == cn):
print("its time")
time.sleep(1)
mday()
else:
print("not yet")
time.sleep(1)
mday()
mday()
您的代码的主要问题(为什么它根本不起作用)是您没有更新 today
和 current_time
变量的值。您在每次调用 mday()
时休眠一秒钟不会影响这些变量。您需要在 mday
.
第二个问题是这里有无限递归。无限 loops 运行 永远,我想这就是你想要的。另一方面,无限递归只会用完堆栈,并使您的应用程序崩溃。您需要将递归函数 mday
转换为具有无限循环的函数。为此,将 mday
内的所有 if
语句置于一个永久循环内:(while True:
),以及
还从分支的末尾删除两个递归调用。您还可以从 if
中取出 sleep
调用 - 删除其中一个,并将另一个放在 else
块的内容之后:
from datetime import datetime
import time
cn = "22:14"
ing ="21:23"
day = {
0:"Monday",
1:"Tuesday",
2:"Wednesday",
3:"Thursday",
4:"Friday",
5:"Saturday",
6:"Sunday"
}
def mday():
while True:
# Update current time values
now = datetime.now()
current_time = now.strftime("%H:%M")
today = now.strftime("%A")
# Print alarm/no-alarm message
if (today == day[0]) and (current_time == cn):
print("its time")
else:
print("not yet")
time.sleep(1)
mday()
可以通过多种方式优化此代码,但以上将大致产生您想要的结果。