整数和范围之间的模误差?

时间:2018-07-23 08:22:38

标签: python int range typeerror

我试图创建一个迷你程序,该程序可以计算出多少个素数,直到某个数字(输入)

def count_primes(num):
for i in range(num + 1):
    primes = [2]
    if i % range(2,i) != 0:
        primes.append(i)

return len(primes)

运行程序时,出现错误:

TypeError: unsupported operand type(s) for %: 'int' and 'range'

我不知道如何纠正程序。

3 个答案:

答案 0 :(得分:0)

问题出在下面一行

i % range(2,i)

您要尝试的是在整数和范围之间应用模数。默认情况下未定义。

您可以通过重载__mod__(a, b)来实现。但是,默认情况下,您可以在两个int或float之间进行此操作。

答案 1 :(得分:0)

问题从这里开始

  

i%range(2,i)

变量i是一个整数。 range(2,i)是列表还是生成器,具体取决于您使用的python版本。

您无法获得将数字除以列表/函数的限制。

答案 2 :(得分:0)

该错误告诉您不能将运算符与类型为int和range的模数运算符一起使用。

我认为列表理解可以为您提供帮助,如果您不知道它是什么,Wikipedia可以为您提供理论上的帮助(https://en.wikipedia.org/wiki/List_comprehension)和Python.org方面的实用工具(https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions)。

您应该尝试以下操作:

def count_primes(num):
    primes=[]
    for i in range(2,num+1):
        if len([i%n for n in range(1,i+1) if i%n==0])==2:
            primes.append(i)
    return len(primes)

此代码使用列表推导来计算i的除数,如果该数字为2,它将i附加到列表素数。