2017-10-03 9 views
0

タスクは、3つのパラメータ(a、b、c)を持つ関数があることです。 Cは常に最長です。 関数は、角度Cが直角であるかどうかを判断する必要があります。これは私のコードです:直角三角形の決定

import math 

def is_rightangled(a, b, c): 
    """ 
    >>> is_rightangled(3, 4, 5) 
    True 
    >>> is_rightangled(5, 12, 13) 
    True 
    >>> is_rightangled(8, 6, 10) 
    True 
    >>> is_rightangled(3, 4, 6) 
    False 
    >>> is_rightangled(1, 4, 6) 
    False 

    """ 
    A = math.acos((b**2 + c**2 - a**2)/(2 * b * c))*180/math.pi 
    B = math.acos((c**2 + a**2 - b**2)/(2 * c * a))*180/math.pi 

    angle = 180 - A - B 

    if angle == 90: 
     return True 
    else: return False 

これはdoctestではを使用しているとき、私が得るものです:

> ********************************************************************** File "/home/niel/Desktop/Session2/is_rightangled.py", line 13, in 
> is_rightangled.is_rightangled Failed example: 
>  is_rightangled(1, 4, 6) Exception raised: 
>  Traceback (most recent call last): 
>  File "/usr/lib/python3.4/doctest.py", line 1324, in __run 
>   compileflags, 1), test.globs) 
>  File "<doctest is_rightangled.is_rightangled[4]>", line 1, in <module> 
>   is_rightangled(1, 4, 6) 
>  File "/home/niel/Desktop/Session2/is_rightangled.py", line 17, in is_rightangled 
>   A = math.acos((b**2 + c**2 - a**2)/(2 * b * c))*180/math.pi 
>  ValueError: math domain error 
> ********************************************************************** 1 items had failures: 1 of 5 in is_rightangled.is_rightangled 
> ***Test Failed*** 1 failures. 

私は複数のソリューションを試してみましたが、常にエラーのいくつかの種類を取得します。

+0

なぜピタゴラスの式は直接ではないのですか? 'a ** 2 + b ** 2 == c ** 2'? – jrd1

+0

'acos()'の引数は '-1'と' 1'の間でなければなりません。 – Barmar

+2

これらの角度を実際に計算する必要はありません。ピタゴラスの定理を逆に使うことができます。 – user2357112

答えて

3
def is_rightangled(a, b, c): 
    return (b**2 + a**2 == c**2) 
+0

はい、そうです、私はそれを修正します... – Nik0

+0

これは整数で動作するはずです。浮動小数点数では、不正確な比較を使用する必要があります。 –

+0

@arsho:最初の質問から: "Cは常に最長です" – Nik0