python实验4-1

最近一段时间我看前些年的python实验好多学弟看,那我接着把后面的写出来吧。希望题没换,对你们还有用。
实验目的:
1.加深面向对象的编程思想,掌握类及对象的创建。 2.掌握封装、继承和多态机制。 3.能利用面向对象的基本思想解决实际问题。

  1. 定义一个学校人员类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()

猜你喜欢

转载自blog.csdn.net/qq_45148277/article/details/129975988
4-1