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

Python筛选全偶位数字报错TypeError: 'int' object is not iterable求助

报错原因

报错行l = [str(x) for x in i]中的i是range(1000,3001)生成的整数类型,Python中整数无法直接被迭代遍历,必须先转为字符串才能逐个获取每一位数字。
除此之外原代码还存在其他逻辑问题:

  • 标记变量t没有在每次遍历新数字时重置为True,一旦遇到一个含奇数位的数字,后续所有数字都会被判定为不合格
  • 结果追加逻辑错误,原代码将单个数字位q追加到结果列表,而非完整的符合要求的数字
  • 最终输出格式不符合要求,需要为逗号分隔的单行序列,而非列表格式
修复后的基础可运行代码
num = input("Enter a number to check for even digit. Skip if you want to see 1000-3000: ")
if num:
    all_even = True
    for x in num:
        if int(x) % 2 != 0:
            all_even = False
            break
    print("It has all even digits!" if all_even else "It contains odd digits.")
else:
    print_list = []
    for i in range(1000, 3001):
        all_even = True
        # 先转字符串再遍历每一位
        for d in str(i):
            if int(d) % 2 != 0:
                all_even = False
                break
        if all_even:
            print_list.append(str(i))
    # 按要求逗号分隔输出
    print(','.join(print_list))
无嵌套循环的优化实现

可以用Python内置的all()函数替代显式嵌套循环,all()会自动遍历迭代器并校验所有元素是否满足条件,代码更简洁高效:

def is_all_even(n):
    # 一行逻辑实现全偶数位校验,无显式循环
    return all(int(d) % 2 == 0 for d in str(n))

num = input("Enter a number to check for even digit. Skip if you want to see 1000-3000: ")
if num:
    print("It has all even digits!" if is_all_even(num) else "It contains odd digits.")
else:
    # 列表推导式直接生成结果,无显式嵌套循环
    res = [str(i) for i in range(1000, 3001) if is_all_even(i)]
    print(','.join(res))

额外优化点:1000~3000范围内千位只能是1、2、3,其中1和3都是奇数,所以符合要求的数字千位只能是2,你可以把遍历范围缩小到range(2000, 2999, 2)进一步提升运行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:45:03