本次上机实验的题目是设计一个平面三角形类,以三条边长为它的三个实例属性,拥有如下实例方法:计算面积、计算周长、计算夹角、判断直角三角形、判断等腰三角形、判断等边三角形、判断锐角三角形,并考虑相应的异常!制作几个实例来验证代码的正确性!
时间: 2023-12-24 16:05:34 浏览: 64
好的,以下是一个使用 Python 实现的平面三角形类,包含计算面积、计算周长、计算夹角、判断直角三角形、判断等腰三角形、判断等边三角形和判断锐角三角形等实例方法:
```python
import math
class Triangle:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
self._validate()
def _validate(self):
if self.a <= 0 or self.b <= 0 or self.c <= 0:
raise ValueError("边长必须为正数!")
if self.a + self.b <= self.c or self.b + self.c <= self.a or self.c + self.a <= self.b:
raise ValueError("三条边长无法组成三角形!")
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):
if A == 'A':
a, b, c = self.a, self.b, self.c
elif A == 'B':
a, b, c = self.b, self.c, self.a
else:
a, b, c = self.c, self.a, self.b
return math.degrees(math.acos((b ** 2 + c ** 2 - a ** 2) / (2 * b * c)))
def is_right_triangle(self):
return abs(self.a ** 2 + self.b ** 2 - self.c ** 2) < 1e-6 or \
abs(self.b ** 2 + self.c ** 2 - self.a ** 2) < 1e-6 or \
abs(self.c ** 2 + self.a ** 2 - self.b ** 2) < 1e-6
def is_isosceles_triangle(self):
return abs(self.a - self.b) < 1e-6 or abs(self.b - self.c) < 1e-6 or abs(self.c - self.a) < 1e-6
def is_equilateral_triangle(self):
return abs(self.a - self.b) < 1e-6 and abs(self.b - self.c) < 1e-6
def is_acute_triangle(self):
return self.angle('A') < 90 and self.angle('B') < 90 and self.angle('C') < 90
# 验证实例
t1 = Triangle(3, 4, 5)
print(t1.area()) # 6.0
print(t1.perimeter()) # 12
print(t1.angle('A')) # 36.86989764584402
print(t1.is_right_triangle()) # True
print(t1.is_isosceles_triangle()) # False
print(t1.is_equilateral_triangle()) # False
print(t1.is_acute_triangle()) # True
t2 = Triangle(2, 3, 3)
print(t2.area()) # 2.8284271247461903
print(t2.perimeter()) # 8
print(t2.angle('A')) # 48.19005223832176
print(t2.is_right_triangle()) # False
print(t2.is_isosceles_triangle()) # True
print(t2.is_equilateral_triangle()) # False
print(t2.is_acute_triangle()) # True
t3 = Triangle(1, 1, math.sqrt(2))
print(t3.area()) # 0.5
print(t3.perimeter()) # 2 + sqrt(2)
print(t3.angle('A')) # 45.00000000000001
print(t3.is_right_triangle()) # True
print(t3.is_isosceles_triangle()) # True
print(t3.is_equilateral_triangle()) # False
print(t3.is_acute_triangle()) # False
# 抛出异常的实例
try:
t4 = Triangle(0, 1, 2)
except ValueError as e:
print(e) # 边长必须为正数!
try:
t5 = Triangle(1, 2, 3)
except ValueError as e:
print(e) # 三条边长无法组成三角形!
```
在上述代码中,我们使用 `_validate` 方法来检查输入的三条边长是否符合构成三角形的要求,如果不符合,则抛出异常。在其他实例方法中,我们使用了 1e-6 的精度误差来比较浮点数。
阅读全文