根据日期显示任务1-5

时间:2012-04-01 18:00:53

标签: python schedule

我只是一个15岁的小孩在玩蟒蛇,我真的不太了解它。我希望我的描述足够透彻。

所以,我有5个'任务',并且根据它的日期,我希望它可以完成任务。

(星期日 - 任务1,星期一 - 任务2,......然后星期五它将返回任务1,依此类推)

我将在2012年4月1日星期日作出初始日期。

我可以用python显示当前日期:

import datetime
from time import strftime 
print strftime("%A, %b %d %Y")

但这就是我自己真正能做到的:/

任何人都可以帮助我让它显示“任务”,具体取决于我打开程序的日期吗?  我知道如何定义事物,if和while语句以及简单的东西,如果它有帮助......谢谢 (对不起,如果答案已经在另一篇文章或其他内容..)

1 个答案:

答案 0 :(得分:2)

不确定。因此,您可以从文档中读取strftime采用格式和可选的第二个参数,这是打印的时间。时间默认为localtime()。所以,从那开始:

now = localtime()
print now

localtime()返回一个struct_time对象,在此处记录:http://docs.python.org/library/time.html#time.struct_time。你可以看到它包含你想要的信息:它的第六个字段是tm_wday,"范围[0,6],星期一是0。"

现在你可以索引到一个任务字典(但是你代表那些,我现在假设为字符串,但它们可能是函数或其他任何东西)。也许是这样的:

tasks = {
    0: "Stuff to do on Monday.",
    1: "Stuff to do on Tuesday.",
    2: "Stuff to do on Wednesday.",
}

print tasks.get(localtime().tm_wday, "Nothing doing.")

哇,那是什么?

我们使用特殊语法{}创建了一个字典,映射了为struct_time定义的工作日数字,并将其编入索引,打印我们发现的任何内容。但是,如果没有找到任何结果,我们就会打印出#34;什么也没做。"这在dict类的文档中进行了解释:http://docs.python.org/library/stdtypes.html#dict - get()是一个获取键和可选第二个值的方法,如果找不到键,则返回默认值。如果你在某些日子里没有任何事情可做,但在那些日子里不想提出错误,这很有用。

修改

好的,所以我现在明白你想从今天开始(2012年4月1日,注意2012年4月1日是模棱两可的,因为欧洲人写的日期与美国人不同)。今天你要完成任务1,明天2,从现在开始的七天你已经完成任务3。

这听起来像模(余数)运算符%的工作。每当你想基于一组可能更大的整数(例如日历天)循环一些整数集(例如你的任务)时,模运算可能是有用的。在这种情况下,你基本上需要这样的东西:

tasks = [ 'Task 1', 'Task 2', 'Task 3', 'Task 4', 'Task 5' ]
print tasks[calendar_day % len(tasks)] # len(tasks) is 5

只要calendar_day是一个每天递增1的数字,这将使用模运算索引到任务列表中,这样你就可以从第一个开始,逐步到最后一个,然后回到第一个,等等。

如何确定calendar_day?好吧,我们之前看到的tm_yday字段struct_time看起来很有用 - 它是一年中的一天,从1到366(闰年,另有365)。所以:

tasks = [ 'Task 1', 'Task 2', 'Task 3', 'Task 4', 'Task 5' ]
print tasks[localtime().tm_yday % len(tasks)]

今天实际上是第92天,92%5是2,Python使用从零开始的索引,因此上面将选择今天的任务3。如果您真的希望今天成为任务1,只需添加适当的固定偏移量:

tasks = [ 'Task 1', 'Task 2', 'Task 3', 'Task 4', 'Task 5' ]
print tasks[(localtime().tm_yday - 2) % len(tasks)]

但是如果你想要完美的结果,你可能会发现366并不能被5整除,所以在闰年之后你会看到一个"跳跃"在1月1日的任务列表中。如果您的任务列表具有不同的长度,那么当年份发生变化时,您可能会更频繁地遇到问题。在实践中以精确的方式处理时间是一项相当困难的任务,如果您关心这一详细程度,我会邀请您打开关于此特定问题的新问题(并在评论中链接到此处)