python面向对象之练习题2

练习题

需求:

  1. 士兵 可以 花钱买一个AK47
  2. 士兵 可以 用开开火
  3. 士兵 可以 买弹夹
  4. 士兵 可以 上子弹
  5. 士兵 可以 给 枪 添加子弹
  6. 枪 需要弹夹和有子弹的情况下,借助士兵扣动扳机 才能开火
  7. 枪 借助 人 可以 添加 弹夹
  8. 弹夹中有子弹数量和价格
'''枪'''
class Gan:
    dic = {
        "AK47":2000,
        "M4A":1000,
        "ATM":10000
    }
    def __init__(self,name,prize):
        if Gan.dic.get(name):
            self.name = name
            m = Gan.dic.get(name)
            print(m)
            if prize >= m:
                self.prize = m
            else:
                raise "钱不够"
            self.zd = None
        else:
            raise "没有这把枪"

    # 添加弹夹
    def add_zd(self,zd):
        self.zd = zd

    def FireStarter(self):
        if self.zd.nums <= 0:
            print("没有子弹,没办法开火")
        else:
            self.zd.nums -= 1
            print(f"突突突突突突突突.....,子弹数量为{self.zd.nums}")
'''士兵'''
class Sb:
    def __init__(self,name,money):
        self.name = name
        self.money = money
        self.gan = None
        self.zd = None

    # 买枪
    def buy_gan(self,gan_name,gan_money):
        if self.money >= gan_money:
            gan = Gan(gan_name,gan_money)
            self.gan = gan
            self.money -= gan_money
            print(f'{self.name} 购买了 {gan_name}')
            return gan
        else:
            print(f'钱不够')


    # 买弹夹
    def buy_zd(self,zd_prize):
        if zd_prize > 1000:
            zd = Zd(zd_prize)
            if self.money >= zd.prize:
                self.zd = zd
                self.money -= zd_prize
                print(f'{self.name} 购买了一个弹夹,里面有{zd.nums} 颗子弹')
            else:
                print(f'{self.name} 钱不够')
        else:
            print("买子弹拿的钱不够")

    # 给枪添加弹夹
    def get_gan_add_zd(self):
        if not self.gan:
            print("没有枪")
            return False

        if not self.zd :
            print("没有弹夹")
            return  False


        # 给枪添加弹夹
        self.gan.add_zd(self.zd)
        print(f'{self.name} 给 {self.gan.name} 增加了一个弹夹  弹夹中有 {self.zd.nums}颗子弹')


    # 添加子弹
    def add_bullet(self,nums):
        if self.zd:
            if nums > 0:
                self.zd.add_Bullet(nums)
                self.money -= nums * 10
            else:
                print("购买子弹数量有异常")
        else:
            print("没有弹夹")

    # 扣动扳机
    def press_the_trigger(self):
        if not self.gan:
            print("没有枪")
            return False
        if not self.zd:
            print("没有弹夹")
            return False
        print(f'{self.name}已经扣动扳机了')
        self.gan.FireStarter()


'''弹夹'''
class Zd:
    def __init__(self,prize):
        self.nums = 100
        self.prize = prize

    def add_Bullet(self,nums):
        self.nums += nums



plf = Sb('士兵',20000)


ak47 = plf.buy_gan('AK47',3000)
zd = plf.buy_zd(3000)
plf.get_gan_add_zd()
plf.press_the_trigger()
plf.press_the_trigger()
plf.press_the_trigger()
plf.press_the_trigger()
plf.press_the_trigger()

# 添加子弹
plf.add_bullet(-300)
# print(f"弹夹的数量还有{plf.zd.nums}")
# print(f"弹夹的数量还有{plf.gan.zd.nums}")
原文地址:https://www.cnblogs.com/plf-Jack/p/11059032.html