Python之面向对象(综合练习)

1.模拟栈操作原理

代码:

# 栈操作

class Stack():
    # 初始化
    def __init__(self):
        # 定义了一个空栈,stack:类的属性
        self.stack = []
    # 进栈
    def push(self,value):
        self.stack.append(value)
        return True
    # 出栈
    def pop(self):
        # 先判断栈是否为空
        if len(self.stack) == 0:
            return False
        else:
            item = self.stack.pop()
            return item
    # 栈顶元素
    def top(self):
        # 先判断栈是否为空
        if self.stack:
            return self.stack[-1]
        else:
            return False
    # 是否为空栈
    def isnone(self):
        if len(self.stack) == 0:
            return True
        else:
            return False
    # 栈的长度
    def length(self):
        return len(self.stack)
    def view(self):
        return ','.join(self.stack)

# 创建对象
stack1 = Stack()

# 调用方法
print(stack1.isnone())
print(stack1.length())
print(stack1.push('westos'))
print(stack1.length())
print(stack1.isnone())
print(stack1.pop())
print(stack1.isnone())
print(stack1.top())
print(stack1.push('linux'))
print(stack1.push('python'))
print(stack1.view())

运行结果:
在这里插入图片描述
2.家具放置问题

需求:

1.房子有户型,总面积和家具名称列表,新房子没有任何的家具

2.家具有名字和占地面积,其中
          床: 占4平米
        衣柜: 占2平面
        餐桌: 占1.5平米

3.将以上三件家具添加到房子中

4.打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表

分析:

# 1.由于要将家具放入房子中,所以需要先创建家具类

# 2.家具类:
#   (1)属性:名字(name),占地面积(area)
#   (2)对象:床(bed),衣柜(closet),餐桌(table)

# 3.房子类:
#   (1)属性:户型(house_style),总面积(zarea),
#      家具名称列表(namelist) (新房子没有任何的家具,即初始家具名称列表为空列表)
#      剩余面积(farea) (由于打印房子时,要求输出'剩余面积',所以剩余面积为房子的隐含属性)
#   (2)方法:添加家具(add_item)

代码:

# 1.定义家具类
class furniture():
    # 初始化; name,area:类的属性(家具名称 占地面积)
    def __init__(self,name,area):
        self.name = name
        self.area = area
    # str方法:规范化(输出信息)
    def __str__(self):
        return '%s占%.2f平米' %(self.name,self.area)

# 1).创建家具对象
bed = furniture('bed',4)
closet = furniture('closet',2)
table = furniture('table',1.5)

# print(bed)
# print(closet)
# print(table)

# 2.定义房子类
class house():
    # 初始化, house_style zarea:类的属性(户型,总面积)
    def __init__(self,house_style,zarea):
        self.house_style= house_style
        self.zarea = zarea
        # farea: 类的属性(剩余面积)
        self.farea = zarea
        # namelist: 类的属性(家具名称列表)
        self.namelist = []
    # str方法:规范化(输出信息)
    def __str__(self):
        return '户型:%s 总面积:%.2f 剩余面积:%.2f 家具:%s' %(self.house_style,self.zarea,self.farea,self.namelist )
    ### 定义添加家具方法
    # item:家具类的一个对象
    def add_item(self,item):
        #  1.判断房子剩余面积是否能够容纳要添加的家具面积
        if self.farea >= item.area:
            # 2.append方法:将家具添加到家具列表中
            self.namelist.append(item.name)
            # 3.计算剩余面积
            self.farea -= item.area
        else:
            print(' %s占地面积过大,无法摆放此家具.....' %item.name)

# 2).创建房子对象
house1 = house('两室一厅',50)
print(house1)
# 3).将家具添加到房子中(调用方法)
house1.add_item(bed)
print(bed)
print(house1)

house1.add_item(closet)
print(closet)
print(house1)



# 创建房子对象
house2 = house('一室一厅',5)
print(house2)
house2.add_item(bed)
print(bed)
print(house2)

# 将家具添加到房子中(调用方法)
house2.add_item(table)
print(table)
print(house2)

运行结果:
在这里插入图片描述
3.士兵开枪问题

需求:

1.士兵瑞恩有一把AK47
2.士兵可以开火(士兵开火扣动的是扳机)
3.枪 能够 发射子弹(把子弹发射出去)
4.枪 能够 装填子弹 --增加子弹的数量
Soldier                     Gun
-------------               -----------------
name                        model
gun                         bullet_count #子弹数量足够多才能完成射击的动作
-------------               -----------------
__init__(self):                 __init__(self):
fire(self):                 add_bullet(self,count):#装填子弹的
                            shoot(self):

分析:

1.由于士兵瑞恩有一把AK47,士兵可以开火。故需要先创建枪类

2.枪类(Gun):
     (1)属性:型号(model),子弹数目(bullet_count)
     (2)方法:发射子弹(shoot),装填子弹(add_bullet)
 
3.士兵类(Soldier)
     (1)属性:姓名(name),枪名(Gun)
     (2)方法:开火(fire)

代码:

# 定义枪类
class Gun():
	# 初始化
    def __init__(self,model):
        self.model = model
        self.bullet_count = 0
    # 规范化
    def __str__(self):
        return '%s有%d发子弹' %(self.model,self.bullet_count)
    # 定义方法
    def shoot(self):
        if self.bullet_count > 0:
            print('发射子弹....')
            self.bullet_count -= 1
        else:
            print('枪内无子弹,无法发射....')
    def add_bullet(self,count):
        self.bullet_count += count
        print('装填子弹:%s颗....' %count)

# 定义士兵类
class Soldier():
    # 初始化
    def __init__(self,name):
        self.name = name
        self.Gun = None
    # 定义方法(关联枪类)
    def fire(self):
        if self.Gun == None:
            print('%s还没有枪...' %self.name)
        else:
            self.Gun.add_bullet(10)
            print('开火....')
            self.Gun.shoot()

# 创建枪对象
AK47=Gun('AK47')
print(AK47)
#调用方法

AK47.add_bullet(10)
AK47.shoot()
print(AK47)

# 创建士兵对象
瑞恩=Soldier('瑞恩')
# 调用方法
瑞恩.fire()
瑞恩.Gun = AK47
瑞恩.fire()
print(AK47)

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值