python中面向对象和类的使用——习题

1.需求
1.小明和小美都爱跑步
2.小美体重45.0公斤
3.小明体重75.0公斤
4.每次跑步都会减少0.5公斤
5.每次吃东西都会增加1公斤

class People():
    def __init__(self,name,weight):  定义初始化方法,把对象和属性打包封装在一起赋值变量
        self.name = name
        self.weight = weight
    def __str__(self):    定义str方法
        return '我的名字是%s,体重是%.2f斤' %(self.name,self.weight)
    def run(self):   定义跑的方法
        print('%s 爱跑步' %self.name)
        self.weight -= 0.5 
    def eat(self):   定义吃的方法
        print('%s吃东西' %self.name)
        self.weight += 1
xiaoming = People('小明',75.0)   创建对象
xiaoming.run()   调用run()方法
print(xiaoming)    直接使用str方法

xiaomei = People('小美',45.0)
xiaomei.eat()
print(xiaomei)
打印结果
小明 爱跑步
我的名字是小明,体重是74.50斤
小美吃东西
我的名字是小美,体重是46.00

2.习题
房子有户型,总面积和家具名称列表
新房子没有任何的家具
家具有名字和占地面积,其中
(bed)床:占4平米
(wardrobe)衣柜:占2平米
(table)餐桌:占1.5平米
将以上三件家具添加到房子中,打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表

定义家具类
class Furniture():
    def __init__(self,name,area):  定义初始化方法封装对象和属性,self就是对象
        self.name = name    
        self.area = area
    def __str__(self):     定义str方法返回值
        return '[%s]占地面积:%.2f' %(self.name,self.area)
# bed = Furniture('bed',4)    创建对象
# print(bed)  初始化对象
定义房子的类
class House():                
    def __init__(self,house_type,area):       把对象和属性封装起来
        定义类属性也就是变量
        self.house = house_type         房子户型
        self.area = area   房子面积
        self.free_area = area   剩余面积
        self.item_list = []      家具名称列表,空房子列表为空
     定义方法其实就是写函数
    def __str__(self):    定义str方法,返回值
        return ('户型:%s\n总面积:%.2f[剩余面积:%.2f]\n家具:%s'
                %(self.house,self.area,self.free_area,self.item_list))
    def add_item(self,item):  添加家具及判断家具和房子面积
        if item.area > self.free_area:  判定家具面积大于房子剩余面积
            print('%s的面积太大,无法添加' %(item.name))   
            return False   
         添加家具
        self.item_list.append(item.name)   
        self.free_area -= item.area  计算剩余面积
家具类实列化
bed = Furniture('bed',4)   
wardrobe = Furniture('wardrobe',2)
table = Furniture('table',1.5)
房子类实列化
my_house = House('别墅',500)  房子名称和大小
调用add_item()添加家具
my_house.add_item(bed)      添加床
my_house.add_item(wardrobe)   衣柜
my_house.add_item(table)   餐桌桌子
print(my_house)  打印
打印结果
户型:别墅
总面积:500.00[剩余面积:492.50]
家具:['bed', 'wardrobe', 'table']

3.习题
使用类和对象实现对栈的基本操作

定义类
class Stack():  类名称
    def __init__(self):    定义初始化方法,self就是对象
        self.stack = []     属性就是变量定义一个空栈
    def push(self,value):     push入栈
        self.stack.append(value)
        return True
    def pop(self):      pop出栈
        if self.stack:   先判断栈是否为空,空即假,非空为真
            item = self.stack.pop()    随机弹出一个元素,默认最后一个
            return item    返回弹出值信息
        else:              为空
            return False  返回False
    def top(self):      求栈的栈顶元素方法
        if self.stack:        判断不为空
            return self.stack[-1]  栈的下表为-1
        else:
            return False   栈为空返回False
    def length(self):        求栈的长度
        return len(self.stack)   直接使用len()函数求长度
    def view(self):            查看栈的元素
        return ','.join(self.stack)    以逗号为间隔把元素连接起来

s = Stack()   创建对象
s.push('1')   入栈
s.push('2')
s.push('0')
item = s.pop()  出栈
print(s.view())   查栈的元素
打印结果
1,2   栈的元素

4.习题
士兵瑞恩有一把ak47
士兵可以开火(开火扣动的是班级)
抢能够发射子弹(把子弹打出去)
抢能够装子弹–增加子弹数量

class Gun(object):    定义抢类
    def __init__(self,model):   抢的名字model  
        self.model = model        
        self.bullet_count = 0   子弹数为0
    def add_bullet(self,count):  给抢添加子弹
        self.bullet_count += count     
    def shoot(self):          设计
        if self.bullet_count <= 0 :   挡枪里面的子弹数小于等于0
            print('%s没有子弹' %(self.model))   打印没有子弹
        else:    
            self.bullet_count -= 1  否则每射击一次子弹数量减1,求子弹余数
            print('%s的子弹数量为%s' %(self.model,self.bullet_count))  打印子弹余数
class Soldier(object):   定义士兵类
    def __init__(self,name):   士兵名字
        self.name =name     
        self.gun = None    士兵没有抢
    def fire(self):      士兵开枪
        if self.gun == None:   判断=None
            print('%s没有枪' %(self.name))  打印没有抢
        else:
            self.gun.add_bullet(5)   否则给抢添加5颗子弹
            self.gun.shoot()     射击
ak47 = Gun('AK47')         实列化抢
ak47.add_bullet(10)    给抢添加子弹
ak47.shoot()       射击
ruien = Soldier('RE')    实列化士兵
ruien.gun = ak47       给士兵枪
ruien.fire()  士兵开枪
打印结果
AK47的子弹数量为9
AK47的子弹数量为13
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值