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

题目内容:

根据下列信息计算在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语句进行判断。
先计算出1901年到2000年每个月的第一天与1901年1月1号相差的天数,用这个天数对7取余,如果等于零,表明这一天是星期天(前提是题目给出的:1901年1月1号是星期一。由此推断1901年1月7号是星期天,同理,1901年1月14号、21号、28号都是星期天)。
方法二:
使用python中的calendar模块。调用monthcalendar函数,返回某个月以每一周为元素的序列。之后获得第一个元素(即第一周的日期排布),判断第1天出现的位置是否为6,即可判断每月第1天是否为星期天。

题目代码:

方法一

L = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]  #因为每一年的月份天数基本上都是固定的,直接使用数组表示,二月份默认28天,下面再用是否闰年判断
day = 0            
count = 0          
for year in range(1901, 2001):        #先判断闰年,以确定2月份的天数
    if(year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        L[1] = 29
    for month in range(1, 13):
        day += L[month - 1]
        if(day % 7 == 0):
            count += 1

print count

方法二


import calendar
count=0
for year in range(1901, 2001):
    for month in range(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值