2016-05-17 106 views
-1

我正在做一个任务,我在这里做了一个名为Triangle的类,它需要三个方面并返回有关三角形的信息。具体来说,我试图计算三角形内的三个角度,但由于某种原因,我得到了所有角度的90度,这是不可能的。我已经翻遍了我的代码吨,但无法找到错误,并将不胜感激一些帮助。谢谢。余弦定律为三角形中的所有角度返回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,默认为整数的除法截断结果为整数,所以像5/2将等于2.在你的情况下,将双方的结果为零。

解决这个问题的最简单方法是在文件的最开始处执行from __future__ import division。这使得划分总是返回一个浮点数。

+0

谢谢您的完美运作。 –