Python面向对象练习-士兵开枪问题

1)需求:
1.士兵瑞恩有一把AK47
2.士兵可以开火(士兵开火扣动的是扳机)
3.枪能够发射子弹–把子弹发射出去
4.枪能够装填子弹–增加子弹的数量
2)分析:
由于士兵瑞恩有一把AK47,士兵可以开火。故应该创建两个类:一个是士兵类,一个是枪类
枪类(Gun):
(1)属性:型号(model),弹夹中子弹的数目(bullet_count)
(2)方法:射击子弹(shoot),添加子弹(add_bullet)
士兵类(soldier):
(1)属性:姓名(name),枪名(Gun)
(2)方法:开火(fire)
3)代码的实现:

class Gun:
    def __init__(self,model,bullet_count):
        self.model = model
        self.bullet_count = bullet_count
    def __str__(self):
        return "%s,它有%d颗子弹" %(self.model,self.bullet_count)
    def shoot(self):
        if self.bullet_count == 0:
            return False
        else:
            self.bullet_count -= 1
            print("正在射击...已经射中目标!")
            return True
    def add_bullet(self,count):
            self.bullet_count += count
            print("已经填充了%d颗子弹" % count)
            return True
class Soldier:
    def __init__(self,name):
        self.name = name
        self.gun = None
    def __str__(self):
        return "%s有一把%s" % (self.name,self.gun)
    def fire(self):
        if self.gun == None:
            return False
        else:
            self.gun.add_bullet(10)
            self.gun.shoot()
            return True

B = Gun("ak47",30) #将枪实例化
A = Soldier("恩德")
A.gun = B  #将实例化的枪给士兵
A.fire()
print(A)

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

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值