如何修复Python闰年判断程序的EOFError及逻辑错误?
问题描述
现行公历平年有365天,而地球绕太阳公转实际时长更长,为弥补时间差,每4年设置一个闰年,闰年有366天(2月增加1天为2月29日)。判断闰年的条件如下:
- 年份必须能被4整除
- 若为整百年份(如1700、1800),则必须能被400整除;因此1700、1800都不是闰年
示例:1600、1712、2016都是闰年。
请编写程序,输入年份并判断该年份2月的天数。
- 输入示例1:1712
- 输出示例1:
1712 has 29 days in February. - 输入示例2:1913
- 输出示例2:
1913 has 28 days in February.
要求:必须定义并调用函数def days_in_feb(user_year),该函数需返回输入年份对应的2月天数。
我的代码
def days_in_feb(user_year): user_year = int(input()) return user_year if __name__ == '__main__': user_year = int(input()) if (user_year % 4 == 0) or (user_year % 100 != 0): print(f'{user_year} has 29 days in February.') else: print(f'{user_year} has 28 days in February.')
遇到的错误
EOFError: EOF when reading a line
问题修复
错误原因
- 函数
days_in_feb内部重复调用input(),但主程序已经读取过一次输入,导致运行时尝试读取不存在的输入,触发EOF错误。 - 闰年判断逻辑完全错误,原条件
(user_year % 4 == 0) or (user_year % 100 != 0)不符合题目给定的规则。
修复后的代码
def days_in_feb(user_year): # 严格按照题目规则判断闰年 if (user_year % 4 == 0 and user_year % 100 != 0) or (user_year % 400 == 0): return 29 else: return 28 if __name__ == '__main__': user_year = int(input()) feb_days = days_in_feb(user_year) print(f'{user_year} has {feb_days} days in February.')
修复说明
- 移除函数内的
input()调用,函数直接使用传入的参数,避免重复读取输入。 - 修正闰年判断逻辑:能被4整除但不能被100整除,或者能被400整除的年份为闰年。
- 函数返回28或29,主程序调用函数后输出结果,完全符合题目要求的函数定义规范。
内容的提问来源于stack exchange,提问作者TiesTheMarsh
相关产品推荐
相关产品推荐

