python编写一个圆类及其派生类:球体:有计算表面积和体积的构造方法。圆柱体。主函数以列表方式输入n个球的半径,以嵌套列表的方式输入m个半径和高,分别计算并输出n个球的表面积和体积之和,小数点保留2位,计算并输出m个圆柱体的表面积和体积之和,小数点保留2位
时间: 2023-08-21 16:04:25 浏览: 93
好的,这是一个比较全面的面向对象编程的问题,我将分步骤给出解决方案。
首先,我们需要定义一个圆类 `Circle`,该类需要有以下属性和方法:
- 属性:半径 `r`。
- 方法:计算圆的面积 `get_area()` 和周长 `get_circumference()`。
代码如下:
```python
class Circle:
def __init__(self, r):
self.r = r
def get_area(self):
return round(3.14 * self.r ** 2, 2)
def get_circumference(self):
return round(2 * 3.14 * self.r, 2)
```
接下来,我们需要定义一个球体类 `Ball`,该类继承自圆类,并且需要添加以下属性和方法:
- 属性:无。
- 方法:计算球体的表面积 `get_surface_area()` 和体积 `get_volume()`。
代码如下:
```python
class Ball(Circle):
def __init__(self, r):
super().__init__(r)
def get_surface_area(self):
return round(4 * 3.14 * self.r ** 2, 2)
def get_volume(self):
return round(4/3 * 3.14 * self.r ** 3, 2)
```
最后,我们需要定义一个圆柱体类 `Cylinder`,该类同样继承自圆类,并且需要添加以下属性和方法:
- 属性:高 `h`。
- 方法:计算圆柱体的表面积 `get_surface_area()` 和体积 `get_volume()`。
代码如下:
```python
class Cylinder(Circle):
def __init__(self, r, h):
super().__init__(r)
self.h = h
def get_surface_area(self):
return round(2*3.14*self.r*self.h + 2*3.14*self.r**2, 2)
def get_volume(self):
return round(3.14*self.r**2*self.h, 2)
```
现在我们已经定义好了三个类,接下来我们需要实现主函数,按照题目要求分别计算出 n 个球的表面积和体积之和以及 m 个圆柱体的表面积和体积之和。
代码如下:
```python
def main():
# 输入数据
n = int(input("请输入球的个数:"))
balls = []
for i in range(n):
r = float(input("请输入第{}个球的半径:".format(i+1)))
balls.append(Ball(r))
m = int(input("请输入圆柱体的个数:"))
cylinders = []
for i in range(m):
r, h = input("请输入第{}个圆柱体的半径和高,以空格分隔:".format(i+1)).split()
cylinders.append(Cylinder(float(r), float(h)))
# 计算结果
ball_surface_area = sum(ball.get_surface_area() for ball in balls)
ball_volume = sum(ball.get_volume() for ball in balls)
cylinder_surface_area = sum(cylinder.get_surface_area() for cylinder in cylinders)
cylinder_volume = sum(cylinder.get_volume() for cylinder in cylinders)
# 输出结果
print("n个球的表面积之和:", ball_surface_area)
print("n个球的体积之和:", ball_volume)
print("m个圆柱体的表面积之和:", cylinder_surface_area)
print("m个圆柱体的体积之和:", cylinder_volume)
```
这样,我们就完成了所有的代码编写。完整代码如下: