当我从一个函数中取出它时它会起作用,但当它是一个函数时它不起作用。我继续得UnboundLocalError
,我不知道为什么。
import time
import random
mobhp = random.randint(10,40)
def fun1():
print("You have chosen option number 1")
#time.sleep(1)
print("You attept an attack")
#time.sleep(2)
cointoss = 1
if cointoss == 1:
print("Attack successfull!")
playerDam = random.randint(10,60)
newmobhp = mobhp - playerDam
print("You did",playerDam,"Damage")
print(mobhp)
print("^old hp^")
print("VNew hpV")
print(newmobhp)
mobhp = newmobhp
print("updated HP")
print(mobhp)
def main():
fun1()
main()
答案 0 :(得分:-1)
这个问题可能已被多次回答,但值得再次回答,因为它有点棘手。
似乎您想要使用在函数定义之前定义的外部(如同全局)变量mobhp
- 正如其他人在评论中指出的那样。您应该遵循Hasan的建议,但如果问题没有被函数外部的定义所掩盖,您可能已经完成了。实际上,你可能希望通过参数传递外部值,如Daniel建议的那样。我建议根本不要使用global
- 几乎永远都不可能。
其他人未能解释的是,实际上,以下代码可行:
import time
import random
mobhp = random.randint(10,40)
def fun1():
print("You have chosen option number 1")
#time.sleep(1)
print("You attept an attack")
#time.sleep(2)
cointoss = 1
if cointoss == 1:
print("Attack successfull!")
playerDam = random.randint(10,60)
newmobhp = mobhp - playerDam
def main():
fun1()
main()
此处mobhp
也在分配之前使用,并且使用之上的所有命令都与前面的情况相同。不同之处在于查找规则在函数外部找到了变量。
如果在局部范围中找不到变量,则变量在外部范围内搜索。但是,只有在读取变量时才会出现这种情况。一旦在函数体内部分配了变量,它就总是被认为是局部的,并且永远不会在外部范围内搜索它。
变量是本地的还是外部的决定是在编译函数期间完成的 - 简单地说,在读取脚本时加载函数体。调用该函数时,其定义已经加载(即正文编译)。由于行mobhp = newmobhp
,确定mobhp
必须是本地的,即使命令的发现时间晚于newmobhp = mobhp - playerDam
。
这可能始终是UnboundLocalError
的原因。