我正在尝试使用 Python 计算从 1950 年到 2050 年每年 13 日星期五的数量(我知道,有点晚了)。我不熟悉要使用的任何日期/日历包。有什么想法吗?
问问题
4063 次
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
(天)。dtstart
until
bymonthday
byweekday
rrule.FR
于 2012-04-16T05:09:34.990 回答