3

我正在尝试使用 Python 计算从 1950 年到 2050 年每年 13 日星期五的数量(我知道,有点晚了)。我不熟悉要使用的任何日期/日历包。有什么想法吗?

4

5 回答 5

7

这有一个直接的解决方案。使用sum计算每月 13 日是星期五的次数:

>>> 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
于 2012-04-16T04:19:30.083 回答
4

datetime.date 类有一个weekday()函数,可以将星期几(从 0 开始索引)作为整数提供,所以 Friday 是 4。还有isoweekday()从 1 开始的索引天数,这取决于你喜欢哪个。

无论如何,一个简单的解决方案是:

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
于 2012-04-16T03:59:13.823 回答
0

是某种运动还是家庭作业?我隐约记得我已经解决了它。可以给个提示,我好像用过Calendar.itermonthdays2当然应该还有其他的方法可以解决。

于 2012-04-16T03:54:40.787 回答
0

听起来像家庭作业。提示(工作日 4 是星期五):

import datetime
print(datetime.datetime(1950,1,13).weekday())
于 2012-04-16T03:58:59.380 回答
0

虽然其他解决方案清晰简单,但以下解决方案更“日历主义”。您将需要该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

您会看到以下五个参数:取13 和(星期五)之间的rrule.rrule每一rrule.DAILY(天)。dtstartuntilbymonthdaybyweekdayrrule.FR

于 2012-04-16T05:09:34.990 回答