python面向对象之练习题2
练习题
需求:
- 士兵 可以 花钱买一个AK47
- 士兵 可以 用开开火
- 士兵 可以 买弹夹
- 士兵 可以 上子弹
- 士兵 可以 给 枪 添加子弹
- 枪 需要弹夹和有子弹的情况下,借助士兵扣动扳机 才能开火
- 枪 借助 人 可以 添加 弹夹
- 弹夹中有子弹数量和价格
'''枪'''
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}")
python面向对象之练习题2的更多相关文章
- python面向对象之练习题1
定义管理员类,管理员有属性(name,password),可以创建学校.创建课程.创建老师 定义老师类,老师有属性(name,password),可以添加课程.给学生打分,但发现学生没有购买课程时,不 ...
- python 面向对象进阶之内置方法
一 isinstance(obj,cls)和issubclass(sub,super) 1.1,isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(obj ...
- python 面向对象初级篇
Python 面向对象(初级篇) 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发" ...
- Python 面向对象 基础
编程范式概述:面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现 ...
- python面向对象进阶(八)
上一篇<Python 面向对象初级(七)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象(进阶篇)
上一篇<Python 面向对象(初级篇)>文章介绍了面向对象基本知识: 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- python 面向对象编程学习
1. 问题:将所有代码放入一个py文件:无法维护 方案:如果将代码才分放到多个py文件,好处: 1. 同一个名字的变量互相不影响 2.易于维护 3.引用模块: import module 2.包:解决 ...
- Python面向对象详解
Python面向对象的"怜人之处" Python的待客之道--谁能进来 Python的封装--只给你想要的 Python的继承--到处认干爹 Python的多态--说是就是
- python 面向对象和类成员和异常处理
python 面向对象 你把自己想象成一个上帝,你要创造一个星球,首先你要把它揉成一个个球,两个直径就能创造一个球 class star: '''名字(name),赤道直径(equatorial di ...
随机推荐
- 微信小程序GET 400 (Bad Request)解决方案
解决了接口的问题,接下来就是请求不正确,得不到数值 400 (Bad Request) 可以用这个方法:wx.request传入的对象参数中的head改一下 wx.request({ header: ...
- rapidxml读xml文件
student.xml文件内容: int readXML(void) { rapidxml::file<> file("student.xml"); rapidxml: ...
- 理解CART决策树
CART算法 原理 CART全称为Classification and Regression Tree. 回归树 相比ID3,CART遍历所有的特征和特征值,然后使用二元切分法划分数据子集,也就是每个 ...
- windows 删除进程
win+R打开doc窗口 netstat -ano |findstr "8888" tskill 10120 结束进程
- 解决maven 在intellij IDEA 下载依赖包速度慢的问题
解决maven 在intellij IDEA 下载依赖包速度慢的问题 参考:https://www.jianshu.com/p/63a593700ebc
- Build ear package
build 单个service ear TestService -> TestService 修改file Location地址(放在你指定的位置) 点击Build Archive succes ...
- Update(Stage4):sparksql:第3节 Dataset (DataFrame) 的基础操作 & 第4节 SparkSQL_聚合操作_连接操作
8. Dataset (DataFrame) 的基础操作 8.1. 有类型操作 8.2. 无类型转换 8.5. Column 对象 9. 缺失值处理 10. 聚合 11. 连接 8. Dataset ...
- [C++基本语法:从菜鸟变成大佬系列,就像1,2,3那么简单](七):C++的修饰符
修饰符是什么? C++允许char,int和double数据类型在它们之前有修饰符.修饰符用于改变基本类型的含义,以便更精确地满足各种情况的需要. 这里列出了数据类型修饰符: signed unsig ...
- C++关键字总结【新手必学】
const 关键字——常量const 与definedefine是预编译器的编译指令,它从C语言兼容下来,工作方式与文本编辑器中的全局搜索和替换相似.define定义的常量的意义在它开始的地方持续到文 ...
- C语言 1字节signed char的范围为什么是-128~127?
参考 1. 关于 -128 ,+128,-0,+0,-1 的反码补码 | 博客园 2. 八位二进制数为什么表示范围(-128~~+127)理解 | 博客园 无符号单字节范围 无符号单字节unsigne ...