Python新手练习项目:老王开枪

  最近在看传智播客的Python基础教程,这章确实有点难,难点在于,多个对象,多个类,老王开枪应用当中,老王和敌人属于人这一类,还有枪,枪里有弹夹,弹夹里有子弹,子弹打出去掉多少滴血,层层计算,对于我这样的新手来说算是比较难的了。记录一下:

  此外,说一下,我遇到的2个Python错误:

  第一个:

object() takes no parameters

  出现这个错误是因为,init方法的正确写法是__init__,两边双下划线,如果不写全,就会报错。

  第二个:

TypeError: 'int' object is not callable

  出现这个错误是因为,变量和方法重复使用,简单点说就是重名了,得仔细检查下代码。

 1 #coding=utf-8
 2 class People:
 3     def __init__(self,name):
 4         self.name = name
 5         self.hp = 100
 6         self.gun = None
 7     def __str__(self):
 8         return self.name + "剩余血量为:" + str(self.hp)
 9     def upperBullet(self,clip,bullet):
10         clip.upper(bullet)
11     def upperClip(self,gun,clip):
12         gun.withClip(clip)
13     def getgun(self,gun):
14         self.gun = gun
15     def shot(self,enemy):
16         self.gun.shooting(enemy)
17     def lossedhp(self,lethality):
18         self.hp -= lethality
19 class Gun:
20     def __init__(self):
21         self.clip = None
22     def __str__(self):
23         if self.clip:
24             return "当前没弹夹"
25         else:
26             return "当前有弹夹"
27     def withClip(self,clip):
28         if not self.clip:
29             self.clip = clip
30     def shooting(self,enemy):
31         bullet = self.clip.lossbullet()
32         if bullet:
33             bullet.lossHp(enemy)
34         else:
35             ("没子弹了")
36 class Clip:
37     def __init__(self,amount):
38         self.amount = amount
39         self.clipList = []
40     def __str__(self):
41         return "弹夹当前的子弹数量为:" + str(len(self.clipList)) + "/" + str(self.amount)
42     def upper(self,bullet):
43         if len(self.clipList) < self.amount:
44             self.clipList.append(bullet)
45     def lossbullet(self):
46         if len(self.clipList) > 0:
47             bullet = self.clipList[-1]
48             self.clipList.pop()
49             return bullet
50         else:
51             return None
52 class Bullet:
53     def __init__(self,lethality):
54         self.lethality = lethality
55     def lossHp(self,enemy):
56         enemy.lossedhp(self.lethality)
57 laowang = People("老王")
58 print(laowang)
59 clip = Clip(20)
60 i = 0
61 while i < 10:
62     bullet = Bullet(5)
63     laowang.upperBullet(clip,bullet)
64     i+=1
65 print(clip)
66 gun = Gun()
67 laowang.upperClip(gun,clip)
68 print(gun)
69 enemy = People("敌人")
70 laowang.getgun(gun)
71 laowang.shot(enemy)
72 print(enemy)
73 laowang.shot(enemy)
74 print(enemy)
75 laowang.shot(enemy)
76 print(enemy)
77 laowang.shot(enemy)
78 print(enemy)
79 laowang.shot(enemy)
80 print(enemy)
81 laowang.shot(enemy)
82 print(enemy)
83 laowang.shot(enemy)
84 print(enemy)
85 laowang.shot(enemy)
86 print(enemy)
87 laowang.shot(enemy)
88 print(enemy)