我只是一个15岁的小孩在玩蟒蛇,我真的不太了解它。我希望我的描述足够透彻。
所以,我有5个'任务',并且根据它的日期,我希望它可以完成任务。
(星期日 - 任务1,星期一 - 任务2,......然后星期五它将返回任务1,依此类推)
我将在2012年4月1日星期日作出初始日期。
我可以用python显示当前日期:
import datetime
from time import strftime
print strftime("%A, %b %d %Y")
但这就是我自己真正能做到的:/
任何人都可以帮助我让它显示“任务”,具体取决于我打开程序的日期吗? 我知道如何定义事物,if和while语句以及简单的东西,如果它有帮助......谢谢 (对不起,如果答案已经在另一篇文章或其他内容..)
答案 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日的任务列表中。如果您的任务列表具有不同的长度,那么当年份发生变化时,您可能会更频繁地遇到问题。在实践中以精确的方式处理时间是一项相当困难的任务,如果您关心这一详细程度,我会邀请您打开关于此特定问题的新问题(并在评论中链接到此处)