【python】面向对象的封装、继承、多态的练习题

一、摆放家具
需求:
1)房子有户型,总面积和家具名称列表
    新房子没有任何的家具
2)家具有名字和占地面积,其中
    床:占4平米
    衣柜:占2平面
    餐桌:占1.5平米
3)将以上三件家具添加到房子中
4)打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表
class Furniture():
    def __init__(self,name,area):
        self.name = name
        self.area = area

    def info(self):
        print('{}占地{}平米'.format(self.name,self.area))

class House():
    def __init__(self,house_type,area):
        self.house_type = house_type
        self.area = area
        self.freeArea = area
        self.furnitureList = []

    def infos(self):
        print('户型:{},总面积:{},剩余面积:{},家具:{}'.format(self.house_type,self.area,self.freeArea,self.furnitureList))

    def add_furniture(self,furnitures):
        if furnitures.area > self.freeArea:
            print('{}面积太大了,放不下'.format(furnitures.name))
            return
        self.furnitureList.append(furnitures.name)
        self.freeArea -= furnitures.area

bed = Furniture('床',20)
bed.info()
wardrobe = Furniture('衣柜',2)
wardrobe.info()
desk = Furniture('餐桌',4.5)
desk.info()

my_house = House('两室一厅',100)

my_house.add_furniture(bed)
my_house.add_furniture(wardrobe)
my_house.add_furniture(desk)
my_house.infos()
二、需求:
    1)士兵瑞恩有一把AK47
    2)士兵可以开火(士兵开火扣动的是扳机)
    3)枪 能够 发射子弹(把子弹发射出去)
    4)枪 能够 装填子弹 --增加子弹的数量
class Gun():
    def __init__(self,type):
        self.type = type
        self.bullet_count = 0

    def add_bullet(self,count):
        self.bullet_count += count

    def send_bullet(self):
        if self.bullet_count <=0:
            print('{}没有子弹了。。。。'.format(self.type))
            return
        self.bullet_count -= 1
        print('{}发射了{}子弹'.format(self.type,self.bullet_count))

class Soldier():
    def __init__(self,name,gun):
        self.name = name
        self.gun = gun

    def fire(self):
        if self.gun == None:
            print('{}没有枪'.format(self.name))
            return
        self.gun.add_bullet(300)
        self.gun.send_bullet()

ak47 = Gun('AK47')
ryan = Soldier('Ryan',ak47)
ryan.fire()
三、编写程序实现乐手弹奏乐器。乐手可以弹奏不同的乐器从而发出不同的声音。可以弹奏的乐器包括二胡、钢琴和琵琶。
实现思路及关键代码:
    1)定义乐器类Instrument,包括makeSound()方法,此方法中乐器声音:"乐器发出美妙的声音!"
    2)定义乐器类的子类:二胡Erhu、钢琴Piano和小提琴Violin
    二胡Erhu声音:"二胡拉响人生"
    钢琴Piano声音:"钢琴美妙无比"
    小提琴Violin声音:"小提琴来啦"
    3)用main类,多态的方式对不同乐器进行切换
class Instrument():
    def makeSound(self):
        print('乐器发出美妙的声音!')

class Erhu(Instrument):
    def makeSound(self):
        print('二胡拉响人生')

class Piano(Instrument):
    def makeSound(self):
        print('钢琴美妙无比')

class Violin(Instrument):

    def makeSound(self):
        print('小提琴来啦')

class Main():
    def play(self,obj):
        #print('请问你要弹奏什么乐器?')
        obj.makeSound()

main = Main()
v = Violin()
p = Piano()
erhu = Erhu()
main.play(v)

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值