题目:
20 世纪(1901 年 1 月 1 日到 2000 年 12 月 31 日)一共有多少个星期日落在了当月的第一天?
以下是一些已知的信息,但是或许你需要自己做一些其他的调查。
1900 年 1 月 1 日是星期一。
30 天的月份有:4 月,6 月,9 月,11月。
此外的月份都是 31 天,当然 2 月除外。
2 月在闰年有 29 天,其他时候有 28 天。
年份可以被 4 整除的时候是闰年,但是不能被 400 整除的世纪年(100 的整数倍年)除外。
代码实现:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
以下是一些已知的信息,但是或许你需要自己做一些其他的调查。
1900 年 1 月 1 日是星期一。
30 天的月份有:4 月,6 月,9 月,11月。
此外的月份都是 31 天,当然 2 月除外。
2 月在闰年有 29 天,其他时候有 28 天。
年份可以被 4 整除的时候是闰年,但是不能被 400 整除的世纪年(100 的整数倍年)除外。
20 世纪(1901 年 1 月 1 日到 2000 年 12 月 31 日)一共有多少个星期日落在了当月的第一天?
"""
wekdate = 1 # 初始星期一
Date = [] # 变量Dtae,用于存储星期日在当月1号的日期
for year in range(1900, 2000):
for month in range(1, 13):
day = 1 # 每个月的日期,初始为1号
month_end = False # 是否当月最后一天,默认否
while month_end != True:
if month in [4, 6, 9, 11]: # 4, 6, 9, 11月每个月30天
if day == 30:
month_end = True
elif month == 2: # 2月在闰年29天, 平年28天
if year % 4 != 0 or (year % 400 != 0 and year % 100 == 0):
if day == 28:
month_end = True
else:
if day == 29:
month_end = True
else: # 1, 3, 5, 7, 8, 10, 12月,每个月31天
if day == 31:
month_end = True
if wekdate == 7 and day == 1: # 如果当月的1号是星期日,将日期存入Date
Date.append('{}-{}-{}'.format(year, month, day))
day += 1
if wekdate == 7:
wekdate = 1
else:
wekdate += 1
print(Date)
print('一共有{}个星期日在当月的1号'.format(len(Date)))
运行结果: