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 ...
随机推荐
- 【PAT甲级】1092 To Buy or Not to Buy (20 分)
题意: 输入两行字符串,如果第二行字符串包含于第一行字符串,输出"Yes"以及第一行字符串减去第二行字符串剩余的字符个数,否则输出"No"以及第二行字符串中不在 ...
- Java常量/变量
1. 常量 /* 常量:在程序运行期间,固定不变的量. 常量的分类: 1. 字符串常量:凡是用双引号引起来的部分,叫做字符串常量.例如:"abc"."Hello" ...
- JS中的数组创建,初始化
JS中没有专门的数组类型.但是可以在程序中利用预定义的Array对象及其方法来使用数组. 在JS中有三种创建数组的方法: var arr = new Array(1,2,3,4); var arr = ...
- Try-Catch无法正确定位异常位置,我推荐2个有效技巧
宇宙第一开发IDE Visual Studio的调试功能非常强大,平常工作debug帮助我们解决不少问题.今天分享两个异常捕获的技巧,希望能够帮助解决一些问题. 以下两种情况,我相信大家都会遇到过. ...
- Spring 的 Bean 生命周期,11 张高清流程图及代码,深度解析
在网上已经有跟多Bean的生命周期的博客,但是很多都是基于比较老的版本了,最近吧整个流程化成了一个流程图.待会儿使用流程图,说明以及代码的形式来说明整个声明周期的流程.注意因为代码比较多,这里的流程图 ...
- 中山纪中Day1--普及
早上一起,扑面是瓢泼的大雨.跨过千山万水,来到纪中门前,毅然以一种大无畏的英雄气概跨进了考场. 面对四道神题.然后,我成功过五关斩六将,A掉了2道题!!! 收获:优先队列(大.小根堆) T1:APPL ...
- 20141110的alltosun面试
今天周一,是校招的第一天,心情有点紧张,不过可以和很多同学一起去,是我紧张的心情变得稍微安静些.面试进行的时候,是学长2哥面的我,总体感觉自己的表现很糟糕,在公共场合发表言论或者演讲,一直是我的一个弱 ...
- Bugku-CTF社工篇之王晓明的日记
- 拓扑排序板子 hihocoder-1174
思路 不断删入度为1的点及其出边. 图解 #include <bits/stdc++.h> using namespace std; const int maxn=1e5+10; vect ...
- lc 0223
目录 ✅ 669. 修剪二叉搜索树 描述 解答 java py ✅ 883. 三维形体投影面积 描述 解答 my understanding c py py map ?? python zip(*gr ...