Python闰年2月天数函数返回值异常问题求助
问题分析与解决
你的问题核心出在把print()的返回值赋值给了user_year,以及函数职责混淆:
print()函数的返回值永远是None,你把user_year赋值给它后,函数最终返回的就是None,不符合函数应返回有效结果的预期,因此触发报错。- 主程序里又调用
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
相关产品推荐
相关产品推荐

