我已经在这里读过类似的问题,但没有任何关系。 这个python代码有什么问题..它一直返回这个错误信息:
TypeError:需要浮点数
Beta = float( math.atan([(2 - yr)/(1 - xr)]))
print Beta;
请注意: xr = 2,yr = 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中使用/
时要小心;如果yr
和xr
是整数,您将获得 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()
而失败。另外,由于Y
和X
部分是分开的,math.atan2()
可以从Y
和X
的符号确定反正切的正确象限。