1. 定义一个学校人员类SchoolPerson,
其中,属性:姓名name、性别sex、年龄age;
方法:设置人员的各个属性的set_info方法;
获取各属性值的get_info方法。
定义好类以后,再定义2个人员进行测试。
class SchoolPerson:
def set_info(self):
self.name = input("请输入姓名:")
self.sex = input("请输入性别:")
self.age = input("请输入年龄:")
def get_info(self):
print("我的名字是%s ,性别%s,今年%s岁" % (self.name, self.sex, self.age))
person1 = SchoolPerson()
person1.set_info()
person1.get_info()
person2 = SchoolPerson()
person2.set_info()
person2.get_info()
2.在第1个题的基础上添加两个方法:
其中,__init__()方法,完成属性的初始化;
__del__()方法,完成输出“__del__方法调用”这一句话(作用是用来销毁对象)。
class SchoolPerson:
def __init__(self, name, sex, age):
self.name = name
self.sex = sex
self.age = age
def set_info(self):
pass
def get_info(self):
print("我的名字是%s ,性别%s,今年%s岁" % (self.name, self.sex, self.age))
def __del__(self):
print("__del__方法调用")
person1 = SchoolPerson("小明", "男", "18")
person1.get_info()
person2 = SchoolPerson("小红", "女", "18")
person2.get_info()
3.创建类MyMath,计算圆的周长、面积和球的表面积、体积,结果保留两位小数。若输入的是非数字,则输出:请输入数字!提示:要引入math包。
例如,请输入半径:5
圆的周长:31.42
圆的面积:78.54
球的表面积:314.16
import math
class MyMath:
def __init__(self, r):
self.r = r
self.c_perimeter = 0
self.c_area = 0
self.b_s_area = 0
def Judge(self):
while 1:
if self.r.isdigit():
self.r = int(self.r)
break
else:
self.r = input("请输入数字:")
def __str__(self):
return "圆的周长:%.2f\n圆的面积:%.2f\n球的表面积:%.2f" % (self.c_perimeter, self.c_area, self.b_s_area)
def solve(self):
self.c_perimeter = 2 * self.r * math.pi
self.c_area = math.pi * self.r ** 2
self.b_s_area = 4 * math.pi * self.r ** 2
a = input("请输入半径:")
yuan = MyMath(a)
yuan.Judge()
yuan.solve()
print(yuan)
4.自定义类模拟三维向量及其运算。包括向量的加法、减法以及向量与标量的乘法和除法,并使用@property查看向量长度。
例如,a=(x1,y1,z1),b=(x2,y2,z2)
a+b=(x1+x2,y1+y2,z1+z2),a-b=(x1-x2,y1-y2,z1-z2)
n=10,a*n=(x1*n,y1*n,z1*n),a/n=(x1/n,y1/n,z1/n)
a.length=(x1**2+y1**2+z1**2)**0.5
class MyArray:
def __init__(self, vector_x, vector_y, vector_z):
self.x = vector_x
self.y = vector_y
self.z = vector_z
def add(self, vector):
x = self.x + vector.x
y = self.y + vector.y
z = self.z + vector.z
print("向量i和向量j的和为:(%d,%d,%d)" % (x, y, z))
def sub(self, vector):
x = self.x - vector.x
y = self.y - vector.y
z = self.z - vector.z
print("向量i和向量j的差为:(%d,%d,%d)" % (x, y, z))
def mul(self, number):
x = self.x * number
y = self.y * number
z = self.z * number
print("积为:(%d,%d,%d)" % (x, y, z))
def truediv(self, number):
x = self.x / number
y = self.y / number
z = self.z / number
print("商为:(%d,%d,%d)" % (x, y, z))
def length(self):
long = (self.x**2+self.y**2+self.z**2)**0.5
print("%.2f" % long)
a, b, c = map(int, input("请输入一个向量坐标:").split())
d, e, f = map(int, input("请输入另一个向量坐标:").split())
print("向量i的坐标为:", (a, b, c))
print("向量j的坐标为:", (d, e, f))
i = MyArray(a, b, c)
j = MyArray(d, e, f)
i.add(j)
i.sub(j)
n = int(input("请输入数字:"))
print("向量i与%d的积和商" % n)
i.mul(n)
i.truediv(n)
print("向量j与%d的积和商")
j.mul(n)
j.truediv(n)
print("向量i的模为")
i.length()
print("向量j的模为")
j.length()
5.设计一个摆放家具实例,要求(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 "[%s]占地 %.2f平米" % (self.name, self.area)
class House:
def __init__(self, house_type, area): # house_type 是户型
self.house_type = house_type
self.area = area
self.free_area = area # 剩余面积
self.item_list = [] # 家具名称列表
def __str__(self):
return ("户型:%s\n总面积:%.2f平米[剩余:%.2f平米]\n家具:%s"
% (self.house_type, self.area,
self.free_area, self.item_list))
def add_item(self, item):
print("要添加 %s" % item)
if item.area > self.free_area:
print("%s 的面积太大,无法添加" % item.name)
return
self.item_list.append(item.name)
self.free_area -= item.area
bed = HouseItem("席梦思", 4)
chest = HouseItem("衣柜", 2)
table = HouseItem("餐桌", 1.5)
my_home = House("两室一厅", 60)
my_home.add_item(bed)
my_home.add_item(chest)
my_home.add_item(table)
print(my_home)
6. 设计一个三维向量类,并实现向量的加法、减法以及向量与标量的乘法和除法运算(要求重载__add__、__sub__、__mul__等方法)。
class MyArray:
def __init__(self, vector_x, vector_y, vector_z):
self.x = vector_x
self.y = vector_y
self.z = vector_z
def __add__(self, vector):
x = self.x + vector.x
y = self.y + vector.y
z = self.z + vector.z
print("向量i和向量j的和为:(%d,%d,%d)" % (x, y, z))
def __sub__(self, vector):
x = self.x - vector.x
y = self.y - vector.y
z = self.z - vector.z
print("向量i和向量j的差为:(%d,%d,%d)" % (x, y, z))
def __mul__(self, number):
x = self.x * number
y = self.y * number
z = self.z * number
print("积为:(%d,%d,%d)" % (x, y, z))
def truediv(self, number):
x = self.x / number
y = self.y / number
z = self.z / number
print("商为:(%d,%d,%d)" % (x, y, z))
def length(self):
long = (self.x**2+self.y**2+self.z**2)**0.5
print("%.2f" % long)
a, b, c = map(int, input("请输入一个向量坐标:").split())
d, e, f = map(int, input("请输入另一个向量坐标:").split())
print("向量i的坐标为:", (a, b, c))
print("向量j的坐标为:", (d, e, f))
i = MyArray(a, b, c)
j = MyArray(d, e, f)
i.__add__(j)
i.__sub__(j)
n = int(input("请输入数字:"))
print("向量i与%d的积和商" % n)
i.__mul__(n)
i.truediv(n)
print("向量j与%d的积和商")
j.__mul__(n)
j.truediv(n)
print("向量i的模为")
i.length()
print("向量j的模为")
j.length()
7、创建SchoolMem类,该类中包含三个数据成员:姓名、性别、年龄;创建Student类,继承自SchoolMem类,添加额外三个数据成员:班级、学号和数量统计;创建Teacher类,继承自SchoolMem类,添加额外三个数据成员:学院、工号和数量统计。要求给每个类适当添加属性、成员方法和特殊方法(如构造方法),实现学生和教师信息的输出,实现并测试这个类。
class SchoolMem:
def __init__(self):
self.name = None
self.sex = None
self.age = None
def get(self):
self.name = input("请输入姓名:")
self.sex = input("请输入性别:")
self.age = input("请输入年龄:")
class Student(SchoolMem):
def __init__(self):
SchoolMem.__init__(self)
self.s_class = None
self.s_id = None
self.s_number = 0
def s_get(self):
SchoolMem.get(self)
self.s_class = input("请输入所在班级")
self.s_id = input("请输入学号")
self.s_number += 1
def __str__(self):
return ("名字:%s\n性别:%s\n年龄:%s\n班级:%s\n学号:%s\n数量:%d"
% (self.name, self.sex, self.age, self.s_class, self.s_id, self.s_number))
class Teacher(SchoolMem):
def __init__(self):
SchoolMem.__init__(self)
self.major = None
self.job_number = None
self.t_number = 0
def t_get(self):
SchoolMem.get(self)
self.major = input("请输入所在学院:")
self.job_number = input("请输入工号:")
self.t_number += 1
def __str__(self):
return ("名字:%s\n性别:%s\n年龄:%s\n学院:%s\n工号:%s\n数量:%d"
% (self.name, self.sex, self.age, self.major, self.job_number, self.t_number))
stu = Student()
print("学生信息")
stu.s_get()
print(stu)
print("老师信息")
tea = Teacher()
tea.t_get()
print(tea)
8、设计一个车类,属性:车的类型、车的速度,分别再建立两个子类:小汽车类、电动汽车类去继承车类,为了实现汽车增加能源的方式,在父类中添加 一个增加能源方法 increased_energy() ,通过汽车对象不同分别实现小汽车类加 油、电动汽车充电的实现。
class Vehicle:
def __init__(self, v_type, speed):
self.type = v_type
self.speed = speed
self.energy = None
def increased_energy(self):
self.energy = input("补充能源的方式:")
class Car(Vehicle):
def __str__(self):
return "类型:%s\n速度:%s千米每小时\n补充能源方式:%s" % (self.type, self.speed, self.energy)
class Tram(Vehicle):
def __str__(self):
return "类型:%s\n速度:%s千米每小时\n补充能源方式:%s" % (self.type, self.speed, self.energy)
car = Car("小汽车", 120)
print("小汽车", end='')
car.increased_energy()
print(car)
tram = Tram("电动汽车", 70)
print("电动汽车", end='')
tram.increased_energy()
print(tram)