它一直返回TypeError:需要一个float

时间:2015-02-09 13:41:33

标签: python floating-point

我已经在这里读过类似的问题,但没有任何关系。 这个python代码有什么问题..它一直返回这个错误信息:

TypeError:需要浮点数

Beta = float( math.atan([(2 - yr)/(1 - xr)]))
print Beta;

请注意: xr = 2,yr = 2是在代码的前一行

之前预定义的

2 个答案:

答案 0 :(得分:6)

您正在传递列表

[(2 - yr)/(1 - xr)]

那不是float,它是一个包含一个元素的列表。删除方括号:

Beta = float( math.atan((2 - yr) / (1 - xr)))

演示:

>>> import math
>>> xr, yr = 3, 4
>>> math.atan([(2 - yr)/(1 - xr)])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: a float is required
>>> math.atan((2 - yr)/(1 - xr))
0.7853981633974483

在Python 2中使用/时要小心;如果yrxr是整数,您将获得 floor divison 。请参阅How can I force division to be floating point? Division keeps rounding down to 0了解相关方法。

答案 1 :(得分:0)

在标准数学符号中,方括号[]可以像圆括号()一样用于分组,但它们不像Python(或大多数其他编程语言)那样工作。在Python中,方括号用于表示列表。正如Martijn所说,math.atan()函数需要一个float参数,而不是列表。

但是,使用math.atan2()函数通常很多更好,该函数接受两个参数,比如

math.atan2(delta_y, delta_x)

而不是

math.atan(delta_y / delta_x)

math.atan2()的优势在于您可以执行math.atan2(delta_y, 0)之类的操作,这些操作会因math.atan()而失败。另外,由于YX部分是分开的,math.atan2()可以从YX的符号确定反正切的正确象限。