为什么会出现TypeError

时间:2013-03-02 11:04:21

标签: python python-3.x

为什么这样:

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

2 个答案:

答案 0 :(得分:6)

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

你可能想要这个:

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

答案 1 :(得分: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)