面向对象编程题目:人开枪射击子弹。
第一步:分析题目。
人开枪射击子弹。
题目中有三个名词,分别是:人、枪、子弹。
也就是说,至少要有三个类,分别是:人类、枪类、弹夹类(装子弹)。
那么,我们再深入分析,三个类,每个类都有什么。
第一个是人类。
类名:Person(人)
属性:gun(枪)
行为:fire(开火)
第二个是枪类。
类名:Gun(枪)
属性:bulletBox(弹夹)
行为:shoot(射击)
第三个是弹夹类
类名:BulletBox(弹夹)
属性:bulletCount(子弹)
行为:(这里没有,因为弹夹确实没什么行为。)
第二步,编写三个类的代码。
Person类:
class Person(object):
def __init__(self, gun):
self.gun = gun #人首先要拥有一把枪
def fire(self):
self.gun.shoot() #人开火的时候调用枪射击。
def fillBullet(self, count):
self.gun.bulletBox.bulletCount = count #在没子弹的时候,要能购买子弹。
print("购买子弹数:%d" %(count))
Gun类:
class Gun(object):
def __init__(self, bulletBox):
self.bulletBox =bulletBox #枪首先得有个弹夹
def shoot(self):
if self.bulletBox.bulletCount == 0: #判断子弹数,并输出信息。
print("没有子弹了,请购买子弹。")
else:
self.bulletBox.bulletCount -= 1 #每次开火,减少一颗子弹。
print("剩余子弹:%d发" % (self.bulletBox.bulletCount))
BulletBox类:
class BulletBox(object):
def __init__(self, count):
self.bulletCount = count #弹夹用来装子弹就可以。
三个类的调用关系是人-》枪-》子弹。
简单逻辑:
你人开枪射击子弹,首先得有一把枪,这把枪里得有弹夹,这个弹夹里得装有子弹。
第三步,实现人开枪发射子弹的功能。
先导入三个类。
from person import Person
from gun import Gun
from bulletBox import BulletBox
这里是使用自定义模块的方式导入的。
小写的是模块名。
再定义三个对象
#弹夹 初始给上2发子弹。
bulletBox = BulletBox(2)
#枪
gun = Gun(bulletBox)
#人
per = Person(gun)
开始发射子弹
per.fire()
per.fire()
per.fire()
发射三颗后,没有子弹,并提醒用户购买子弹。
per.fillBullet(10)
买上10颗子弹,并打印购买个数。
继续射击,并在射击后显示剩余子弹。
per.fire()
暂时,就写这么多,一个小题,大家有兴趣可以自行补充。