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

ZyBooks闰年判断实验报错:TypeError: int类型不可迭代

问题排查:TypeError: argument of type 'int' is not iterable 解决方法

你的判断没错,错误确实出在if '00' in year这一行。

错误原因

本地测试时,你通过input()获取的是字符串类型的年份,所以'00' in year可以正常检查字符串中是否包含"00";但ZyBooks的测试用例大概率直接传入了整数类型的年份参数,这时'00' in year会尝试遍历整数对象——而int类型是不可迭代的,因此抛出TypeError。

另外,用字符串匹配判断世纪年本身也有漏洞:比如年份2000转为字符串是"2000"能匹配,但如果测试用例传入整数2000,或者传入不规范的字符串格式(如"02000"),都会导致判断失效。

修复方案:用数学方法判断世纪年(更可靠)

把世纪年的判断逻辑从字符串匹配改为数学运算,同时统一处理函数参数的类型,确保兼容字符串和整数输入:

def days_in_feb(year):
    # 统一将输入转为整数,兼容字符串/整数类型的参数
    year_num = int(year)
    # 世纪年判断:能被100整除的年份即为世纪年
    is_century_year = year_num % 100 == 0
    
    if is_century_year:
        # 世纪年需能被400整除才是闰年
        return year_num % 400 == 0
    else:
        # 非世纪年能被4整除就是闰年
        return year_num % 4 == 0

if __name__ == '__main__':
    year = input()
    is_leap_year = days_in_feb(year)
    # 简化输出逻辑
    print(f'{year} has 29 days in February.' if is_leap_year else f'{year} has 28 days in February.')

优化点说明

  1. 类型兼容:先将参数转为整数,不管测试用例传入字符串还是整数,都能正常处理,彻底避免类型错误。
  2. 逻辑准确:用year_num % 100 == 0判断世纪年,比字符串匹配更符合公历定义(世纪年是能被100整除的年份),不会出现字符串格式导致的误判。
  3. 代码简化:合并冗余的返回语句,输出逻辑用三元表达式简化,可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:30:46