2

プログラミング初心者なので何が悪いのかわかりません。助けてください

from math import atan2, pi
x = int(input("value of x"))
y = int(input("value of y"))
r = (x**2 + y**2) ** 0.5
ang = atan2(y/x)
print("Hypotenuse is", r, "angle is", ang)
4

2 に答える 2

4

Python には、2 つのアークタンジェント関数がatanありtanます。ただし、atan22 つの引数を取ります。あなたの場合、両方のカテティを知っているので、2引数関数を使用することもできますatan2:

ang = atan2(y, x)

あるいは、次のように書くこともできます

ang = atan(y / x)

の理論的根拠は、が 0 のatan2場合でも正しく機能することです。axを使用すると発生します。atan(y / x)ZeroDivisionError: float division by zero

さらに、atanは -π/2 ... +π/2 の間の角度のみを与えることができますが、とatan2の両方の符号を知っているため、値が 4 つの象限のどれに該当するかを知ることができます。その値の範囲は -π から +π です。もちろん、負の幅または高さの三角形はありません...yx

于 2016-08-21T22:28:11.133 に答える
2

そのエラーの理由は、atan22 つの引数が必要なことです。観察:

>>> from math import atan, atan2
>>> atan(2)
1.1071487177940904
>>> atan2(4, 2)
1.1071487177940904

がゼロ atan(y/x)の場合は機能しませんが、 引き続き正常に機能することに注意してください。xatan2(y, x)

>>> atan(4/0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> atan2(4, 0)
1.5707963267948966
于 2016-08-21T22:27:29.140 に答える