我试图写一个简单的程序,定义两个虚构的战士只有一个名字和健康的数量。在
现在我写的是:
import random
def main():
pass
if __name__ == '__main__':
main()
hpRed = 20
hpBlu = 20
def attack():
damage = random.randrange(1,3)
return hpRed - damage
return hpBlue - damage
def fighterRed(name, hpRed):
print(str(name) + " has " + str(hpRed) + " health left.")
def fighterBlue(name, hpBlu):
print(str(name) + " has " + str(hpBlu) + " health left.")
def battle():
fighterRed("Branden",hpRed)
fighterBlue("Alex",hpBlu)
while ((hpRed > 0) and (hpBlu > 0) is True):
attack()
else:
print("The battle is over!")
if (hpRed > 0):
return "Red Player is victorious!"
else:
return "Blue Player is victorious!"
battle()
到目前为止,我经常收到错误“hpRed referenced before assignment”。我可以做些什么来让它正确地传递hpRed和hpBlu的值?在
有几个错误:
您使用了两个不同的名称:
hpBlue
和hpBlu
返回的是两个值,而不是更改定义的变量的值。
你的打印功能只执行了一次。(添加到
while
中,以便打印每个迭代)代码:
hpRed
和hpBlue
(至少在一个地方拼错了)变量是在模块(“global”)级别定义的。函数内部的名称是函数局部名称,除非显式地将它们指定给全局变量,否则这些名称不能看到全局变量。应该是这样的:虽然您可以简单地使用全局变量来实现这一点,但这不是一个很好的实践。我建议将该值传递给任何需要它的函数,或者将它放入一个类中,以便类的方法可以对其进行操作。在
^{pr2}$您可能注意到我更改了您的}(该行为更像是
return
语句。您编写的内容将无法按您希望的方式工作:一旦您return
,您就不能从同一个方法调用中再次{generator
)。如果你想同时返回新的红色血量和蓝色血量,请返回一个包含它们的元组。在这段代码也有一些其他问题,例如,您从未实际更改全局变量,并且如果您在
while
循环中放入print
调用,这样就可以看到hp是如何变化的,这样您就省去了一些麻烦。在你实际上并没有改变任何一个玩家的生命值;看看你的attack()函数,开始检查你的变量。在
相关问题 更多 >
编程相关推荐