0
点赞
收藏
分享

微信扫一扫

python(4)

代码小姐 2022-04-17 阅读 119
python

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)
举报

相关推荐

0 条评论