用python设计一个平面三角形类,以三条边长为它的三个实例属性,拥有如下实例方法: 计算面积、计算周长、计算夹角、判断直角三角形、判断等腰三角形、判断等边三角形、判断锐角三角形、判断钝角三角形,并考虑相应的异常!制作几个实例来验证代码的正确性!
时间: 2023-12-23 10:05:28 浏览: 111
python 判断三角形,给你三个整数a,b,c, 判断能否以它们为三个边长构成三角形。
5星 · 资源好评率100%
好的,以下是平面三角形类的代码实现:
```python
import math
class Triangle:
def __init__(self, a, b, c):
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, x):
if x not in ["A", "B", "C"]:
raise ValueError("请输入 A、B 或 C 来计算对应角度")
cos_angle = (self.b ** 2 + self.c ** 2 - self.a ** 2) / (2 * self.b * self.c)
return math.degrees(math.acos(cos_angle)) if x == "A" else math.degrees(math.acos((self.a ** 2 + self.c ** 2 - self.b ** 2) / (2 * self.a * self.c))) if x == "B" else math.degrees(math.acos((self.a ** 2 + self.b ** 2 - self.c ** 2) / (2 * self.a * self.b)))
def is_right(self):
return 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
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 == self.c
def is_acute(self):
return self.a ** 2 + self.b ** 2 > self.c ** 2 and self.a ** 2 + self.c ** 2 > self.b ** 2 and self.b ** 2 + self.c ** 2 > self.a ** 2
def is_obtuse(self):
return 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
```
代码中,我们使用了三个实例属性 `a`、`b` 和 `c` 分别表示三角形的三条边长,并在初始化方法中进行了边长的合法性检查。同时,我们实现了面积、周长、夹角、直角三角形、等腰三角形、等边三角形、锐角三角形和钝角三角形等方法,可以方便地对三角形进行各种判断。
下面是几个实例的代码:
```python
# 创建一个直角三角形实例
t1 = Triangle(3, 4, 5)
print("面积:", t1.area()) # 预期输出:6.0
print("周长:", t1.perimeter()) # 预期输出:12
print("角A的度数:", 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
# 创建一个等边三角形实例
t2 = Triangle(2, 2, 2)
print("面积:", t2.area()) # 预期输出:1.7320508075688772
print("周长:", t2.perimeter()) # 预期输出:6
print("角B的度数:", t2.angle("B")) # 预期输出:60.0
print("是否为直角三角形:", t2.is_right()) # 预期输出:False
print("是否为等腰三角形:", t2.is_isosceles()) # 预期输出:True
print("是否为等边三角形:", t2.is_equilateral()) # 预期输出:True
print("是否为锐角三角形:", t2.is_acute()) # 预期输出:True
print("是否为钝角三角形:", t2.is_obtuse()) # 预期输出:False
# 创建一个不能构成三角形的实例
try:
t3 = Triangle(1, 2, 3)
except ValueError as e:
print(e) # 预期输出:不能构成三角形
```
阅读全文