1 问题描述
闰年(Leap Year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的,补上时间差的年份为闰年,闰年共有366天
请输入一个年份,判断输出是否为闰年
2 解题思路
闰年是历法中的名词,分为普通闰年和世纪闰年。
1582年以来设置闰年的规则:
普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)。
世纪闰年:公历年份是整百数的,必须是400的倍数才是闰年(如1900年不是闰年,2000年是闰年)。
也就是说
普通闰年:能被4整除,不能被100整除
世纪闰年:能被400整除
在Python中,判断一个数能否被另一个数整除,可用取模(%)的算法;判断年份是否为闰年可用if条件语句
3 解题方法
方法一
year = int(input("输入一个年份: ")) if year % 4 == 0: if year % 100 == 0: if year % 400 == 0: print(f"{year} 年是世纪闰年") # 整百年能被400整除的是闰年 else: print(f"{year} 年不是闰年") else: print(f"{year} 年是普通闰年") # 非整百年能被4整除的为闰年 else: print(f"{year} 年不是闰年")View Code
第1行: 用input函数请用户输入一个年份,int函数将input()的字符串转换成整型,并赋值给变量year
第3行: 判断该年份能否被4整除,不能被4整除,转到第11行,输出该年不是闰年
第4行: 若能被4整除,则继续判断该年份能否被100整除,不能被100整除,转到第9行,输出该年是普通闰年
第5-8行: 若能被100整除,继续判断该年能否被400整除,若能被400整除,则为世纪闰年,不能被400整除,则不是闰年
在这里用到了f-string的方法格式化字符串,f是“格式化(format)”的意思,如f"Hello {somevar}",这种f、引号和{}的组合相当于告诉Python:“嘿!这是一个格式化字符串,把这些变量放到那几个位置”。
第1期-九九乘法表 (opens new window)中我们同样讲解了用format的方法来格式化字符串,忘记了的小伙伴可以查看哦~
方法二
year = int(input("输入一个年份: ")) if year % 4 == 0 and year % 100 != 0: print(f"{year} 年是普通闰年") elif year % 400 == 0: print(f"{year} 年是世纪闰年") else: print(f"{year} 年不是闰年")View Code
第1行: 创建变量year,用input()输入年份为其赋值
第3-8行: 用if...elif...else语句进行判断。若该年份可以整除4,但不能整除100,则为普通闰年;若该年份可以整除400,则为世纪闰年;否则,该年份不是闰年
方法三
year = int(input("输入一个年份: ")) if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: print(f"{year} 年是闰年") else: print(f"{year} 年不是闰年")View Code
第1行: 创建变量year,用input()输入年份为其赋值
第3-6行: 将判断普通闰年和世纪闰年的方法合并,当该年份能被4整除且不能被100整除或能被400整除时,为闰年,否则不是闰年