python面向对象pta答案
时间: 2024-12-31 13:25:14 浏览: 14
### Python 面向对象编程 PTA 平台练习题解答
#### 定义三角形并计算其面积和周长
为了实现一个可以计算三角形面积和周长的类,代码结构应当更加清晰,并且遵循良好的编码实践。以下是改进后的版本:
```python
import math
class Triangle(object):
def __init__(self, a, b, c):
"""初始化方法设置三条边"""
self.a = a
self.b = b
self.c = c
def triangle_area(self):
"""海伦公式计算三角形面积"""
p = (self.a + self.b + self.c) / 2
area_squared = p * (p - self.a) * (p - self.b) * (p - self.c)
if area_squared <= 0:
raise ValueError("给定长度无法构成有效三角形")
return math.sqrt(area_squared)
def perimeter(self):
"""返回三角形周长"""
return self.a + self.b + self.c
if __name__ == '__main__':
test_triangle = Triangle(3, 4, 5)
print(f"该三角形的面积是 {test_triangle.triangle_area():.2f}")
print(f"该三角形的周长是 {test_triangle.perimeter()}")
```
上述代码修正了原始代码中的几个问题:增加了异常处理来验证输入是否能形成有效的三角形;优化变量命名使其更具描述性;调整`print`函数内的字符串格式化方式以便于阅读。
对于更复杂的形状层次结构如矩形和圆形,在继承自基类 `Shape` 的情况下,可以通过如下方式进行扩展:
```python
class Shape(object):
def __init__(self, name):
self.name = name
def get_area(self):
raise NotImplementedError("子类需重写此方法")
class Rectangle(Shape):
def __init__(self, name, width, height):
super().__init__(name)
self.width = width
self.height = height
def get_area(self):
return self.width * self.height
class Circle(Shape):
pi = 3.141592653589793
def __init__(self, name, radius):
super().__init__(name)
self.radius = radius
def get_area(self):
return Circle.pi * pow(self.radius, 2)
def main():
shape_0 = Shape("shape0")
rect_name = "rect"
rect_width = float(input())
rect_height = float(input())
rectangle = Rectangle(rect_name, rect_width, rect_height)
circle_name = "circle"
circle_radius = float(input())
circle = Circle(circle_name, circle_radius)
print(shape_0.name)
print(f"{rectangle.name}面积: {rectangle.get_area():.2f}")
print(f"{circle.name}面积: {circle.get_area():.2f}")
if __name__ == "__main__":
main()
```
这段代码展示了如何创建一个多态性的形状体系,其中每个具体类型的实例都可以调用通用的方法(比如获取面积),而实际执行的是特定于各自类型的逻辑[^2]。
阅读全文