设计一个平面三角形类,以三条边长为它的三个实例属性,拥有如下实例方法: 计算面积、计算周长、计算夹角、判断直角三角形、判断等腰三角形、判断等边三角形、判断锐角三角形、判断钝角三角形,并考虑相应的异常!制作几个实例来验证代码的正确性!
时间: 2023-12-23 08:03:28 浏览: 45
C语言输入三角形边长判断其类型并输出面积实例代码
5星 · 资源好评率100%
好的,我已经明白你的问题了。以下是代码实现:
```python
import math
class Triangle:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def __str__(self):
return f'Triangle with sides {self.a}, {self.b}, {self.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, x):
if x == 'A':
return math.degrees(math.acos((self.b ** 2 + self.c ** 2 - self.a ** 2) / (2 * self.b * self.c)))
elif x == 'B':
return math.degrees(math.acos((self.a ** 2 + self.c ** 2 - self.b ** 2) / (2 * self.a * self.c)))
elif x == 'C':
return math.degrees(math.acos((self.a ** 2 + self.b ** 2 - self.c ** 2) / (2 * self.a * self.b)))
else:
raise ValueError("Invalid input. Please enter 'A', 'B', or '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.b == self.c or self.c == self.a
def is_equilateral(self):
return self.a == self.b == self.c
def is_acute(self):
angles = [self.angle('A'), self.angle('B'), self.angle('C')]
return all(a < 90 for a in angles)
def is_obtuse(self):
angles = [self.angle('A'), self.angle('B'), self.angle('C')]
return any(a > 90 for a in angles)
```
这个类有三个实例属性 a, b, c,分别代表三角形的三边长。有以下实例方法:
- `area()`:计算三角形的面积,使用海伦公式进行计算。
- `perimeter()`:计算三角形的周长。
- `angle(x)`:计算三角形的夹角,x 为字符 'A', 'B', 或 'C',代表对应的角。使用余弦定理进行计算。
- `is_right()`:判断三角形是否为直角三角形。
- `is_isosceles()`:判断三角形是否为等腰三角形。
- `is_equilateral()`:判断三角形是否为等边三角形。
- `is_acute()`:判断三角形是否为锐角三角形。
- `is_obtuse()`:判断三角形是否为钝角三角形。
在计算夹角时,如果输入的字符不是 'A', 'B', 或 'C',会抛出 ValueError 异常。
下面是一些测试代码:
```python
# 创建一个三边长为 3, 4, 5 的直角三角形
t1 = Triangle(3, 4, 5)
print(t1.area()) # 6.0
print(t1.perimeter()) # 12
print(t1.angle('A')) # 36.86989764584402
print(t1.is_right()) # True
print(t1.is_isosceles()) # False
print(t1.is_equilateral()) # False
print(t1.is_acute()) # True
print(t1.is_obtuse()) # False
# 创建一个三边长为 5, 5, 8 的等腰三角形
t2 = Triangle(5, 5, 8)
print(t2.area()) # 12.0
print(t2.perimeter()) # 18
print(t2.angle('C')) # 100.97834694376584
print(t2.is_right()) # False
print(t2.is_isosceles()) # True
print(t2.is_equilateral()) # False
print(t2.is_acute()) # False
print(t2.is_obtuse()) # True
# 创建一个三边长为 1, 2, 3 的钝角三角形
t3 = Triangle(1, 2, 3)
print(t3.area()) # 0.0
print(t3.perimeter()) # 6
print(t3.angle('B')) # 0.0
print(t3.is_right()) # False
print(t3.is_isosceles()) # False
print(t3.is_equilateral()) # False
print(t3.is_acute()) # False
print(t3.is_obtuse()) # True
# 创建一个三边长为 3, 3, 3 的等边三角形
t4 = Triangle(3, 3, 3)
print(t4.area()) # 3.8971143170299736
print(t4.perimeter()) # 9
print(t4.angle('A')) # 60.0
print(t4.is_right()) # False
print(t4.is_isosceles()) # True
print(t4.is_equilateral()) # True
print(t4.is_acute()) # True
print(t4.is_obtuse()) # False
```
以上代码测试了直角三角形、等腰三角形、钝角三角形、等边三角形等不同类型的三角形,并验证了类中的各个方法的正确性。
阅读全文