【发布时间】:2017-04-01 04:18:54
【问题描述】:
我已经定义了以下代码,但似乎有关于方法 load 和 damage 的问题。
(根据 ShadowRanger 的建议编辑):
class RangedWeapon(Weapon):
def __init__(self, name, min_dmg, max_dmg):
super().__init__(name, min_dmg, max_dmg)
self.shots=0
def shots_left(self):
return self.shots
def load(self, ammo):
if ammo.weapon_type()==self.name:
self.shots+=ammo.get_quantity()
ammo.remove_all()
def damage(self):
if self.shots==0:
return 0
else:
self.shots-=1
return super().damage()
_
bow = RangedWeapon('bow', 10, 40)
crossbow = RangedWeapon('crossbow', 15, 45)
arrows = Ammo('arrow', bow, 5)
bolts = Ammo('bolt', crossbow, 10)
bow.load(arrows)
print(bow.shots_left()) # should return 5
print(arrows.get_quantity()) #should return 0
但是对于print(bow.shots_left()),我得到了 0,而print(arrows.get_quantity()) 我得到了 5。它们是相反的。我认为我的问题是我没有加载弹药数量?我不太确定。任何帮助,将不胜感激。谢谢!
class Ammo(Thing):
def __init__(self, name, weapon, quantity):
self.name=name
self.weapon=weapon
self.quantity=quantity
def get_quantity(self):
return self.quantity
def weapon_type(self):
return self.weapon.name
def remove_all(self):
self.quantity=0
【问题讨论】:
-
Ammo类是什么样的? -
你的加载函数应该使用
ammo变量而不是Ammo类 -
我不知道这段代码在你的解释器中是如何执行的;我已经可以看到至少两个运行时错误会破坏这个程序的执行
-
@taylorswift:这是我最初的印象,但事实证明,其中一个大错误(将方法与字符串进行比较)确保所有其他损坏的代码路径永远不会执行。
-
@ShadowRanger 你看这是我们在编译语言中认为理所当然的事情......