A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小江哥 于 2019-1-19 11:23 编辑

应用:老王开枪



1. 人类
属性
       姓名
       血量
       持有的枪
方法
       安子弹
       安弹夹
       拿枪(持有抢)
       开枪

2. 子弹类
属性
      杀伤力
方法
      伤害敌人(让敌人掉血)

3. 弹夹类
属性
       容量(子弹存储的最大值)
       当前保存的子弹
方法
        保存子弹(安装子弹的时候)
        弹出子弹(开枪的时候)

4. 枪类
属性
       弹夹(默认没有弹夹,需要安装)
方法
       连接弹夹(保存弹夹)
       射子弹

参考代码
[Python] 纯文本查看 复制代码
class Person(object):
    """定义一个人类"""
    def __init__(self, new_name):

        """完成对一个人对象的初始化后"""

        self.name = new_name

        self.gun = None # 用来存储枪对象的引用

        self.hp = 100 # 记录人的血量

 
    def __str__(self):
        """返回人对象的描述信息"""

        if self.gun:

            return "%s剩余血量是:%d 有枪, %s" % (self.name, self.hp, self.gun)

        else:

            if self.hp == 0:

                return "%s已经挂了....." % self.name

            else:

                return "%s剩余血量是:%d 没有枪" % (self.name, self.hp)

 
    def install_bullet_2_clip(self, bullet_temp, clip_temp):

        """安装子弹到弹夹中"""

        # 弹夹.保存(子弹)

        clip_temp.save_bullet(bullet_temp)

 
    def install_clip_2_gun(self, clip_temp, gun_temp):

        """安装弹夹到枪中"""

        # 枪.保存(弹夹)

        gun_temp.save_clip(clip_temp)

 
    def get_gun(self, gun_temp):

        """让人拿起枪"""

        self.gun = gun_temp

 
    def pull_trigger(self, enemy_temp):

        """让枪发射子弹射向敌人"""

        # 枪.发射(敌人)

        self.gun.fire(enemy_temp)

 
    def lose_hp(self, power_temp):

        """敌人掉血"""

        self.hp -= power_temp

        if self.hp < 0:

            self.hp = 0

 
 
class Gun(object):
    """定一个枪类"""
    def __init__(self, new_name):

        """完成对枪对象的初始化"""

        self.name = new_name

        self.clip = None # 用来存储这个枪中的弹夹

 
    def __str__(self):
        """返回这个枪对象的描述信息"""

        # 因为下面的代码中需要获取self.clip指向的对象的描述信息,因此

        # self.clip指向的对象中的__str__方法会被自动调用

        return  "枪(%s)里有弹夹,%s" % (self.name, self.clip)

 
    def save_clip(self, clip_temp):

        """保存弹夹"""

        self.clip = clip_temp

 
    def fire(self, enemy_temp):

        """向敌人发射一颗子弹"""

        # 让弹夹弹出一颗子弹

        # 弹夹.弹出一颗子弹()

        bullet = self.clip.pop_bullet()

        if bullet:

            # 让子伤害敌人

            # 子弹.掉血(敌人)

            bullet.hit_enemy(enemy_temp)

        else:

            print("%s中没有子弹了" % self.name)

 
 
class Clip(object):
    """定义一个弹夹类"""
    def __init__(self, new_max):

        """完成弹夹对象的初始化"""

        self.max = new_max

        self.bullets = []  # 用来存储所有的子弹的引用

 
    def __str__(self):
        """返回弹夹的描述信息"""

        return "弹夹的信息是: (%d/%d)" % (len(self.bullets), self.max)

 
    def save_bullet(self, bullet_temp):

        """保存这个一颗子弹"""

        self.bullets.append(bullet_temp)

 
    def pop_bullet(self):
        """返回最上面的一颗子弹"""

        if self.bullets:

            bullet = self.bullets.pop()

            return bullet

        else:

            return None

 
 
class Bullet(object):
    """定一个子弹类"""
    def __init__(self, new_power):

        """完成对子弹对象的初始化"""

        self.power = new_power  # 子弹的威力

 
    def hit_enemy(self, enemy_temp):

        """让敌人掉血"""

        # 敌人.掉血()

        enemy_temp.lose_hp(self.power)

 
 
def main():
    """完成整个程序的控制"""
    # 创建老王对象
    lao_wang = Person("老王")

 
    # 创建一个枪
    ak47 = Gun("AK47")

 
    # 创建一个子弹
    bullet = Bullet(20)  # 20表示杀伤力

 
    # 创建一个弹夹
    clip = Clip(10)  # 10表示这个弹夹最大的容量

 
    # 让老王把子弹安装到弹夹中
    # 老王.安装子弹(子弹, 弹夹)
    lao_wang.install_bullet_2_clip(bullet, clip)

 
    # 让老王把弹夹安装到枪中
    # 老王.安装弹夹(弹夹,枪)
    lao_wang.install_clip_2_gun(clip, ak47)

 
    # 测试枪的信息
    # print(ak47)

 
    # 老王拿起枪
    # 老王.拿起(枪)
    lao_wang.get_gun(ak47)

    print(lao_wang)

 
    # 创建一个敌人
    enemy = Person("隔壁老宋")

 
    # 老王向敌人扣扳机
    # 老王.扣扳机(敌人)
    lao_wang.pull_trigger(enemy)

    print(enemy)
 
    lao_wang.pull_trigger(enemy)

    print(enemy)

 
    bullet = Bullet(30)

    lao_wang.install_bullet_2_clip(bullet, clip)

 
    bullet = Bullet(90)

    lao_wang.install_bullet_2_clip(bullet, clip)

 
    lao_wang.pull_trigger(enemy)

    print(enemy)

    lao_wang.pull_trigger(enemy)

    print(enemy)

 
if __name__ == '__main__':
    main()

给程序传参数
[Python] 纯文本查看 复制代码
import sys
 
print(sys.argv)

运行结果:

2 个回复

倒序浏览
一个人一座城0.0 来自手机 中级黑马 2019-1-19 11:45:21
沙发
看一看。
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马