You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

问题修复

错误原因

  1. 函数days_in_feb内部重复调用input(),但主程序已经读取过一次输入,导致运行时尝试读取不存在的输入,触发EOF错误。
  2. 闰年判断逻辑完全错误,原条件(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:40:33