目录
一、题目
给定一个年份,判断这一年是否是闰年,如果是则输出yes,否则输出no。
输入格式
输入一个正整数 y,表示年份。
输出格式
输出一行。如果输入的年份是闰年则输出 yes,否则输出 no。
说明
当题目指定输出一个字符串作为结果,如本题的yes或者no,需要严格按照题目中给定的大小写,写错大小写将不得分。
闰年的定义:
1、若一个年份能被4整除,并且不能被100整除,根据闰年的规定,该年份是普通闰年。例如,2008年和2012年均能被4整除,并且不能被100整除,因此这两年都是普通闰年。
2、若一个年份能被400整除,无论其是否同时被4和100整除,它都是世纪闰年。例如,2000年是世纪闰年,因为它能被400整除。
因此,计算某一年是否为闰年,就可以直接根据这两种方法来判断。需要注意的是,能被100整除但不能被400整除的年份并不是闰年,比如1900年就不是闰年。
二、示例
输入示例1
1900
输出示例1
no
输入示例2
2016
输出示例2
yes
三、实现方法
1.整除定义法
直接根据题目中闰年的两种定义方法来判断,普通闰年、世纪闰年满足一个即为闰年
代码
year = int(input()) # 输入一个年份
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
print('yes')
else:
print('no')
2.calendar模块
语法
calendar.isleap(year)
python 的 calendar 模块提供了直接判断闰年的方法:其中的isleap()方法直接返回是否是闰年(True/False)
代码
import calendar
year = int(input())
if calendar.isleap(year):
print("yes")
else:
print("no")
3.datetime模块
思路
通过检查2月的最后一天是不是29日来确定闰年。
计算2月的最后一天:先定位到这一年的3月1日,减去一天,得到2月的最后一天。
判断闰年:2月的最后一天为29号则为闰年,否则不是闰年。
语法
datetime 是pyhton的内置库,用于处理日期(date)、时间(time)、时间间隔(timedetla)和时区(timezone)
datetime.date(year,month,day)
根据年、月、日创建日期 。
datetime.timedelta(days,seconds,microseconds,milliseconds,minutes,hours,weeks)
可灵活定义时间差 ,主要用于做日期/时间加减运算。
代码
import datetime # 导入 python 的 datetime库
# 计算2月的最后一天
year = int(input())
time_delta = datetime.timedelta(days = 1) # 定义时间变化量
dt = datetime.date(year = year ,month = 3,day = 1) # 表示输入年份的3月1号
res = dt - time_delta # 3月1日 - 1 天,得到2月的最后一天
# 判断闰年
if res.day == 29: # 如果这一年的2月有29天则为闰年
print('yes')
else:
print('no')
解释
因为date对象不能直接和整数相减,因此要创建一个时间差对象timedelta,表示1天,用于从3月1日减去1天,不使用而直接写dt - 1会报错。
四、总结
直接使用闰年判断逻辑比较高效。
calendar.isleap()简单直接,适合大多数场景,优先选择。
datetime模块利用日期计算间接判断闰年,比直接数学计算稍慢,适合需要日期运算的复杂逻辑,不过也可以认识到其中的一些用法。