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 ...
随机推荐
- 抽取JDBC工具类
package com.wbytts.util; import java.io.IOException; import java.io.InputStream; import java.sql.Con ...
- 给Linux安装中文的man手册
查找 yum list |grep man.*zh 安装 sudo yum install man-pages-zh-CN.noarch 配置 alias cman='man -M /usr//sha ...
- Spring Boot 使用 CXF 调用 WebService 服务
上一张我们讲到 Spring Boot 开发 WebService 服务,本章研究基于 CXF 调用 WebService.另外本来想写一篇 xfire 作为 client 端来调用 webservi ...
- 吴裕雄--天生自然TensorFlow2教程:单输出感知机及其梯度
import tensorflow as tf x = tf.random.normal([1, 3]) w = tf.ones([3, 1]) b = tf.ones([1]) y = tf.con ...
- 洛谷 T8088 RQY的舞会
嗯... 题目链接:https://www.luogu.org/problem/T8088 这道题很好想,我想的是维护两个小根堆(当然可以用数组模拟) 然后从堆顶开始,如果两个元素的差小于1,则cnt ...
- vue项目中vant tab改变标签颜色
找了几种方法,只有下面这个方法是生效的: <van-tabs v-model="active" sticky title-active-color="#144a9e ...
- Mysql 8.0 新特性测试
Mysql 8.0 新特性测试 Role MySQL8.0版本添加了role特性,role是一种逻辑概念是权限的集合,可以将一个或以上的权限赋予给role,再将role赋给user.Oracle,Po ...
- Dart语言学习(十一) Dart异常处理
异常是表示发生了意外的错误,如果没有捕获异常,引发异常的隔离程序将被挂起,并且程序将被终止: Dart代码可以抛出并捕获异常,但与java相反,Dart的所有异常都是未检查的异常,方法不声明它们可能抛 ...
- uniGUI之上传文件UniFileUploadButton(26)
TUniFileUploadButton主要属性: Filter: 文件类型过滤,有图片image/* audio/* video/*三种过滤 MaxAllowedSize: 设置文件最大上传尺寸 ...
- Pentaho6.1中D3可视化库的集成及数据联动的实现
1.软件环境 操作系统版本:Win 10 64位 可视化图形库:D3 Pentaho版本: biserver-ce-6.1.0.1-196 2.对D3的简单介绍 D3允许你将任意的数据绑定到文档对象模 ...