0

为什么会这样:

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

4

2 回答 2

6

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

你可能想要这个:

for b in range(3, int(sqrt) + 1, 2):
于 2013-03-02T11:06:31.070 回答
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)
于 2013-03-02T11:06:06.473 回答