为什么此for循环会引发TypeError?

时间:2019-07-19 19:06:35

标签: python python-3.x

我正在编写一种方法,以numpy像素数组绘制一个完整的圆,而我只是不明白为什么会收到TypeError。我向高级人员表示歉意-我是一名新的Python程序员,最近从Java换班,但仍然对所有这些“定义变量数据类型不足”感到困惑。

class Image:

    def drawCircle(self, centerX, centerY, radius):
        sin45 = 0.70710678118                                               
        distance = radius/(2*sin45)
        for i in range(radius,distance,-1.0): ####This is the error line####
            j = math.sqrt(r*r - i*i)
            for k in range(-j, j, 1):
                self.writePixel(self.centerX - k, self.enterY + i)
                self.writePixel(self.centerX - k, self.enterY - i)
                self.writePixel(self.centerX + i, self.enterY + i)
                self.writePixel(self.centerX - i, self.enterY - i)

'''Testing the code'''
obj = Image()
obj.drawCircle(35.0, 35.0, 35.0)

此代码可能充满其他错误,但截至目前,我陷入了“ TypeError:'float'对象无法解释为整数”的问题。另外,为了节省空间,我省略了writePixel()的定义,只是假设它可以工作。谢谢!

3 个答案:

答案 0 :(得分:2)

更改:

for i in range(radius,distance,-1.0):

收件人:

for i in range(int(radius),int(distance),int(-1.0)):
#or
for i in range(int(radius),int(distance),-1):

请注意,这会将这些数字四舍五入,因此,如果需要十进制精度,则应考虑使用linspace中的numpy而不是range

这也只会解决TypeError,而不是说这会解决其他问题

答案 1 :(得分:0)

范围函数中的第三个参数应该是整数而不是浮点数。我想这是造成问题的原因。请尝试使用-1而不是-1.0,还将半径和距离转换为int。

答案 2 :(得分:-1)

在您的代码中,您正在使用变量r而不对其进行定义。

尝试使用int(math.sqrt())