设计一个平面三角形类,以三条边长为它的三个实例属性,拥有如下实例方法: 计算面积、计算周长、计算夹角、判断直角三角形、判断等腰三角形、判断等边三角形、判断锐角三角形、判断钝角三角形,并考虑相应的异常!制作几个实例来验证代码的正确性!
时间: 2023-12-23 15:03:28 浏览: 33
好的,我来设计一个平面三角形类,代码如下:
```python
import math
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
area = math.sqrt(s * (s - self.a) * (s - self.b) * (s - self.c))
return area
def perimeter(self):
return self.a + self.b + self.c
def angle(self):
cos_a = (self.b ** 2 + self.c ** 2 - self.a ** 2) / (2 * self.b * self.c)
cos_b = (self.a ** 2 + self.c ** 2 - self.b ** 2) / (2 * self.a * self.c)
cos_c = (self.a ** 2 + self.b ** 2 - self.c ** 2) / (2 * self.a * self.b)
angle_a = math.degrees(math.acos(cos_a))
angle_b = math.degrees(math.acos(cos_b))
angle_c = math.degrees(math.acos(cos_c))
return angle_a, angle_b, angle_c
def is_right_angle(self):
sides = [self.a, self.b, self.c]
sides.sort()
return sides[0] ** 2 + sides[1] ** 2 == sides[2] ** 2
def is_isosceles(self):
return self.a == self.b or self.b == self.c or self.a == self.c
def is_equilateral(self):
return self.a == self.b and self.b == self.c
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())
```
这个类有三个实例属性 a、b、c,分别表示三角形的三条边长。它有 7 个实例方法,分别计算面积、周长、夹角,判断直角三角形、等腰三角形、等边三角形、锐角三角形、钝角三角形。其中,计算面积的方法使用海伦公式,计算夹角的方法使用余弦定理。
接下来,我来制作几个实例来验证代码的正确性。例如,我们可以创建一个以 3、4、5 为边长的直角三角形,并调用它的各种方法:
```python
t = Triangle(3, 4, 5)
print(t.area()) # 6.0
print(t.perimeter()) # 12
print(t.angle()) # (36.86989764584402, 53.13010235415598, 90.0)
print(t.is_right_angle()) # True
print(t.is_isosceles()) # False
print(t.is_equilateral()) # False
print(t.is_acute()) # True
print(t.is_obtuse()) # False
```
我们也可以创建一个以 1、2、3 为边长的非三角形,并捕获异常:
```python
try:
t = Triangle(1, 2, 3)
except ValueError as e:
print(e) # 边长不符合三角形法则
```
这个类还可以用于其它的三角形,比如等边三角形:
```python
t = Triangle(5, 5, 5)
print(t.area()) # 10.825317547305483
print(t.perimeter()) # 15
print(t.angle()) # (60.0, 60.0, 60.0)
print(t.is_right_angle()) # False
print(t.is_isosceles()) # True
print(t.is_equilateral()) # True
print(t.is_acute()) # True
print(t.is_obtuse()) # False
```
这个类可以帮助我们方便地计算各种三角形的属性,避免手动计算错误。