python面向对象小项目_python之面向对象

本文通过一个文字游戏介绍了Python的面向对象编程。游戏中有老虎和羊两种动物,随机分配到10个房间中,玩家需要通过喂食或敲门与动物互动,根据动物的反应调整体重。游戏结束时展示每个房间动物及其体重。文章通过定义Tiger和Sheep类,以及它们的实例方法如roar和feed,展示了如何创建和操作对象。
摘要由CSDN通过智能技术生成

1 #类 :一类具体相同特征的事务的统称

2 #关键字 class 类名 #类 通常首字母大写

3 #class Tiger:#如果没有继承可以写冒号,不写括号

4 #pass

5 #6 ##实例: 1.实例是在这个类里实际存在的个体 2.实例是类的具体实例化体现

7 #class Tiger:

8 #nickName = '老虎' #属性

9 #10 #t1 = Tiger() #t1 就是Tiger里的实例,使用t1变量,方便后续使用

11

12 '''

13 要求大家用面向对象的设计编写一个python程序,实现一个文字游戏系统。14 动物园里面有10个房间,房间号从1 到 10。15 每个房间里面可能是体重200斤的老虎或者体重100斤的羊。16 游戏开始后,系统随机在10个房间中放入老虎或者羊。17 然后随机给出房间号,要求游戏者选择敲门还是喂食。18 如果选择喂食:19 喂老虎应该输入单词 meat,喂羊应该输入单词 grass20 喂对了,体重加10斤。 喂错了,体重减少10斤21 如果选择敲门:22 敲房间的门,里面的动物会叫,老虎叫会显示 ‘Wow !!’,羊叫会显示 ‘mie~~’。 动物每叫一次体重减5斤。23 游戏者强记每个房间的动物是什么,以便不需要敲门就可以喂正确的食物。24 游戏3分钟结束后,显示每个房间的动物和它们的体重。25 实现过程中,有什么问题,请通过课堂上讲解的调试方法,尽量自己发现错误原因。26 '''

27 #对象的方法 :

28 #1、通过定义在类里面的函数

29 #2、实例方法:每个具体实例相关的方法

30 #3、静态方法:共有的方法,与每个具体实例无关

31

32 #游戏

33 #1、找出游戏中的对象

34 #*找出这些类具有的特征和行为(属性)

35 #1.老虎:特征(本质:变量,术语:属性)

36 #叫声,体重,高矮胖瘦

37 #2.行为:本质就是类里面的一个函数 术语:方法

38 #1、吃肉

39 #2、叫声

40

41 #2、找出对象直接的关系--组网

42 #游戏食物的由input输入的,游戏玩家也是input交互的

43

44 #定义类

45 classTiger001:46 nickName = '老虎' #静态属性,这个属性是属于整个类的,所有的这类的实例都是一样的

47 __name = 'xx' #私有的 -- 继承中使用,子类不能使用

48 #实例属性,属于实例的,有个初始化方法,:__init__

49 def __init__(self,inweight): #只要调用构造方法,就会自动调用 __init__ ;self:谁调用就是谁的,自动调用

50 #print("我执行了",self,inweight)

51 self.weight = inweight #对象.属性 self等于任何一个实例

52 #实例方法-和实例有关,看这个方法有没有涉及到实例属性:例如老虎叫 ,减5斤,不可能一只老虎叫,所有老虎减5斤

53 defroar(self):54 print('我是老虎,wow,体重减少5斤')55 self.weight -=5

56 #静态方法:大家都一样

57 deffeed(self,food):58 if food == '肉':59 print('喂食正确,体重加10斤')60 self.weight += 10

61 else:62 print('喂食错误,体重减10斤')63 self.weight -= 10

64

65 classSheep001:66 nickName = '羊' #静态属性,这个属性是属于整个类的,所有的这类的实例都是一样的

67 __name = 'xx' #私有的 -- 继承中使用,子类不能使用

68

69 #实例属性,属于实例的,有个初始化方法,:__init__

70 def __init__(self, inweight): #只要调用构造方法,就会自动调用 __init__ ;self:谁调用就是谁的,自动调用

71 #print("我执行了",self,inweight)

72 self.weight = inweight #对象.属性 self等于任何一个实例

73 #实例方法-和实例有关,看这个方法有没有涉及到实例属性:例如老虎叫 ,减5斤,不可能一只老虎叫,所有老虎减5斤

74

75 defroar(self):76 print('我是羊,mie,体重减少5斤')77 self.weight -= 5

78 #静态方法:大家都一样

79

80 deffeed(self, food):81 if food == '草':82 print('喂食正确,体重加10斤')83 self.weight += 10

84 else:85 print('喂食错误,体重减10斤')86 self.weight -= 10

87 #静态方法 ,大家都一样

88 @staticmethod #这个修饰符只能修饰紧跟的一个方法

89

90 deftest():91 print('我是静态方法')92 #实例方法必须只能实例调用,否则报错

93 #静态属性,实例可以调用,类也可以调用,类也可以 类名.静态属性 = 新值

94 #实例化

95 #t1 = Tiger(200) #t1 就是Tiger里的实例,使用t1变量,方便后续使用

96 ## print(t1.weight)

97 #t2 = Tiger(100)

98 #t2.roar()

99 #t2.feed('草')

100 #print(t2.weight)

101 #t2 = Tiger() #t2 就是Tiger里的实例,使用t2变量,方便后续使用

102 #print(t2.nickName)

103

104 #对象的组合 :对象里面有对象 :房间 里面有老虎或者羊

105 classRoom:106 pass

107 classRoom:108 #属性:编号

109 def __init__(self,inNum,inAnimal):110 self.Num =inNum111 self.Animl =inAnimal112 #方法:

113 #定义一个房间实例,编号为2,里面有老虎

114 t1 = Tiger001(200)115 r1 = Room(2,t1)116 #房间的动物叫一声, 房间实例.动物.叫

117 r1.Animl.roar()118 print(r1.Animl.weight)119

120 #随机数,导入随机模块

121 from random importrandint122 print(randint(0,2)) #0,1,2 左含右也含

123 #老虎和羊取得概率都是 50% ,所以设置0,1就行

124

125 #————————房间初始化——————————————————

126 #定义个变量存房间

127 roomList =[]128 for one in range(1,11):129 if randint(0, 1) == 1:130 ani = Tiger001(200)131 else:132 ani = Sheep001(100)133 room =Room(one,ani)134 roomList.append(room)135 #———————————————————————————————————

136

137 importtime138 #开始时间: = time.time() #单位是s

139 #当前时间:=time.time()

140 #while True:

141 #if 当前时间-开始时间 > 120:

142 #break

143

144 #对象的继承:减少代码量

145 #子类继承父类:

146 #如果子类没有def __init__ 就会自动调用父类的 def __init__

147 #如果子类有def __init__ 需要手动调用父类的 def __init__

148

149 #写个华南虎的类,可以继承上面老虎的类

150 class souTiger(Tiger001): #如果多个父类 class souTiger(Tiger,Room):

151 def __init__(self,inWeight):152 #手动调用

153 Tiger001.__init__(self, inWeight)154 #方法重写

155 defroar(self):156 print('子类的方法重写')157 a1 = souTiger(200)158 print(a1.weight)159

160

161

162 #方法重写 ,方法在不同的子类或父类的表现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值