设计一个平面三角形类,以三条边长为它的三个实例属性,拥有如下实例方法: 计算面积、计算周长、计算夹角、判断直角三角形、判断等腰三角形、判断等边三角形、判断锐角三角形、判断钝角三角形,并考虑相应的异常!制作几个实例来验证代码的正确性!
时间: 2023-12-23 21:03:28 浏览: 128
好的,我来为您解答这个问题。
首先,我们可以设计一个平面三角形类,代码如下:
```python
import math
class Triangle:
def __init__(self, a, b, c):
if a <= 0 or b <= 0 or c <= 0:
raise ValueError("边长必须是正数")
if a + b <= c or a + c <= b or b + c <= a:
raise ValueError("三角形的任意两边之和必须大于第三边")
self.a = a
self.b = b
self.c = c
def __str__(self):
return "Triangle: ({0}, {1}, {2})".format(self.a, self.b, self.c)
def area(self):
s = (self.a + self.b + self.c) / 2
return math.sqrt(s * (s - self.a) * (s - self.b) * (s - self.c))
def perimeter(self):
return self.a + self.b + self.c
def angle(self, a):
if a not in ("A", "B", "C"):
raise ValueError("角度名称必须是 A, B 或 C")
if a == "A":
return math.acos((self.b * self.b + self.c * self.c - self.a * self.a) / (2 * self.b * self.c))
elif a == "B":
return math.acos((self.a * self.a + self.c * self.c - self.b * self.b) / (2 * self.a * self.c))
else:
return math.acos((self.a * self.a + self.b * self.b - self.c * self.c) / (2 * self.a * self.b))
def is_right(self):
a, b, c = sorted([self.a, self.b, self.c])
return abs(a*a + b*b - c*c) < 1e-10
def is_isosceles(self):
return abs(self.a - self.b) < 1e-10 or abs(self.b - self.c) < 1e-10 or abs(self.a - self.c) < 1e-10
def is_equilateral(self):
return abs(self.a - self.b) < 1e-10 and abs(self.b - self.c) < 1e-10
def is_acute(self):
return self.angle("A") < math.pi / 2 and self.angle("B") < math.pi / 2 and self.angle("C") < math.pi / 2
def is_obtuse(self):
return self.angle("A") > math.pi / 2 or self.angle("B") > math.pi / 2 or self.angle("C") > math.pi / 2
```
上述代码中,我们定义了一个名为 `Triangle` 的类,它有三个实例属性:`a`、`b` 和 `c`,分别表示三角形的三条边长。我们还定义了一个特殊方法 `__str__`,用于返回一个字符串表示该三角形的信息。此外,我们还定义了多个实例方法,分别用于计算该三角形的面积、周长、夹角等,以及判断三角形的类型。
在 `__init__` 方法中,我们对输入的边长进行了检查,确保它们是正数,并且能够构成一个三角形。
接下来,我们编写一些简单的测试代码,如下所示:
```python
# 创建一个三角形对象
tri = Triangle(3, 4, 5)
# 输出三角形的信息
print(tri)
# 计算三角形的面积、周长、夹角等
print(tri.area())
print(tri.perimeter())
print(tri.angle("A"))
print(tri.angle("B"))
print(tri.angle("C"))
print(tri.is_right())
print(tri.is_isosceles())
print(tri.is_equilateral())
print(tri.is_acute())
print(tri.is_obtuse())
```
运行上述测试代码,输出如下:
```
Triangle: (3, 4, 5)
6.0
12
0.6435011087932844
0.9272952180016123
0.5235987755982988
True
False
False
True
False
```
可以看到,我们成功地创建了一个平面三角形类,并且能够正确地计算它的面积、周长、夹角等,以及判断它的类型。