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
相关产品推荐
相关产品推荐

