最近一段时间我看前些年的python实验好多学弟看,那我接着把后面的写出来吧。希望题没换,对你们还有用。
实验目的:
1.加深面向对象的编程思想,掌握类及对象的创建。 2.掌握封装、继承和多态机制。 3.能利用面向对象的基本思想解决实际问题。
- 定义一个学校人员类SchoolPerson,
其中属性:姓名name、性别sex、年龄age;
方法:设置人员的各个属性的set_info方法;
获取各属性值的get_info方法。
定义好类以后,再定义2个人员进行测试。
2.在第1个题的基础上添加两个方法:
其中,init()方法,完成属性的初始化;
del()方法,完成输出“del__方法调用”这一句话(作用是用来销毁对象)。
3.创建类MyMath,计算圆的周长、面积和球的表面积、体积,结果保留两位小数。
若输入的是非数字,则输出:请输入数字!提示:要引入math包。
4. 自定义类模拟三维向量及其运算。
包括向量的加法、减法以及向量与标量的乘法和除法,并使用@property查看向量长度。
5. 设计一个摆放家具实例,要求:
(1)房子(House) 有户型、总面积和家具名称列表 (新房子没有任何的家具)
(2)家具(HouseItem)有 名字和占地面积,其中席梦思(bed) 占地 4 平米、衣柜(chest) 占地 2 平米、餐桌(table) 占地 1.5 平米
(3)将以上三件家具添加到房子中
(4)打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
6.
设计一个三维向量类,并实现向量的加法、减法以及向量与标量的乘法和除法运算(要求重载__add、sub、__mul__等方法)。
7. 创建SchoolMem类,该类中包含三个数据成员:姓名、性别、年龄;创建Student类,继承自SchoolMem类,
添加额外三个数据成员:班级、学号和数量统计;创建Teacher类,继承自SchoolMem类,
添加额外三个数据成员:学院、工号和数量统计。要求给每个类适当添加属性、成员方法和特殊方法(如构造方法),
实现学生和教师信息的输出,实现并测试这个类。
8.设计一个车类,属性:车的类型、车的速度,
分别再建立两个子类:小汽车类、电动汽车类去继承车类,
为了实现汽车增加能源的方式,在父类中添加 一个增加能源方法 increased_energy() ,
通过汽车对象不同分别实现小汽车类加 油、电动汽车充电的实现。
# 定义一个学校人员类SchoolPerson,
#
# 其中属性:姓名name、性别sex、年龄age;
#
# 方法:设置人员的各个属性的set_info方法;
#
# 获取各属性值的get_info方法。
#
# 定义好类以后,再定义2个人员进行测试。
#
class SchoolPerson:
def set_info(self,name,sex,age):
self.name=name
self.age=age
self.sex=sex
def get_info(self):
print(f"{
self.name}---{
self.sex}---{
self.age}")
h1=SchoolPerson()
h2=SchoolPerson()
h1.set_info("张三","女",18)
h1.get_info()
h2.set_info("李四","男",19)
h2.get_info()
# 在第1个题的基础上添加两个方法:
#
# 其中,__init__()方法,完成属性的初始化;
#
# __del__()方法,完成输出“__del__方法调用”这一句话(作用是用来销毁对象)。
class SchoolPerson:
def __init__(self,name,sex,age):
self.name = name
self.age = age
self.sex = sex
def set_info(self,name,sex,age):
self.name=name
self.age=age
self.sex=sex
def get_info(self):
print(f"{
self.name}---{
self.sex}---{
self.age}")
def __del__(self):
print("__del__方法调用")
h1=SchoolPerson("张三","女",18)
h2=SchoolPerson("李四","男",19)
h1.get_info()
h2.get_info()
# 创建类MyMath,计算圆的周长、面积和球的表面积、体积,结果保留两位小数。
# 若输入的是非数字,则输出:请输入数字!提示:要引入math包。
import math
class MyMath():
def __init__(self,r):
self.r=r
def zhouchang(self):
c=2*math.pi*self.r
return c
def area(self):
a=math.pi*self.r*self.r
return a
def biaoarea(self):
b=3*math.pi*self.r*self.r
return b
def v(self):
vv=(4/3)*math.pi*self.r*self.r*self.r
return vv
r=int(input("请输入圆的半径:"))
p=MyMath(r)
print("圆的周长={:.2f}".format(p.zhouchang()) )
print("圆的面积={:.2f}".format(p.area() ))
print("球的表面积={:.2f}".format(p.biaoarea()) )
print("球的体积={:.2f}".format(p.v()) )
# 自定义类模拟三维向量及其运算。
# 包括向量的加法、减法以及向量与标量的乘法和除法,
# 并使用@property查看向量长度。
class MyArray:
def __init__(self,x,y,z):
self.x=x
self.y=y
self.z=z
def add(self,a):
x=self.x+a.x
y = self.y + a.y
z = self.z + a.z
print("和=({},{},{})".format(x,y,z))
def sub(self,a):
x = self.x - a.x
y = self.y - a.y
z = self.z - a.z
print("差=({},{},{})".format(x, y, z))
def mul(self, a):
x = self.x *a
y = self.y *a
z = self.z * a
print("乘积=({},{},{})".format(x, y, z))
def truediv(self, a):
x = self.x / a
y = self.y / a
z = self.z / a
print("商=({},{},{})".format(x, y, z))
def length(self):
a=pow(pow(self.x,2)+pow(self.y,2)+pow(self.z,2),0.5)
print("长度为{}".format(round(a,3)))
print("请输入六个数a,b,c,d,e,f")
a,b,c,d,e,f=map(int,input().split())
print("N1",(a,b,c))
print("N2",(d,e,f))
n1=MyArray(a,b,c)
n2=MyArray(d,e,f)
n1.add(n2)
n1.sub(n2)
n1.mul(2)
n1.truediv(2)
n1.length()
# 设计一个摆放家具实例,要求:
# (1)房子(House) 有户型、总面积和家具名称列表 (新房子没有任何的家具)
# (2)家具(HouseItem)有 名字和占地面积,其中席梦思(bed) 占地 4 平米、衣柜(chest) 占地 2 平米、餐桌(table) 占地 1.5 平米
# (3)将以上三件家具添加到房子中
# (4)打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表
class HouseItem:
def __init__(self,name,area):
self.name=name
self.area=area
def __str__(self):
return f"{
self.name}占地{
self.area}"
class House:
def __init__(self,house_type,totle_area):
self.house_type=house_type
self.totle_area=totle_area
self.free_area=totle_area
self.item_list=[]
def __str__(self):
return f"户型:{
self.house_type}\n" \
f"总面积:{
self.totle_area}\n" \
f"剩余面积:{
self.free_area}\n" \
f"家具列表:{
self.item_list}"
def add_item(self,item):
print("要添加%s"%item)
if item.area>self.free_area:
print(f"{
item.area}的面积太大了,无法添加!")
return
self.item_list.append(item.name)
self.free_area-=item.area
if __name__=="__main__":
bad=HouseItem("席梦思",4)
chest=HouseItem("衣柜",2)
table=HouseItem("餐桌",1.5)
print(bad)
print(chest)
print(table)
my_house=House("两室一厅",60)
my_house.add_item(bad)
my_house.add_item(chest)
my_house.add_item(table)
print(my_house)
# 设计一个三维向量类,并实现向量的加法、减法以及向量与标量的乘法和除法运算(要求重载__add__、__sub__、__mul__等方法)。
class xiangliang:
def __init__(self,x=0,y=0,z=0):
self.x=x
self.y=y
self.z=z
def __add__(self, n):
r=xiangliang()
r.x=self.x+n.x
r.y=self.y+n.y
r.z=self.z+n.z
return r
def __sub__(self, n):
r = xiangliang()
r.x = self.x - n.x
r.y = self.y - n.y
r.z = self.z - n.z
return r
def __mul__(self, n):
r = xiangliang()
r.x = self.x * n
r.y = self.y * n
r.z = self.z * n
return r
def __truediv__(self,n):
r = xiangliang()
r.x = self.x / n
r.y = self.y / n
r.z = self.z / n
return r
def show(self):
print((self.x,self.y,self.z))
v1=xiangliang(1,2,3)
v2=xiangliang(4,5,6)
v3=v1+v2
v3.show()
v3=v1-v2
v3.show()
v3=v1*3
v3.show()
v3=v1/2
v3.show()
# 创建SchoolMem类,该类中包含三个数据成员:姓名、性别、年龄;创建Student类,继承自SchoolMem类,
# 添加额外三个数据成员:班级、学号和数量统计;创建Teacher类,继承自SchoolMem类,
# 添加额外三个数据成员:学院、工号和数量统计。要求给每个类适当添加属性、成员方法和特殊方法(如构造方法),
# 实现学生和教师信息的输出,实现并测试这个类。
class SchoolMem:
def __init__(self,name,sex,age):
self.name=name
self.sex=sex
self.age=age
def Alter(self):
self.name=input("姓名")
self.sex=input("性别")
self.age=input("年龄")
def PrintInfo(self):
print(self.name)
print(self.sex)
print(self.age)
class Student(SchoolMem):
total=0
def __init__(self,name,sex,age,classname,number):
super(Student, self).__init__(name,sex,age)
self.classname=classname
self.number=number
Student.total+=1
def Alter(self):
self.classname=input("班级")
self.number=input("学号")
def PrintInfo(self):
super().PrintInfo()
print(self.classname)
print(self.number)
class Teacher(SchoolMem):
total=0
def __init__(self,name,sex,age,xueyuan,gonghao):
super().__init__(name,sex,age)
self.xueyuan=xueyuan
self.gonghao=gonghao
Teacher.total+=1
def Alter(self):
self.xueyuan=input("学院")
self.gonghao=input("工号")
def PrintInfo(self):
super().PrintInfo()
print(self.xueyuan)
print(self.gonghao)
a=Student("张三","男","18",5,10)
a.PrintInfo()
b=Teacher("李四",'男',"30",3,22)
b.PrintInfo()
# 设计一个车类,属性:车的类型、车的速度,
# 分别再建立两个子类:小汽车类、电动汽车类去继承车类,
# 为了实现汽车增加能源的方式,在父类中添加 一个增加能源方法 increased_energy() ,
# 通过汽车对象不同分别实现小汽车类加 油、电动汽车充电的实现。
from abc import ABCMeta,abstractmethod
class vehicle(metaclass=ABCMeta):
def __init__(self,mold,speed):
self.mold = mold
self.speed =speed
@abstractmethod
def increased_energy(self):
pass
class car(vehicle):
def __init__(self,mold,speed):
vehicle.__init__(self,mold,speed)
def increased_energy(self):
print(self.mold+"需要加油,速度才能达到%s"%self.speed)
car01 = car("小汽车",120)
car01.increased_energy()
class ElectricVehicles(vehicle):
def __init__(self,mold,speed):
vehicle.__init__(self,mold,speed)
def increased_energy(self):
print(self.mold+"需要充电,速度才能达到%s"%self.speed)
EV01 = ElectricVehicles("新能源汽车",90)
EV01.increased_energy()