最近在看传智播客的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)