强化练习

  • 应用:老王开枪


    老王开枪.png
  • 人类
    • 属性
      姓名
      血量
      持有的枪
    • 方法
      安子弹
      安弹夹
      拿枪(持有抢)
      开枪
  • 子弹类
    • 属性
      杀伤力
    • 方法
      伤害敌人(让敌人掉血)
  • 弹夹类
    • 属性
      容量(子弹存储的最大值)
      当前保存的子弹
    • 方法
      保存子弹(安装子弹的时候)
      弹出子弹(开枪的时候)
  • 枪类
    • 属性
      弹夹(默认没有弹夹,需要安装)
    • 方法
      连接弹夹(保存弹夹)
      射子弹
  • demo:参考代码
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()
  • 结果:


    结果.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容