2016-09-30 116 views
0

以下のコードは、コードワーのチャレンジで、calculate the interior angles of a triangleと尋ねています。本当に控えめで、強引な力。私は、すべてのテストケースに合格するだけでなく、エラーを受信して​​います:エラー処理np.arccos()とPythonでの三角形の分類

-c:37: RuntimeWarning: invalid value encountered in arccos 
-c:38: RuntimeWarning: invalid value encountered in arccos 
-c:39: RuntimeWarning: invalid value encountered in arccos 

だから私は私の現在のチェックは前に述べたガンマ計算(に無効な値がキャッチされていない方法を把握しようとしています**にコード、以下)。

問題:

次の3つの所定の辺a、bおよびc(任意の順序で与えられる)と三角形の形を計算する必要があります。

すべての角度が90°未満であれば、この三角形は、急性および機能では、1つの角度が厳密に90°である場合には、この三角形が正しいと機能は2

の場合を返す必要があります。1.

を返す必要があります1つの角度90°以上では、この三角形は鈍角であり、3つの側面が三角形を形成することができない場合、関数は3

を返す必要があり、または1つの角度が(セグメントに三角形を回す)180°である - 関数が返す0

入力パラメータersは与えられた三角形の辺です。すべての入力値は、負でない浮動小数点数または整数値(またはその両方)です。

import numpy 
def triangle_type(a, b, c): 
    # Should return triangle type: 
    # 0 : if triangle cannot be made with given sides 
    # 1 : acute triangle 
    # 2 : right triangle 
    # 3 : obtuse triangle 

    # make sure all sides are non-zero 
    if a and b and c: 
     pass 
    else: 
     return 0 

    # triangle inequality test 
    if not ((c - b) < a < (c + b)) and ((a - c) < b < (a + c)) and ((b - a) < b < (b + a)): 
     return 0 
    elif a < b < c or b < a < c: 
     # print a,b,c 
     pass 
    elif b < c < a or c < b < a: 
     a, c = c, a 
     # print a, b, c 
    elif c < a < b or a < c < b: 
     b, c = c, b 
     # print a, b, c 
    else: 
     # print a, b, c 
     pass 

    # calculate the gammas **THIS IS WHERE I NEED HELD** 
    gamma_1 = numpy.rad2deg(numpy.arccos((a * a + b * b - c * c)/(2.0 * a * b))) 
    gamma_2 = numpy.rad2deg(numpy.arccos((c * c + a * a - b * b)/(2.0 * c * a))) 
    gamma_3 = numpy.rad2deg(numpy.arccos((b * b + c * c - a * a)/(2.0 * b * c))) 

    #check for a right angle 
    if (a * a + b * b == c * c) or (b * b + c * c == a * a) or (c * c + b * b == a * a): 
     return 2 
    #check acute angles 
    elif max(gamma_1, gamma_2, gamma_3) < 90.0: 
     return 1 
    #check obtuse 
    elif max(gamma_1, gamma_2, gamma_3) > 90.0: 
     return 3 
    else: 
     return 0 

私は、このようにエラーを生成、実際に電話をかけることなく、gamma値の妥当性を確認することができません。この問題を回避するにはどうすればよいですか?

いくつかのテストケースは

triangle_type(7,3,2) # Not triangle 0 
triangle_type(2,4,6) # Not triangle 0 
triangle_type(8,5,7) # Acute 1 
triangle_type(3,4,5) # Right 2 
triangle_type(7,12,8) # Obtuse 3 

されているが、これは決して完全なものでは - 私は見ることができない121回の他のテストがあります。

答えて

0

numpy.arccosに渡す値を確認する必要があります。 -1と1の間でなければなりません。しかし、浮動小数点計算のため、1より大きいか-1より小さくなる可能性があります。

関連する問題