为什么这个项目euler#19代码不起作用? (蟒蛇)

时间:2014-03-15 07:42:48

标签: python

我为Python中的项目euler#19问题编写了一个代码,它并没有给我正确的答案。 问题是:您获得了以下信息,但您可能更愿意为自己做一些研究。

1900年1月1日是星期一。 九月三十天, 四月,六月和十一月。 其余的都有三十一个, 仅拯救二月, 其中有二十八,风雨无阻。 在闰年,二十九岁。 闰年发生在任何一年,可被4整除,但除非可被400整除,否则不会在一个世纪上。 在二十世纪的第一个月(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,
     'November': 30,
     'December': 31
     }

years = range(1900, 2001)    

day = 1

def main():
    global day
    for year in years:
        if year % 4 == 0 or year % 400 == 0:
            months['February'] = 29
        else:
            months['February'] = 28

        for month in months:
            if months[month] == 31:
                day += 31 % 7 +1
            while day > 7:
                day = day - 7
            if day == 1:
                yield day


result = sum(main())
print (result)

每次使用时它都会产生不同的答案,

谢谢:)

2 个答案:

答案 0 :(得分:0)

我不懂算法和你的代码。但我可以说这个。

it generates different answers everytime I use

在执行month之前,您可能忘记初始化yeardayresult = sum(main())

答案 1 :(得分:0)

如果您使用dateutil库:

,解决方案会更简单
In [16]: from datetime import datetime
In [17]: from dateutil.relativedelta import relativedelta

In [18]: current = datetime(1901, 1, 1)
In [19]: end = datetime(2001, 1, 1)
In [20]: ans = 0

In [21]: while current < end:
   ....:     if current.weekday() == 6:
   ....:         ans += 1                          
   ....:     current += relativedelta(months=1)
   ....:     

In [22]: ans
Out[22]: 171