Python练习题:实现20 世纪(1901 年 1 月 1 日到 2000 年 12 月 31 日)一共有多少个星期日落在了当月的第一天?

题目:

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)))

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值