欧拉计划 #19,Python

Ksh*_*ogi 0 python date

我正在解决Project Euler #19

在 20 世纪(1901 年 1 月 1 日至 2000 年 12 月 31 日),每月的第一个星期日有多少个星期日?

这是代码:

months = { "January": 31,
        "February" : 28,
        "March" : 31,
        "April" : 30,
        "May" : 31,
        "June" : 30,
        "July" : 31,
        "August" : 31,
        "September" : 30,
        "October" : 31,
        "November" : 30,
        "December" : 31}

def countingSundays():
    day = 1
    sunday_count = 0

    for year in xrange(1901,2001):

        for m in months:

            day += months[m]
            if year % 4 == 0 and m == "February":
                day += 1
            if day % 7 == 0:
                sunday_count += 1

print "Sundays:", sunday_count
Run Code Online (Sandbox Code Playgroud)

程序的输出是 172,这是不正确的。我搜索的答案是 171。所以我想知道为什么我会得到额外的 1 个星期日?

int*_*jay 6

您正在迭代monthsdict,期望它按月份的顺序进行迭代,但 dict 没有排序,因此您可以按错误的顺序获取月份。

由于您实际上并不需要月份名称,因此您只需months列出月份长度即可。