用Python计算日期
我试图用Python计算1950-2050年间每年第13个星期五的数量(我知道,有点晚了)。我不熟悉任何要使用的日期/日历包。有什么想法吗?这是某种练习还是家庭作业?我隐约记得我已经解决了它。我可以给你一个提示,我似乎用了当然也应该有其他方法来解决它。听起来像是家庭作业。提示(工作日4是星期五):用Python计算日期,python,date,calendar,Python,Date,Calendar,我试图用Python计算1950-2050年间每年第13个星期五的数量(我知道,有点晚了)。我不熟悉任何要使用的日期/日历包。有什么想法吗?这是某种练习还是家庭作业?我隐约记得我已经解决了它。我可以给你一个提示,我似乎用了当然也应该有其他方法来解决它。听起来像是家庭作业。提示(工作日4是星期五): datetime.date类有一个weekday()函数,它将一周中的某一天(从0开始索引)作为整数,因此星期五是4。还有isoweekday() 无论如何,一个简单的解决方案是: friday13
datetime.date类有一个
weekday()
函数,它将一周中的某一天(从0开始索引)作为整数,因此星期五是4。还有isoweekday()
无论如何,一个简单的解决方案是:
friday13 = 0
months = range(1,13)
for year in xrange(1950, 2051):
for month in months:
if date(year, month, 13).weekday() == 4:
friday13 += 1
这有一个直接的解决办法。使用sum计算每月13日为星期五的次数:
import datetime
print(datetime.datetime(1950,1,13).weekday())
>>> from datetime import datetime # the function datetime from module datetime
>>> sum(datetime(year, month, 13).weekday() == 4
for year in range(1950, 2051) for month in range(1,13))
174
虽然其他解决方案清晰简单,但下面的解决方案更“日历化”。您需要dateutil
软件包,该软件包可作为软件包安装:
from datetime import datetime
from dateutil import rrule
fr13s = list(rrule.rrule(rrule.DAILY,
dtstart=datetime(1950,1,13),
until=datetime(2050,12,13),
bymonthday=[13],
byweekday=[rrule.FR]))
# this returns a list of 174 datetime objects
你可以看到rrule.rrule
的这五个参数:在dtstart
和之间的每一个rrule.day
(天)取dtstart
和直到其中bymonthday
是13,而byweekday
是rrule.FR
(星期五)。试着不要做作业——只是出于好奇。我相信月份=范围(0,13)
可以简化为months=range(13)
@NolenRoyalty不是我的家庭作业,在我上大学的时候,我们身边有很多年长的学生,他们拿着薪水在身边帮忙。不过在射程上有一点不错。。。我通常出于习惯而非常明确,但这并不真正需要0
。这不是你的家庭作业,而是相关的。而且我相信这实际上会抛出一个错误,你需要范围(1,13),因为月份必须至少是1…@NolenRoyalty:-P你在这个月的事情上是对的。应该从1开始。我已经在Python中看到了几个月的迭代错误。比如从3月1日往后跳一个月。好的,从技术上讲不是迭代,但我只是说,在几个月内依赖时间操纵是不可靠的,没有固定的定义组成“1个月”的时间段,因此在所有情况下都没有完全正确地实施。。。