繁体   English   中英

为什么该项目Euler#19代码无法正常工作? (蟒蛇)

[英]Why doesn't this project euler #19 code work? (Python)

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

1900年1月1日是星期一。 30天为9月,4月,6月和11月。 其余所有三十一个,仅保存二月,即二十八个,无论风雨无阻。 在leap年,是二十九。 any年发生在任何年份,该年份平均可以除以4,但除非是400可以除以一个世纪,否则就不会发生。在二十世纪的1月1日(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)

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

谢谢 :)

我不了解算法和您的代码。 但是我可以这样说。

it generates different answers everytime I use

可能您忘记了在执行result = sum(main())之前初始化monthyearday

如果使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM