2013-03-02 65 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) 
相關問題