设计一个平面三角形类,以三条边长为它的三个实例属性,拥有如下实例方法: 计算面积、计算周长、计算夹角、判断直角三角形、判断等腰三角形、判断等边三角形、判断锐角三角形、判断钝角三角形,并考虑相应的异常!制作几个实例来验证代码的正确性!
时间: 2023-12-23 08:03:28 浏览: 76
好的,我可以帮你设计一个平面三角形类,代码如下:
```python
import math
class Triangle:
def __init__(self, a, b, c):
if a <= 0 or b <= 0 or c <= 0:
raise ValueError("三角形边长必须大于0!")
if a + b <= c or a + c <= b or b + c <= a:
raise ValueError("三角形两边之和必须大于第三边!")
self.a = a
self.b = b
self.c = c
def area(self):
p = (self.a + self.b + self.c) / 2
return math.sqrt(p * (p - self.a) * (p - self.b) * (p - self.c))
def perimeter(self):
return self.a + self.b + self.c
def angle(self):
cosA = (self.b ** 2 + self.c ** 2 - self.a ** 2) / (2 * self.b * self.c)
cosB = (self.a ** 2 + self.c ** 2 - self.b ** 2) / (2 * self.a * self.c)
cosC = (self.a ** 2 + self.b ** 2 - self.c ** 2) / (2 * self.a * self.b)
A = math.degrees(math.acos(cosA))
B = math.degrees(math.acos(cosB))
C = math.degrees(math.acos(cosC))
return (A, B, C)
def is_right(self):
sides = [self.a, self.b, self.c]
sides.sort()
return abs(sides[0] ** 2 + sides[1] ** 2 - sides[2] ** 2) < 1e-6
def is_isosceles(self):
return self.a == self.b or self.a == self.c or self.b == self.c
def is_equilateral(self):
return self.a == self.b and self.a == self.c
def is_acute(self):
cosA = (self.b ** 2 + self.c ** 2 - self.a ** 2) / (2 * self.b * self.c)
cosB = (self.a ** 2 + self.c ** 2 - self.b ** 2) / (2 * self.a * self.c)
cosC = (self.a ** 2 + self.b ** 2 - self.c ** 2) / (2 * self.a * self.b)
return cosA > 0 and cosB > 0 and cosC > 0
def is_obtuse(self):
cosA = (self.b ** 2 + self.c ** 2 - self.a ** 2) / (2 * self.b * self.c)
cosB = (self.a ** 2 + self.c ** 2 - self.b ** 2) / (2 * self.a * self.c)
cosC = (self.a ** 2 + self.b ** 2 - self.c ** 2) / (2 * self.a * self.b)
return cosA < 0 or cosB < 0 or cosC < 0
```
在这个类中,我们先进行了一些异常检查,确保三条边长度都大于零,而且满足三角形两边之和大于第三边的条件。然后,我们实现了计算面积、计算周长、计算夹角、判断直角三角形、判断等腰三角形、判断等边三角形、判断锐角三角形、判断钝角三角形等实例方法。
我们可以创建一些实例来测试这个类,例如:
```python
t1 = Triangle(3, 4, 5)
print(t1.area()) # 6.0
print(t1.perimeter()) # 12
print(t1.angle()) # (36.86989764584402, 53.13010235415598, 90.0)
print(t1.is_right()) # True
print(t1.is_isosceles()) # False
print(t1.is_equilateral()) # False
print(t1.is_acute()) # False
print(t1.is_obtuse()) # True
t2 = Triangle(2, 2, 3)
print(t2.area()) # 1.984313483298443
print(t2.perimeter()) # 7
print(t2.angle()) # (45.0, 45.0, 90.0)
print(t2.is_right()) # True
print(t2.is_isosceles()) # True
print(t2.is_equilateral()) # False
print(t2.is_acute()) # False
print(t2.is_obtuse()) # False
```
这里我们创建了两个实例`t1`和`t2`,分别表示一个直角三角形和一个等腰直角三角形。我们通过调用相应的实例方法来计算它们的面积、周长、夹角,以及判断它们是否是直角三角形、等腰三角形、等边三角形、锐角三角形或钝角三角形。
阅读全文