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

Python中对range对象取余触发TypeError错误的原因是什么?

报错原因
  • range 是Python内置的惰性序列类型,本身仅存储起始值、终止值、步长三个核心参数,不会预先生成所有序列元素,官方没有为该类型定义和整数执行取余(%)运算的逻辑,因此直接对整个range对象和整数做取余操作会触发类型不支持的报错。
  • 你代码中(range(1,n))%2!=0的写法是想直接过滤出range里的奇数,这个语法不成立,运算符不能跨不支持的类型执行运算。
正确实现方式

有两种常见的修改方案:

方案1:调整range步长(性能最优)

直接把range的步长设为2,从1开始就可以直接生成所有奇数序列,不需要额外过滤:

n = int(input())

for x in range(1, n, 2):
    if x % 3 == 0 and x % 5 == 0:
        print("SoloLearn")
    elif x % 3 == 0:
        print("Solo")
    elif x % 5 == 0:
        print("Learn")

方案2:用生成器表达式自定义过滤

如果过滤规则更复杂,可以遍历range的每个元素做判断筛选:

n = int(input())

for x in (i for i in range(1, n) if i % 2 != 0):
    if x % 3 == 0 and x % 5 == 0:
        print("SoloLearn")
    elif x % 3 == 0:
        print("Solo")
    elif x % 5 == 0:
        print("Learn")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:30:04