2016-05-17 6 views
-1

私は三角形を取り、三角形についての情報を返すTriangleというクラスを作成する課題に取り組んでいます。具体的には、三角形内の3つの角度を計算しようとしていますが、何らかの理由ですべての角度に対して90度を取得しています。これは不可能です。私は何度も自分のコードを見直しましたが、間違いを見つけることができず、助けに感謝します。ありがとうございました。 5/2のようなものがゼロに辺結果を分割し、あなたのケースでは2に等しくなるよう余弦の法則は、三角形のすべての角度に対して90度を返しますか?

from math import acos, degrees, sqrt 
import turtle 

class Triangle: 

    def __init__(self, side_a=None, side_b=None, side_c=None): 

     self.side_a = side_a 
     self.side_b = side_b 
     self.side_c = side_c 

    def is_triangle(self): 
     return ((self.side_a + self.side_b) > self.side_c) \ 
       and ((self.side_a + self.side_c) > self.side_b) \ 
       and ((self.side_b +self.side_c) > self.side_a) 

    def perimeter(self): 
     if self.is_triangle(): 
      return self.side_a + self.side_b + self.side_c 
     else: 
      return None 

    def area(self): 
     if self.is_triangle(): 
      s = self.perimeter()/2 
      print s 
      return sqrt((s*(s-self.side_a)*(s-self.side_b)*(s-self.side_c))) 
     else: 
      return None 

    def a_angle(self): 
     if self.is_triangle(): 
      return degrees(acos((self.side_b**2 + self.side_c**2 - self.side_a**2)/(2*self.side_b*self.side_c))) 
     else: 
      return None 

    def b_angle(self): 
     if self.is_triangle(): 
      return degrees(acos((self.side_c**2 + self.side_a**2 - self.side_b**2)/(2*self.side_c*self.side_a))) 
     else: 
      return None 

    def c_angle(self): 
     if self.is_triangle(): 
      return degrees(acos((self.side_a**2 + self.side_b**2 - self.side_c**2)/(2*self.side_a*self.side_b))) 
     else: 
      return None 

    def angle(self): 
     return self.a_angle(), self.b_angle(), self.c_angle() 

    def __str__(self): 
     pass 






tri = Triangle(11, 7, 9) 
print tri.is_triangle() 
print tri.perimeter() 
print tri.area() 
print tri.a_angle() 
print tri.b_angle() 
print tri.c_angle() 
print tri.angle() 
+0

あなたはどのバージョンのPythonを使用していますか? – BrenBarn

+0

バージョンはPython 2.7です –

+0

あなたはそこにいくつかの重複を持っています。余弦ルールを別の関数に分解し、異なる長さをパラメータとして渡します。例えばdef angle_c(a、b、c):度を返します(acos(a ** 2 + b ** 2 - c ** 2)/(2 * a * b))) ' –

答えて

3

は、Python 2では、デフォルトで整数の除算は、整数に結果を切り捨て。

最も簡単な方法は、ファイルの最初にfrom __future__ import divisionを修正することです。これにより、除算は常に浮動小数点数を返します。

+0

これは完璧に働きました。 –

関連する問題