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()

您的代码的主要问题(为什么它根本不起作用)是您没有更新 todaycurrent_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()

可以通过多种方式优化此代码,但以上将大致产生您想要的结果。