我正在解决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 个星期日?
您正在迭代monthsdict,期望它按月份的顺序进行迭代,但 dict 没有排序,因此您可以按错误的顺序获取月份。
由于您实际上并不需要月份名称,因此您只需months列出月份长度即可。