想实现一个简单的 Python 提醒喝水的算法

2019-04-18 23:57:43 +08:00
 douglas1997

设想:

1. 每天有 8 个在( 8 ~ 22 点)的随机时间点分布在这个时间段不同的小时,e.g. [9, 11, 13, 14, 16, 18, 19, 20]
2. 然后在这些时间点发送提醒消息

大家觉得怎么实现高效呢?我觉得如果先生成这 8 个时间点,再用一个 while 不断的阻塞 sleep&check 所有时间点很 naive,并且每天都要重复生成也很蠢。如何判断新的一天到来也是一个问题。

emmm,对这种算法不是很熟。求指教~

2006 次点击
所在节点    问与答
14 条回复
douglas1997
2019-04-19 00:08:54 +08:00
大佬都睡了吗 :(
pual
2019-04-19 00:41:23 +08:00
操作系统有时钟的 API, 注册时间断并监听
nodwang
2019-04-19 00:44:17 +08:00
我自己用 go 写了一个,就是你说的 naive 版本,
流程是:
1,开机启动,初始化 40 天查询是否工作日,存到 sqlite。

2,初始化一次当天和第 40+天,检查当天是否工作日,非工作日 sleep 1 小时,直到当天结束。

3,工作日:sleep 30 分钟 & check 时间是否在 9-12,13-18 之内 ,如果是 提醒 然后 sleep。

4,goto 2。

上面数字 30,40,9,12,13,18 都是启动时 flag 参数控制 ,初始化时顺便 抓了 bing 每日壁纸,windows 锁屏壁纸,新手 go 练手美滋滋
douglas1997
2019-04-19 00:57:52 +08:00
@pual 嗯看来还是一个离不开系统中断的程序。

@nodwang naive 版本好写一些。如果没有比较好的回复的话我就 Append 供其他人参考吧。
nanaw
2019-04-19 00:59:06 +08:00
每 2 小时无需获取时间:
x=y=0
while 1:
x=y;y=randint(1,60);sleep(60*60*2-120*x+120*y)
#action

定时任务 每天 7 点执行
分布不均匀的话再加 if
zouchtssn
2019-04-19 01:01:01 +08:00
at
xujunfu
2019-04-19 01:04:15 +08:00
你需要的是闹钟,把精力和思考用在刀刃上吧
douglas1997
2019-04-19 01:16:09 +08:00
@xujunfu 哈哈哈,是写给女票用的。每天微信提醒她喝水。
douglas1997
2019-04-19 01:17:56 +08:00
@nanaw 嗯,看来这种任务还是阻塞式的简单,我现在在写一个把每次阻塞时间拉到尽量最长的程序。
douglas1997
2019-04-19 01:39:40 +08:00
@zouchtssn 不用系统的,因为是随机的。
geelaw
2019-04-19 06:02:50 +08:00
用 Windows Task Scheduler 就行,自带随机延迟,你只需要写一个发送提醒的程序。
tcpdump
2019-04-19 09:46:49 +08:00
喝水都需要提醒?
c4f36e5766583218
2019-04-19 10:50:13 +08:00
多喝热水🌺🐔
AllenHua
2020-09-01 16:40:58 +08:00
最近刚好关注到这方面 哈哈哈

看到 12l 的 喝水都要提醒 瞬间笑了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/556616

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX