我试图创建一个迷你程序,该程序可以计算出多少个素数,直到某个数字(输入)
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'
我不知道如何纠正程序。
答案 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附加到列表素数。