我正在使用python中的基于文本的游戏。我遇到了一个小问题。我的一个类方法告诉程序当敌人攻击时该怎么做。这是代码
def attack(self, method):
user_health_old = user_health
self.method = method
probs = random.randrange(1,100)
if method == "Knife":
while user_health > 0:
if probs in range(1,70):
attackWin = True
break
else:
attackWin = False
pla = player()
pla.healthRem(7)
if user_health < 1:
death()
elif method == "Hands":
while plaHealth > 0:
if probs in range(1,40):
attackWin = True
break
else:
attackWin = False
pla.healthRem(7)
if user_health < 1:
death()
pla = player()
pla.attackStatus()
player()是类,这个方法是攻击() attackStatus()有点块后会告诉玩家战斗中发生的事情,这是代码
def attackStatus(self):
if attackWin == True:
print "You Win, this time"
time.sleep(2)
if user_health < user_health_old:
print "But you're victory did come at a cost"
time.sleep(2)
print "You're new health value is: ",user_health
time.sleep(3)
还有几行代码,而不是运行整个程序,我只是设置它来运行这个模块,
pla = player()
pla.attack("Knife")
运行程序时出现问题。它会打开控制台,但会立即退出。它也不输出任何信息。我不太清楚发生了什么,如果有人可以帮助我,我会非常感激。
答案 0 :(得分:0)
当您使用else
时,在第一个函数的pla.healthRem(7)
块中,您在为其分配值之前引用pla
。通过查看其他代码,您可能希望在此行的上方添加pla = player()
(或者可以在函数的最开头添加pla = player()
)。
修改:看到您的评论后,这肯定与您在函数pla
中使用attack()
有关。如果您在函数中分配了名称 where ,那么它将被视为该函数中的本地变量无处不在。这意味着如果函数体中有pla
,则永远不能访问全局名称pla = player()
。您可以通过以下方式之一解决此问题:
pla = player()
行,这将允许查找pla
以查找全局变量。global pla
放在函数的最顶层,全局语句将导致对该名称的每个赋值都修改变量的全局版本,而不是创建新的局部变量。pla = player()
。