1. class Person(object):
    """人类"""
    def __init__(self,name):
    super(Person,self).__init__()
    self.name = name
    self.gun = None #用来保存枪的引用
    self.hp = 100
  2.  
  3. def __str__(self):
    if self.gun:
    return "%s的血量:%d,他有枪%s"%(self.name,self.hp,self.gun)
    else:
    if self.hp>0:
    return "%s的血量:%d,他没有枪" % (self.name, self.hp)
    else:
    return "%s 已挂!!!"%(self.name)
  4.  
  5. def kou_ban_ji(self,diren):
    """让枪发射子弹去打敌人"""
    self.gun.fire(diren)
  6.  
  7. def diao_xue(self, sha_shang_li):
    """根据相应的杀伤力掉血"""
    self.hp -=sha_shang_li
  8.  
  9. def anzhuang_zidan(self,dan_jia_temp,zi_dan_temp):
    """把子弹装到弹夹中"""
    dan_jia_temp.baocun_zidan(zi_dan_temp)
  10.  
  11. def anzhuang_danjia(self,gun_temp,dan_jia_temp):
    """把弹夹安装到枪中"""
    gun_temp.baocun_danjia(dan_jia_temp)
  12.  
  13. def naqiang(self,gun_temp):
    """拿起枪的动作 """
    self.gun =gun_temp
  14.  
  15. class Gun(object):
    """枪类"""
    def __init__(self,name):
    super(Gun,self).__init__()
    self.name = name #用来记录枪的类型
    self.danjia = None
    def baocun_danjia(self,dan_jia_temp):
    self.danjia =dan_jia_temp
  16.  
  17. def __str__(self):
    return "枪的信息:%s"%(self.name)
  18.  
  19. def fire(self,diren):
    """枪从弹夹中获取子弹"""
    zidan_temp = self.danjia.tanchu_zidan()
    if zidan_temp:
    zidan_temp.dazhong(diren)
    else:
    print("弹夹中没子弹了")
  20.  
  21. class Danjia(object):
    """弹夹"""
    def __init__(self,max_num):
    super(Danjia,self).__init__()
    self.max_num = max_num #用来记录弹夹的最大容量
    self.zidan_list = []#用来记录所有的子弹的引用
  22.  
  23. def baocun_zidan(self,zi_dan_temp):
    """将子弹保存"""
    self.zidan_list.append(zi_dan_temp)
  24.  
  25. def __str__(self,):
    return "弹夹的信息为:%d/%d"%(len(self.zidan_list),self.max_num)
  26.  
  27. def tanchu_zidan(self):
    if self.zidan_list:
    return self.zidan_list.pop()
    else:
    return None
  28.  
  29. class Zidan(object):
    """子弹"""
    def __init__(self,sha_shang_li):
    super(Zidan,self).__init__()
    self.sha_shang_li = sha_shang_li #用来记录子弹的威力
  30.  
  31. def dazhong(self,diren):
    """"""
    diren.diao_xue(self.sha_shang_li)
  32.  
  33. def main():
    """用来控制整个程序的流程"""
    # 1.创建老王对象
    laowang = Person("老王")
    # 2.创建枪对象
    ak47 = Gun("Ak47")
    # 3.创建弹夹对象
    dan_jan = Danjia(20)
    # 4.创建一些子弹
    for i in range(15):
    zi_dan = Zidan(10)
    # 5.老王把子弹安装到弹夹中
    laowang.anzhuang_zidan(dan_jan, zi_dan)
  34.  
  35. # 6.老王把弹夹安装到枪中
    laowang.anzhuang_danjia(ak47,dan_jan)
  36.  
  37. #测试
    print(dan_jan)
    print(ak47)
  38.  
  39. # 7.老王拿枪
    laowang.naqiang(ak47)
    print(laowang)
    # 8.创建一个敌人
    geibi_laosong = Person("李刚")
    print(geibi_laosong)
    # 9.老王开枪打敌人
    laowang.kou_ban_ji(geibi_laosong)
    print(geibi_laosong)
    print(laowang)
  40.  
  41. laowang.kou_ban_ji(geibi_laosong)
    print(geibi_laosong)
    print(laowang)
  42.  
  43. if __name__=='__main__':
    main()
  44.  
  45. 运行结果:

  1.  

