计算在1901年1月1日至2000年12月31日间共有多少个星期天落在每月的第一天上

最近在MOOC上学习Python,遇到一个日期计算的问题,现在来整理一下↓


题目描述

根据下列信息计算在1901年1月1日至2000年12月31日间共有多少个星期天落在每月的第一天上?


a)1900.1.1是星期一

b)1月,3月,5月,7月,8月,10月和12月是31天

c)4月,6月,9月和11月是30天

d)2月是28天,在闰年是29天

e)公元年数能被4整除且又不能被100整除是闰年

f)能直接被400整除也是闰年


输出格式

一个正整数


题目分析

  • 第一种方法就是用if语句判断相关条件进行计算。
  • 第二种方法比较简洁,即使用python中的calendar模块。调用monthcalendar函数,返回某个月以每一周为元素的序列。之后获得第一个元素(即第一周的日期排布),判断第1天出现的位置是否为6,即可判断每月第1天是否为星期天。
  • 以2017年7月为例,该月日期分布如下图所示:

  • 该月以每一周为元素的序列如下:[[0, 0, 0, 0, 0, 1, 2], [3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16], [17, 18, 19, 20, 21, 22, 23], [24, 25, 26, 27, 28, 29, 30], [31, 0, 0, 0, 0, 0, 0]]。根据上面方法进行判断,该月第一周是[0, 0, 0, 0, 0, 1, 2],1所在的位置是5而不是6(注意,从0开始计数),即落在星期六而非星期天,因此该月的第一天就不是星期天。

题目代码

方法1:

daySum=1
count=0
for year in range(1900,2001):
    for month in range(1,13):
        if month==1 or month==3 or month==5 or month==7 or month==8 or month==10 or month==12:
            day=31
        elif month==4 or month==6 or month==9 or month==11:
            day=30
        elif month==2:
            if(year%400==0)or(year%4==0 and year%100==0):
                day=29
            else:
                day=28
        daySum+=day
        if daySum%7==0 and year>1900:
            count+=1
print count

方法2:

import calendar
count=0
for year in xrange(1901,2001):
    for month in xrange(1,13):
            if calendar.monthcalendar(year,month)[0].index(1) == 6:
                count+=1
print count

相关参考

http://www.cnblogs.com/hongten/archive/2013/08/07/hongten_python_calendar.html


  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值