2013-03-02 67 views
1

为什么会这样:为什么会有一个TypeError

def p3(x): 
     primes = [2] 
     for a in range(3, x, 2): 
      sqrt = a ** 0.5 
      for b in range(3, sqrt, 2): 
       if a % b == 0: 
        break 
      if a % b != 0: 
       primes.append(a) 
     return primes 
    print(p3(19)) 

回报这样的:

TypeError: 'float' object cannot be interpreted as an integer, line 5 

是什么意思?我怎么纠正呢?
由于提前,
LewisC

回答

6

因为sqrt是一个浮点数,并且range需要严格整数。

你可能想这样的:

for b in range(3, int(sqrt) + 1, 2): 
+1

请记住,'INT(开方)'将全面平方根下来,和'范围停止()不包含'。这里需要'int(sqrt)+ 1'。否则,9将被视为素数。 – 2013-03-02 12:31:20

0

sqrtfloat类型的,因此不能与range()使用:

>>> range(1, 2.0) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'float' object cannot be interpreted as an integer 

要修正,将其转换为整数:

sqrt = int(a ** 0.5) 
相关问题