Python---老王开枪的更多相关文章

  1. day_5.12 py 老王开枪demo

    ps:2018-7-24 21:00:04 其实这部分主要是面向对象的复习!而不是面向过程 #!/usr/bin/env/python #-*-coding:utf-8-*- ''' 2018-5-1 ...

  2. day 6 老王开枪打人

    1.图示 2 程序 1)版本1:框架的搭建 def main(): '''用来控制这个程序的流程''' pass #1.创建alex对象 #2.创建1个枪对象 #3.创建1个弹夹对象 #4.创建子弹对 ...

  3. python 案例之老王开枪

  4. Python老王视频习题答案

    基础篇2:一切变量都是数据对象的引用sys.getrefcount('test') 查看引用计数变量命名不能以数字开头编码:ascii.unicode.utf-81.阅读str对象的help文档,并解 ...

  5. 老王Python培训视频教程(价值500元)【基础进阶项目篇 – 完整版】

    老王Python培训视频教程(价值500元)[基础进阶项目篇 – 完整版] 教学大纲python基础篇1-25课时1.虚拟机安装ubuntu开发环境,第一个程序:hello python! (配置开发 ...

  6. python开发之路:python数据类型(老王版)

    python开发之路:python数据类型 你辞职当了某类似微博的社交网站的底层python开发主管,官还算高. 一次老板让你编写一个登陆的程序.咔嚓,编出来了.执行一看,我的妈,报错? 这次你又让媳 ...

  7. python之路:变量与变量基本操作(老王版)

    python开发之路:变量与变量基本操作 你是一个师范大学的优秀毕业生,现在在某某小学工作. 你想:判作业真的很累,隔壁老王现在天天玩<蓝月传奇>,银行里存满了钱.唉,每节课1个小时,每个 ...

  8. 跟着老王学Python

    亲爱的朋友:     欢迎你!很高兴能在这里见到你,你能来到这里说明你真的很喜欢python,很想把python给学好!我觉的你很幸运,开始我学python的时候比较少资料,学起来也比较头疼,现在随着 ...

  9. 在昨天夜黑风高的晚上,我偷了隔壁老王的Python入门课件,由浅入深堪称完美!

    隔壁老王是一个资深码农,就业教育事业的秃顶之才昨天我下楼打酱油,看他迎面走来,满目春光我好奇的问道:老王,有什么好事,隔壁小花叫你上门了吗?老王:秘密!!我心想:哎呦~不错啊半晚之时,连猫狗都睡着了, ...

随机推荐

  1. servlet本质

    首先我们先要知道servlet是什么,这有两种解释.一是目前大多数人所说的,一个实现了servlet接口的类就可以叫作servlet.二,servlet只是一个接口.那么看起来这两点都和servlet ...

  2. C语言作业--数组

    一.PTA实验作业 题目1:7-5 数组循环左移 1. 本题PTA提交列表 2. 设计思路 定义俩个整数 n,m 定义循环变量i,j,x 定义变量k用来存放下标 定义变量number用于交换数值 定义 ...

  3. 那些在django开发中遇到的坑

    1. 关于csrf错误 CSRF(Cross-site request forgery)跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或 ...

  4. 将数组写入Plist文件中

    -(void)writeToPlist:(NSArray *)uploadingfiles  Name:(NSString *)name {                  NSMutableArr ...

  5. Django 测试驱动开发

    第一章 1.编写functional_tests.py from selenium import webdriver browser = webdriver.Firefox() browser.get ...

  6. NOIP2012 提高组 Day 2

    http://www.cogs.pro/cogs/page/page.php?aid=16 期望得分:100+100+0=0 实际得分:100+20+0=120 T2线段树标记下传出错 T1 同余方程 ...

  7. highcharts 具体参数详解

    <script type="text/javascript" src="js/jquery.min.js"></script> < ...

  8. 坑爹了多少年的html元素垂直居中问题

    原文章:https://www.w3cplus.com/css3/a-guide-to-flexbox.html 如果你的元素有固定高度的话 父元素用display: flex;height:100p ...

  9. python之路--day11---迭代器和生成器

    迭代: 迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值 为什么要有迭代器: 数据类型的取值,字符串,列表,元组依靠索引可以取值,但是字典,集合,文件这些数据类型无法 ...

  10. django处理cookie的机制

    title: django处理cookie的机制 tags: djaogo, cookie, session grammar_cjkRuby: true --- cookie的意义 在多数日常使用的网 ...