2013-03-02 4 views
1

왜 수행합니다왜 형식 오류가

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은 float이고 range은 완전히 정수를 필요로하기 때문입니다.

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

'INT (SQRT)가'아래 제곱근을 반올림 것을 명심 및 범위 '의 정지()'포함되지 않습니다

당신은 아마이 원하는. 여기에'int (sqrt) + 1'이 필요합니다. 그렇지 않으면 9가 소수로 간주됩니다. –

0

sqrt 유형 float이며, 따라서 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)