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

Python代码报错‘unsupported operand type(s) for %: 'int' and 'range'’原因咨询

错误原因分析及修正方案

核心报错原因

你遇到的unsupported operand type(s) for %: 'int' and 'range'错误,是因为代码中写了num % range(2, num)——取模运算符%要求两边都是数值类型,但range()返回的是一个序列对象,不能直接和整数做取模运算,这是完全错误的写法。

其他隐藏问题

除了这个直接报错,代码还有几个逻辑错误:

  • 变量混淆:循环变量num是range(get_value)生成的索引(从0开始),但你输入的数字存在numbers变量里,判断时却用了num,等于在判断循环索引是不是质数,完全搞错了目标对象。
  • 质数判断逻辑错误:质数的定义是大于1的自然数,且不能被2到其平方根之间的任何整数整除。原代码既没处理小于2的数,也没正确遍历需要检查的除数。
  • 输出逻辑错误:else分支的"None of your number is not prime"语义混乱,而且每次循环只处理一个输入数字,不能一上来就否定所有数。

修正后的代码

get_value = int(input("How many numbers do you want to enter? "))
for count in range(get_value):
    number = int(input(f"Please enter your {count + 1} number: "))
    # 处理小于2的情况,直接判定不是质数
    if number <= 1:
        print(f"The number {number} is not prime")
        continue
    # 默认假设是质数,遍历检查除数
    is_prime = True
    # 遍历到平方根即可,优化性能
    for divisor in range(2, int(number ** 0.5) + 1):
        if number % divisor == 0:
            is_prime = False
            break
    # 根据检查结果输出
    if is_prime:
        print(f"The number {number} is prime")
    else:
        print(f"The number {number} is not prime")

代码改动说明

  • 把循环变量改成count,避免和输入的number混淆;
  • 先判断输入数字是否小于等于1,直接排除非质数;
  • 用is_prime标记位来记录检查结果,遍历2到数字平方根之间的所有数,只要能被整除就标记为非质数并终止循环;
  • 针对每个输入数字单独输出正确的判断结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 15:42:37