Python进阶与提高3--面向对象封装案例

一、小明爱跑步

需求:
1、小明体重 75公斤
2、小明每次跑步体重会减少0.5公斤
3、小明每次吃东西体重会增加1公斤

class Person:
    def __init__(self, new_name, new_weight):
        self.name = new_name
        self.weight = new_weight
    def run(self):
        self.weight -= 0.5
    def eat(self):
        self.weight+= 1
    def __str__(self):
        return '我的名字是%s, 体重为%.2f公斤 ' % (self.name, self.weight)
xiaoming = Person('小明',75)
xiaoming.run()
xiaoming.eat()
print(xiaoming)

输出为:

我的名字是小明, 体重为75.50公斤

二、小明爱跑步扩展

需求:
1、小明和小华都爱跑步
2、小明体重75公斤
3、小华体重60公斤
4、每次吃东西体重都会增加1公斤
5、每次跑步体重都会减少0.5公斤

class Person:
    def __init__(self, new_name, new_weight):
        self.name = new_name
        self.weight = new_weight
    def __str__(self):
        return '我的名字是%s, 体重为%.2f公斤' % (self.name, self.weight)
    def run(self):
        self.weight -= 0.5
    def eat(self):
        self.weight += 1
xiaoming = Person('小明', 75)
xiaohua = Person('小华', 60)
xiaoming.run()
print(xiaoming)
xiaohua.eat()
print(xiaohua)

输出为:

我的名字是小明, 体重为74.50公斤
我的名字是小华, 体重为61.00公斤

三、摆放家具

需求:
1、房子有户型(三室一厅),总面积(100平方米)和家具名称列表(新房子没有家具)
2、家具有名称,占地面积,其中,床占地4平方米,餐桌占地1.5平方米,柜子占地2平方米
3、将以上三个家具添加到房子中
4、打印房子时,要求输出:户型、总面积、剩余面积、家具名称列表

class HouseItem:
    def __init__(self, new_name, new_area):
        self.name = new_name
        self.area = new_area

    def __str__(self):
        return '%s 的占地面积为 %.2f' % (self.name, self.area)


class House:
    def __init__(self, new_house_style, new_area):
        self.house_style = new_house_style
        self.area = new_area
        self.free_area = new_area
        self.item_list =[]

    def add_item(self, item):
        if item.area > self.area:
            print("%s 太大了,不能添加到房子中!" % item)
            return
        self.item_list.append(item.name)
        self.free_area -= item.area

    def __str__(self):
        return '户型:%s 总面积:%.2f 剩余面积:%.2f 添加的家具有:%s' % (self.house_style, self.area, self.free_area, self.item_list)



bed = HouseItem('床',4)
chest = HouseItem('衣柜', 2)
table = HouseItem('餐桌', 1.5)
house = House('三室一厅', 100)
house.add_item(bed)
house.add_item(chest)
house.add_item(table)
print(house)

输出为:

户型:三室一厅 总面积:100.00 剩余面积:92.50 添加的家具有:['床', '衣柜', '餐桌']

四、士兵突击

需求:
1、士兵小虎有一把AK-47
2、士兵可以开火
3、枪可以发射子弹
4、枪需要装填以增加子弹数量

# 先定义枪类
class Gun:
    def __init__(self, new_name):
        self.name = new_name
        self.bullet_number = 0

    def add_bullet(self, number):
        self.bullet_number += number

    def shoot(self):
        if self.bullet_number <= 0:
            print("没有子弹了,请装填子弹!")
            return
        else:
            print("发射子弹!")
            self.bullet_number -= 1


# 再定义士兵类

class Soldier:

    def __init__(self, new_name):
        self.name = new_name
        self.soldier_gun = None

    def fire(self):
        if self.soldier_gun is None:
            print("%s 还没有枪呢" % self.name)
            return
        print("冲! fire!")
        #让枪装填子弹
        self.soldier_gun.add_bullet(30)
        self.soldier_gun.shoot()


AK_47 = Gun('AK-47')
xiaohu = Soldier('小虎')
xiaohu.soldier_gun = AK_47
xiaohu.fire()

输出为:

冲! fire!
发射子弹!

以上案例均参考自黑马程序员,本人还是python初学者,望各位大佬不喜勿喷,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值