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

Python闰年2月天数函数返回值异常问题求助

问题分析与解决

你的问题核心出在把print()的返回值赋值给了user_year,以及函数职责混淆:

  1. print()函数的返回值永远是None,你把user_year赋值给它后,函数最终返回的就是None,不符合函数应返回有效结果的预期,因此触发报错。
  2. 主程序里又调用print(days_in_feb(user_year)),等于重复输出:先执行函数内部的print打印内容,再打印函数返回的None,首次运行看似正常其实是输出了两次内容。

修正方案一:让函数返回描述字符串,主程序负责打印

把函数内部的print改成return,直接返回要输出的字符串,主程序统一打印结果:

def days_in_feb(user_year):
    if user_year % 100 == 0:
        if user_year % 400 == 0:
            return f'{user_year} has 29 days in February.'
        else:
            return f'{user_year} has 28 days in February.'
    else:
        if user_year % 4 == 0:
            return f'{user_year} has 29 days in February.'
        else:
            return f'{user_year} has 28 days in February.'
    
if __name__ == '__main__':
    user_year = int(input())
    print(days_in_feb(user_year))

修正方案二:函数只返回天数,主程序组合输出(更推荐)

让函数专注于计算二月天数,输出逻辑交给主程序,职责更清晰:

def days_in_feb(user_year):
    if user_year % 100 == 0:
        return 29 if user_year % 400 == 0 else 28
    else:
        return 29 if user_year % 4 == 0 else 28
    
if __name__ == '__main__':
    user_year = int(input())
    days = days_in_feb(user_year)
    print(f'{user_year} has {days} days in February.')

临时修复(不推荐)

如果只想快速解决报错,也可以保留函数内部的print,但主程序不要打印函数返回值:

def days_in_feb(user_year):
    if user_year % 100 == 0:
        if user_year % 400 == 0:
            print(f'{user_year} has 29 days in February.')
        else:
            print(f'{user_year} has 28 days in February.')
    else:
        if user_year % 4 == 0:
            print(f'{user_year} has 29 days in February.')
        else:
            print(f'{user_year} has 28 days in February.')
    return None
    
if __name__ == '__main__':
    user_year = int(input())
    days_in_feb(user_year)

内容的提问来源于stack exchange,提问作者Carson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:20:42