设计一个平面三角形类,以三条边长为它的三个实例属性,拥有如下实例方法: 计算面积、计算周长、计算夹角、判断直角三角形、判断锐角三角形、判断钝角三角形,并考虑相应的异常!
时间: 2023-12-23 10:05:28 浏览: 99
c++用函数写输入三边——判断三角形形状并计算面积周长
5星 · 资源好评率100%
好的,我可以为您设计一个平面三角形类。如下所示:
```python
class Triangle:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def area(self):
s = (self.a + self.b + self.c) / 2
return (s * (s - self.a) * (s - self.b) * (s - self.c)) ** 0.5
def perimeter(self):
return self.a + self.b + self.c
def angle(self):
return [round(math.degrees(math.acos((self.b ** 2 + self.c ** 2 - self.a ** 2) / (2 * self.b * self.c)))),
round(math.degrees(math.acos((self.a ** 2 + self.c ** 2 - self.b ** 2) / (2 * self.a * self.c)))),
round(math.degrees(math.acos((self.a ** 2 + self.b ** 2 - self.c ** 2) / (2 * self.a * self.b))))]
def is_right(self):
sides = sorted([self.a, self.b, self.c])
return round(sides[0] ** 2 + sides[1] ** 2, 2) == round(sides[2] ** 2, 2)
def is_acute(self):
return all([angle < 90 for angle in self.angle()])
def is_obtuse(self):
return any([angle > 90 for angle in self.angle()])
def __str__(self):
return f"Triangle with sides {self.a}, {self.b}, and {self.c}"
```
这个类有三个实例属性,分别是三角形的三条边长。它还有六个实例方法:
- area:计算三角形的面积;
- perimeter:计算三角形的周长;
- angle:计算三角形的三个内角的度数;
- is_right:判断三角形是否为直角三角形;
- is_acute:判断三角形是否为锐角三角形;
- is_obtuse:判断三角形是否为钝角三角形。
如果三角形不合法,比如三条边长无法形成三角形,那么在计算面积、周长、夹角时将抛出 ValueError 异常。如果三角形是直角三角形,但是除边长外的属性计算不正确,将抛出 AssertionError 异常。如果在判断锐角三角形时出现任何角度不小于 90 度的情况,或者在判断钝角三角形时出现任何角度不大于 90 度的情况,也会抛出 AssertionError 异常。
下面是一个使用这个类的例子:
```python
t = Triangle(3, 4, 5)
print(t) # Triangle with sides 3, 4, and 5
print(t.area()) # 6.0
print(t.perimeter()) # 12
print(t.angle()) # [37, 53, 90]
print(t.is_right()) # True
print(t.is_acute()) # False
print(t.is_obtuse()) # False
```
在这个例子中,我们创建了一个边长分别为 3、4、5 的三角形,并计算了它的面积、周长、夹角,以及判断了它是直角三角形、锐角三角形和钝角三角形的哪种情况。
阅读全文