题目内容:
根据下列信息计算在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