第19课 习题讲解
Python 作业 9
要求大家用面向对象的设计编写一个python程序,实现一个文字游戏系统。
动物园里面有10个房间,房间号从1 到 10。
每个房间里面可能是体重200斤的老虎或者体重100斤的羊。
游戏开始后,系统随机在10个房间中放入老虎或者羊。
然后随机给出房间号,要求游戏者选择敲门还是喂食。
如果选择喂食:
喂老虎应该输入单词 meat,喂羊应该输入单词 grass
喂对了,体重加10斤。 喂错了,体重减少10斤
如果选择敲门:
敲房间的门,里面的动物会叫,老虎叫会显示 ‘Wow !!’,羊叫会显示 ‘mie~~’。 动物每叫一次体重减5斤。
游戏者强记每个房间的动物是什么,以便不需要敲门就可以喂正确的食物。
游戏3分钟结束后,显示每个房间的动物和它们的体重。
实现过程中,有什么问题,请通过课堂上讲解的调试方法,尽量自己发现错误原因。
分析
1、定义一个类
1--class 类名(首字母要大写--规范)
2--class Tiger
2、实例化
1- t1 = Tiger() 就是老虎类的实例化
3、类里面的变量---属性(比如,人的身高,体重)
4、类里面的函数---方法(吃饭,睡觉,学习)
5、静态属性==类属性
1-这个属性属于整个类--所有实例化都是一样的
6、实例化属性
1-这个属性--属于某个实例的---每个实例都会不一样
2-def __init__(self):初始化方法==构造方法
3-在创建实例的时候,就创建了该实例的一些实例属性 def __init__(self, weight)
1-self --- t1, t2 --实例对象本身
4- self -- 它只是代言词---不是关键字 可以用其它字符代替,比如,随便一个词,OK之类的,但是这是规范,不要去替代。
7、方法:1-函数 2-行为
1-实例方法:每个具体实例相关的方法
1-初始化方法就是一个实例方法
2-静态方法:共有的方法,与每个具体实例无关---类方法
1-@staticmethod 修饰---只能修饰紧跟的一个
8、对象的组合
9、继承
1-class SouTiger(Tiger): 华南虎---继承父类Tiger
2-可以多继承,但是一般用不到。可能出现未知的Bug
10、方法的重写
1-super(SouTiger, s1).roar ---调用父类的方法
super(子类名,子类实例名).方法() --- 调用父类的方法
1 class Tiger: #老虎类 2 def __init__(self, weight = 200): 3 self.weight = weight 4 5 # 实例方法 6 def roar(self): 7 print('wow!!') 8 self.weight -= 5 9 def feed(self, food): 10 if food == '肉': 11 self.weight += 10 12 print('喂食正确!') 13 else: 14 self.weight -= 10 15 print('喂食错误!') 16 17 18 class Sheep: 19 def __init(self, weight = 100): 20 self.weight = weight 21 22 #实例方法 23 def roar(self): 24 print(mie!') 25 self.weight -= 5 26 27 def feed(self, food): 28 if food == '草' 29 self.weight += 10 30 print('喂食正确!') 31 else: 32 self.weight -= 10 33 print('喂食错误!') 34 35 class Room: 36 def __init__(self, num, animal): 37 self.num = num 38 self.animai = animal 39 40 # 创建10个房间的实例 41 form random import randint 42 import time 43 44 rooms = [] 45 for one in range(1,11): 46 if randint(0, 1) == 1: 47 ani = Tiger() 48 else: 49 ani = Sheep() 50 51 room = Room(one, ani) #创建房间的实例 52 rooms.append(room) 53 54 startTime = time.time() # 开始计时 55 weightTotal = 0 56 57 while True: 58 currectTime = time.time() #当前时间 59 if (currectTine - startTime ) > 60: 60 print('游戏时间到!') 61 for roomX in rooms: 62 print('当前房间的编号:{}, 该房间动物的体重:{}'.format(roomX.num, roomX.animal.weight)) 63 weightTotal += roomX.animal.weight 64 print('总体重:', weightTotal) 65 break # 游戏结束 66 67 roomNum = randint(1,10) #取随机房间 68 roomObject = rooms[roomnum -1] 69 print('当前房间号: %d' % roomNum) 70 if input('是否需要敲门:n/y') == 'y': 71 roomObject.animal.roar() 72 73 food = input('请喂食:(肉/草)'?) 74 roomObject.animal.feed(food.strip())