面向对象开胃菜

1.  定义⼀个点类 Pointer
属性是横向坐标 x与 纵向坐标 y
定义⼀个圆类 Circle
属性有圆⼼点 cp 与 半径 radius
⽅法有:
        1. 求圆的⾯积
        2. 求圆的周⻓
        3. 求指定点与圆的关系
提示:关系有三种 【圆内 圆外 圆上】
设计到的数学公式:指定点与圆⼼点之间的距离 与 圆的半径进⾏⽐较

import math
class Pointer():
    def __init__(self,x,y):
        self.x = x
        self.y = y

class Circle():
    # 加入圆的两个静态属性半径、圆心点
    def __init__(self,radius,cp):
        self.radius = radius
        self.cp = cp

    def area(self):
        return f'面积:{3.14 * self.radius ** 2:.2f}'

    def circumference(self):
        return f'周长{2 * 3.14 * self.radius:.2f}'
    
    # 传另外一个点
    def relationship(self,p1):
        # 点到圆心的距离
        l = math.sqrt(((self.cp.x-p1.x)**2 + (self.cp.y-p1.y)**2))
        if l == self.radius :
            print('点在圆上')
        elif l > self.radius:
           print('点在圆外')
        else:
            print('点在圆内')

if __name__ == '__main__':
    # 圆心
    cp = Pointer(0,0)
    # 另外一个点
    p1= Pointer(4,5)
    # 创建一个圆的对象
    c1 = Circle(5,cp)
    print(c1.area())
    print(c1.circumference())
    c1.relationship(p1)

2.  宠物店类 PetShop
属性:店名,店中的宠物 【使⽤列表存储宠物】
⽅法:展示所有宠物的信息宠物狗类 PetDog
属性:昵称,性别,年龄,品种
⽅法:叫,拆家,吃饭宠物猫类 PetCat
属性:昵称,性别,年龄,品种,眼睛的颜⾊
⽅法:叫,撒娇,吃饭
注意:狗的叫声是汪汪 猫的叫声是喵喵狗吃的是⻣头  猫吃的是⻥

class PetShop():
    def __init__(self, shop_name,pet_list=None):
        # 判断是否是空,如果空就放一个空列表,否则加到pet_list中
        if pet_list == None:
            pet_list = []
        self.shop_name = shop_name
        self.pet_list = pet_list

    def show(self):
        '''展示宠物店信息'''
        if len(self.pet_list) == 0:
            print("还没有宠物!")
            return
        print("店名:{},有{}种宠物".format(self.shop_name,len(self.pet_list)))
        for pet in self.pet_list:
            print(pet.__dict__)

class Pet():
    def __init__(self,name,sex,age,breed):
        self.name = name
        self.sex = sex
        self.age = age
        self.breed = breed
    def cry(self):
        pass
    def eat(self):
        pass
    
class PetDog(Pet):
    # 子类重写父类的cry :若不重写则会默认用父类的方法
    def cry(self):
        print(self.name,'汪汪')
    # 子类添加自有的方法play_home
    def play_home(self):
        print(self.name,'疯狂拆家')
    # 子类重写父类的eat
    def eat(self):
        print(self.name,'狗吃骨头')
    def __str__(self):
        return 'PetDog的名字:{},性别:{},年龄:{},品种:{}'.format(self.name,self.sex,self.age,self.breed)

class PetCat(Pet):
    def __init__(self,name,sex,age,breed,eye_color):
        # 添加属于自己的属性
        super(PetCat, self).__init__(name,sex,age,breed)
        self.eye_color=eye_color
    # 子类重写父类的cry
    def cry(self):
        print(self.name,'喵喵')
    # 子类重写父类的eat
    def eat(self):
        print(self.name,'吃鱼')
    # 子类添加自有的方法coquetry
    def coquetry(self):
        print(self.name,'开始撒娇')
    def __str__(self):
        return 'PetCat的名字:{},性别:{},年龄:{},品种:{},眼睛:{}'.format(self.name,self.sex,self.age,self.breed,self.eye_color)

if __name__ == '__main__':
    dog=PetDog("小黄","公",2,"柴犬")
    dog1=PetDog("大朗","公",3,"金毛")
    dog2=PetDog("熊大","公",4,"柴犬")
    cat=PetCat("小美","母",2,"美短","黑色")
    cat1=PetCat("小花","母",3,"狸花猫","蓝色")
    cat2=PetCat("三七","母",4,"英短","灰白色")
    d=PetShop("晓萌宝贝",[dog,dog1,dog2])
    c=PetShop("晓萌宝贝",[cat,cat1,cat2])
    
    d.show()
    c.show()
    dog.eat()
    dog.cry()
    cat1.eat()
    cat2.cry()
    print(dog)
    print(cat2)

运行结果如下:

3.  学⽣类Student:
属性:学号,姓名,年龄,性别,成绩班级类 Grade:
属性:班级名称,班级中的学⽣ 【使⽤列表存储学⽣】
⽅法:
        1. 查看该班级中的所有学⽣的信息
        2. 查看指定学号的学⽣信息
        3. 查看班级中成绩不及格的学⽣信息
        4. 将班级中的学⽣按照成绩降序排序

class Student():
    def __init__(self,number,name,age,sex,score):
        self.number = number
        self.name = name
        self.age = age
        self.sex = sex
        self.score = score

    def __str__(self):
        return'【学号:{},姓名:{},年龄:{},性别:{},分数:{}】'.format(
            self.number,self.name,self.age,self.sex,self.score
        )

class Grade():
    # 加入班级名和信息列表
    def __init__(self,class_name,stu_list=None):
        self.class_name=class_name
        if stu_list == None:
            self.stu_list = []
            return
        self.stu_list = stu_list
    # 展示信息
    def show(self):
        for stu in self.stu_list:
            print(stu)
    # 查找指定学号的学生信息
    def show_number(self,nums):
        for stu in self.stu_list:
            if stu.number == nums:
                print(f'学号{nums}的学生是:{stu}')
                break
        else:
            print('学生信息不存在!')
    # 成绩不及格的学生信息
    def fall(self):
        flag = False
        for stu in self.stu_list:
            if stu.score < 60:
                flag = True
                print(f'{self.class_name}班,不及格学生信息是:{stu}')

        if not flag:
            print(f'{self.class_name}班没有不及格学生')

    def sort(self):
    # 冒泡排序法;对指定索引位置的元素进行排序
    #     for i in range(len(self.list)-1):
    #         for j in range(len(self.list)-1-i):
    #             if self.list[j][4] > self.list[j+1][4]:
    #                 self.list[j],self.list[j+1] = self.list[j+1],self.list[j]
    #     print(self.list)

    # sort+匿名函数排序法
        self.stu_list.sort(key = lambda stu:stu.score,reverse=True)
        for x in self.stu_list:
            print(x)

if __name__ == '__main__':
    number = ["1001","1002","1003","1004","1005"]
    name = ['李白','韩信','安其拉','王昭君','李信']
    age = [16,17,15,20,19]
    sex = ['男','男','女','男','女']
    scrore = [77,69,53,89,91]

    # 用一个容器装这些信息
    stus =[]
    for i in range(len(number)):
        # 循环初始化加入列表中的信息
        stu = Student(number[i],name[i],age[i],sex[i],scrore[i])
        stus.append(stu)

    grade=Grade('无敌小王子',stus)
    grade.show()
    grade.show_number("1003")
    grade.fall()
    grade.sort()

运行结果如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值