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 ...
随机推荐
- 初始Linux软硬链接
转载 https://blog.csdn.net/libaineu2004/article/details/85918682 用实践让你明白"软链接"和"硬链接" ...
- 【PAT甲级】1074 Reversing Linked List (25 分)
题意: 输入链表头结点的地址(五位的字符串)和两个正整数N和K(N<=100000,K<=N),接着输入N行数据,每行包括结点的地址,结点的数据和下一个结点的地址.输出每K个结点局部反转的 ...
- Java面向对象private
1. 类 package cn.itcast.day06.demo03; /* 对于基本类型当中的boolean值,Getter方法一定要写成isXxx的形式,而setXxx规则不变. */ publ ...
- velocity的 ${} 、$!{}、 !${}
${abc} //-------过滤变量中的HTML标签 $!{abc} //-------原样输出表达式,"!"符号表示如果可以取到值则显示值,如果取不到值或值为null, ...
- SSIS部署后执行失败,无法将保护的XML节点解密
将包属性中的 protectionLevel 设置成DontSaveSensitive 即可.
- 正确的上网姿势:ubuntu18.04使用clash
本文为本人将CFW(Clash For Windows)上的配置文件应用到ubuntu上面的操作备忘,仅供个人使用 首先下载已经打包的clash压缩包:https://github.com/Dream ...
- 在Windows上使用Docker运行.NET COE应用
在Windows上使用Docker运行.NET COE应用 执行步骤: 1:安装Docker For Windows(注意:docker for windows-64位Windows 10.必须开启 ...
- org.springframework.web.multipart.MultipartException: The current request is not a multipart request
今天做图片上传的碰到这个问题,查找原因是html请求的方式问题.from中涉及到图片上传的就要用post提交方式.否则就会报这个错误.如果已经是post的提交方式了还有这个错...还有两种解决方法. ...
- PB specified database is invalid
拷贝资料库到其他机器,可以重新配置ODBC ,如果还是报错,建议删除log .
- Vue学习笔记:v-bind 属性动态绑定
v-bind 的作用 v-bind指令可以将节点的属性与动态表达式绑定在一起 v-bind可以绑定html元素中的各种属性 例如: <a v-bind:href="xxx"& ...