zoukankan      html  css  js  c++  java
  • 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}")
    
  • 相关阅读:
    如何处理DateTime日期时间格式
    ASP.NET访问域用户(AD活动目录)信息的类
    多层代理取真实IP地址
    自动播放MP3文件
    Windows7 下用 grub4dos 安装 Ubuntu
    javascript判断iphone/android手机横竖屏模式
    C#一个到多个Cookie的字符串添加到CookieCollection集合中【isGood代码】
    css 文本对齐4种方法
    让VirtualBox虚拟机实现开机自动后台运行
    MSXML2, XmlHttpClass基础
  • 原文地址:https://www.cnblogs.com/plf-Jack/p/11059032.html
Copyright © 2011-2022 走看看