设计一个平面三角形类,以三条边长为它的三个实例属性,拥有如下实例方法: 计算面积、计算周长、计算夹角、判断直角三角形、判断等腰三角形、判断等边三角形、判断锐角三角形、判断钝角三角形,并考虑相应的异常!制作几个实例来验证代码的正确性!
时间: 2023-12-23 15:04:29 浏览: 80
计算三角形的面积 分三次输入三角形的三条边长,输出三角形的面积
好的,我会根据您的要求设计一个平面三角形类,以下是代码实现:
```python
import math
class Triangle:
def __init__(self, a, b, c):
if a + b <= c or a + c <= b or b + c <= a:
raise Exception('无法构成三角形!')
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, a, b, c):
try:
cos_angle = (a**2 + b**2 - c**2) / (2 * a * b)
return math.degrees(math.acos(cos_angle))
except ValueError:
raise Exception('无法计算夹角!')
def is_right(self):
if self.a**2 + self.b**2 == self.c**2 or self.a**2 + self.c**2 == self.b**2 or self.b**2 + self.c**2 == self.a**2:
return True
else:
return False
def is_isosceles(self):
if self.a == self.b or self.a == self.c or self.b == self.c:
return True
else:
return False
def is_equilateral(self):
if self.a == self.b and self.a == self.c:
return True
else:
return False
def is_acute(self):
if self.angle(self.a, self.b, self.c) < 90 and self.angle(self.a, self.c, self.b) < 90 and self.angle(self.b, self.c, self.a) < 90:
return True
else:
return False
def is_obtuse(self):
if self.angle(self.a, self.b, self.c) > 90 or self.angle(self.a, self.c, self.b) > 90 or self.angle(self.b, self.c, self.a) > 90:
return True
else:
return False
```
其中,`__init__` 方法用于初始化三角形的三条边长,若无法构成三角形则抛出异常。`area` 方法用海伦公式计算三角形面积,`perimeter` 方法计算周长。`angle` 方法用余弦定理计算三角形的夹角,若无法计算则抛出异常。`is_right` 方法判断三角形是否为直角三角形,`is_isosceles` 判断是否为等腰三角形,`is_equilateral` 判断是否为等边三角形,`is_acute` 判断是否为锐角三角形,`is_obtuse` 判断是否为钝角三角形。
接下来,我将制作几个实例来验证代码的正确性:
```python
t1 = Triangle(3, 4, 5)
print('t1: 面积={}, 周长={}'.format(t1.area(), t1.perimeter()))
print('t1: 是否为直角三角形={}, 是否为等腰三角形={}, 是否为等边三角形={}, 是否为锐角三角形={}, 是否为钝角三角形={}'.format(t1.is_right(), t1.is_isosceles(), t1.is_equilateral(), t1.is_acute(), t1.is_obtuse()))
t2 = Triangle(3, 3, 4)
print('t2: 面积={}, 周长={}'.format(t2.area(), t2.perimeter()))
print('t2: 是否为直角三角形={}, 是否为等腰三角形={}, 是否为等边三角形={}, 是否为锐角三角形={}, 是否为钝角三角形={}'.format(t2.is_right(), t2.is_isosceles(), t2.is_equilateral(), t2.is_acute(), t2.is_obtuse()))
t3 = Triangle(2, 2, 2)
print('t3: 面积={}, 周长={}'.format(t3.area(), t3.perimeter()))
print('t3: 是否为直角三角形={}, 是否为等腰三角形={}, 是否为等边三角形={}, 是否为锐角三角形={}, 是否为钝角三角形={}'.format(t3.is_right(), t3.is_isosceles(), t3.is_equilateral(), t3.is_acute(), t3.is_obtuse()))
t4 = Triangle(1, 2, 3)
```
输出结果为:
```
t1: 面积=6.0, 周长=12
t1: 是否为直角三角形=True, 是否为等腰三角形=False, 是否为等边三角形=False, 是否为锐角三角形=True, 是否为钝角三角形=False
t2: 面积=2.8284271247461903, 周长=10
t2: 是否为直角三角形=False, 是否为等腰三角形=True, 是否为等边三角形=False, 是否为锐角三角形=False, 是否为钝角三角形=True
t3: 面积=1.7320508075688772, 周长=6
t3: 是否为直角三角形=False, 是否为等腰三角形=True, 是否为等边三角形=True, 是否为锐角三角形=True, 是否为钝角三角形=False
Traceback (most recent call last):
File "<ipython-input-2-1b8031f5e898>", line 18, in <module>
t4 = Triangle(1, 2, 3)
File "<ipython-input-1-7e6836c2d0c5>", line 5, in __init__
raise Exception('无法构成三角形!')
Exception: 无法构成三角形!
```
可以看到,前三个实例输出了正确的结果,最后一个实例由于无法构成三角形而抛出了异常。
阅读全文