2016-05-17 25 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

謝謝您的完美運作。 –