私は三角形を取り、三角形についての情報を返す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()
あなたはどのバージョンのPythonを使用していますか? – BrenBarn
バージョンはPython 2.7です –
あなたはそこにいくつかの重複を持っています。余弦ルールを別の関数に分解し、異なる長さをパラメータとして渡します。例えばdef angle_c(a、b、c):度を返します(acos(a ** 2 + b ** 2 - c ** 2)/(2 * a * b))) ' –