闹钟的Python代码

新手上路,请多包涵

我正在编写一个 python 代码来实现一个闹钟,我将一些 YouTube 链接放在文本文件中,程序将读取该文件。我必须以任何格式设置时间,在那个特定时间程序将从保存在文件中的链接中随机选择一个链接并开始播放。但是在 if else 部分,我的程序陷入了无限循环。

任何人都可以在我做错的地方检查我的代码。

 import random
import time
import webbrowser

from datetime import datetime
import subprocess

lines = open("C:\Python_code\Links.txt").read().splitlines()
mylines = random.choice(lines)
print(mylines)

time_input = str(raw_input("Please enter the time in HH:MM:SS format: "))
current_date = str(raw_input("Please enter the date in YYYY/MM/DD format: "))
selected_time = datetime.strptime('%s %s'%(current_date, time_input),"%Y/%m/%d  %H:%M:%S")
print "Time selected: ",selected_time

while True:
  if selected_time == time.localtime():
      print "Alarm Now"
      webbrowser.open(mylines)
      break
  else:
      print "no alarm"

原文由 Sharmili Nag 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 481
1 个回答

您正在尝试在时间比较中比较苹果和橙子:

 >>> import time
>>> a=time.localtime()
>>> a
time.struct_time(tm_year=2016, tm_mon=11, tm_mday=11, tm_hour=12, tm_min=20, tm_sec=13, tm_wday=4, tm_yday=316, tm_isdst=0)
>>> type(a)
<type 'time.struct_time'>

>>> from datetime import datetime
>>> b=datetime.strptime('2016/11/11 12:20:13',"%Y/%m/%d  %H:%M:%S")
>>> b
datetime.datetime(2016, 11, 11, 12, 20, 13)
>>> type(b)
<type 'datetime.datetime'>

如果比较两种不同的类型,time.struct_time 和 datetime.datetime,即使这些对象中记录的时间相同,您也会发现它是 false。

 >>> a == b
False

如果将 struct_time 转换为日期时间,则比较将起作用:

 >>> datetime.fromtimestamp(time.mktime(a))
datetime.datetime(2016, 11, 11, 12, 20, 13)
>>> c=datetime.fromtimestamp(time.mktime(a))
>>> b==c
True
>>> type(c)
<type 'datetime.datetime'>

我建议不要循环并不断将当前时间与闹钟时间进行比较,而是使用 time.sleep() 函数。从您的闹钟时间中减去当前时间并睡眠该秒数。

原文由 leancz 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