Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-UnboundLocalError:局部变量';健康';分配前参考_Python_Python 3.x_Variables_Local - Fatal编程技术网

Python-UnboundLocalError:局部变量';健康';分配前参考

Python-UnboundLocalError:局部变量';健康';分配前参考,python,python-3.x,variables,local,Python,Python 3.x,Variables,Local,尽管从其他模块导入了变量“health”,但下面的函数仍提供了标题中显示的错误“健康”也是全球化的,我已经删除了全球化和变量的输入,我仍然收到相同的错误 以下是导致问题的功能 def combat(): enemy_health = (random.choice(random_enemy_Health)) enemy_attack = (random.choice(random_enemy_Attack)) print("\nYou are fighting a" ,ra

尽管从其他模块导入了变量“health”,但下面的函数仍提供了标题中显示的错误“健康”也是全球化的,我已经删除了全球化和变量的输入,我仍然收到相同的错误

以下是导致问题的功能

def combat():
    enemy_health = (random.choice(random_enemy_Health))
    enemy_attack = (random.choice(random_enemy_Attack))
    print("\nYou are fighting a" ,random.choice(enemies), "with an attack amount of" ,enemy_attack, "and a health amount of" ,enemy_health,".")
    while health > 0 and enemy_health > 0:
        if turn == 1:
            while loop == False:
                response=input()
                try:
                    move = response("Do you want to attack or flee? Type '1' to attack and '2' to flee.")
                    move = int(move)
                    if move == 1:
                        enemy_health = enemy_health - attack
                        print("You attacked!")
                        loop = True                       
                    elif move == 2:
                        hub_travel()
                        print("You fled the battle, come back once you are stronger!")
                        loop = True
                    else:
                        print("Invalid number, try again")
                        continue
                except:
                        print("Invalid number, try again")
                        continue
            turn = 2                                                    

        if turn == 2:
            AImove = randint(1,2)
            if AImove == 1:
                print ("Enemy attacked!")
                health = health - enemy_attack
            turn = 1                                                    
            continue

    print ("game over!")

    if enemy_health == 0:
        print("The enemy has been defeated!")
        gold += random.choice(gold_dropped)
错误尤其发生在这一行:

while health > 0 and enemy_health > 0:

如果我是你,我会使用参数,而不是依赖全局变量。此建议可能有助于跟踪某些错误


全局变量在只有几行代码的程序中是可能的。但是,当您的应用程序增长时,跟踪某个变量的当前值有点困难,因为它可以用于多个函数或方法(可能,您需要一个心理映射来找出当前值)。因此,这就是为什么您必须更喜欢使用局部变量或参数而不是全局变量的原因之一。

如果我是您,我会使用参数而不是全局变量。此建议可能有助于跟踪某些错误


全局变量在只有几行代码的程序中是可能的。但是,当您的应用程序增长时,跟踪某个变量的当前值有点困难,因为它可以用于多个函数或方法(可能,您需要一个心理映射来找出当前值)。因此,这就是为什么您必须更喜欢使用局部变量或参数而不是全局变量的原因之一。

此更改将允许您的函数以您想要的方式工作:

def combat(health):
    ...
当然,您必须找到调用函数的位置,并为
运行状况
传入值。我不知道当时的代码是否可以访问这些信息


这可能是解决此问题的最简单的修复方法。这当然不是最好的解决方案,但这不是架构教程的好地方

此更改将允许您的功能按您想要的方式工作:

def combat(health):
    ...
当然,您必须找到调用函数的位置,并为
运行状况
传入值。我不知道当时的代码是否可以访问这些信息


这可能是解决此问题的最简单的修复方法。这当然不是最好的解决方案,但这不是架构教程的好地方

在检查值是否大于零之前,必须为
health
指定一个值。你没有那样做。错误消息对我来说似乎很清楚……如果您需要另一个模块拥有的
health
值,您需要将其作为一个参数从一个有权访问该值的函数调用中传入,或者您需要为该模块提供一种调用该值的方法。例如,您可能有一个保持
运行状况
状态的对象,在这种情况下,您可以直接访问它或提供访问器函数。在这种情况下,由于
运行状况
是字符之类的固有特征,您最好提供一个字符对象,与其报告它的
健康状况
,还不如提供另一个物体撞击它的方式。然后,角色将负责对自身施加伤害,例如,如果健康状况<0或类似情况,则死亡。在检查健康状况是否大于零之前,您必须指定一个值。你没有那样做。错误消息对我来说似乎很清楚……如果您需要另一个模块拥有的
health
值,您需要将其作为一个参数从一个有权访问该值的函数调用中传入,或者您需要为该模块提供一种调用该值的方法。例如,您可能有一个保持
运行状况
状态的对象,在这种情况下,您可以直接访问它或提供访问器函数。在这种情况下,由于
运行状况
是字符之类的固有特征,您最好提供一个字符对象,与其报告它的
健康状况
,还不如提供另一个物体撞击它的方式。然后,角色将负责对自身造成伤害,例如,如果健康状况<0或类似情况,则会导致死亡。我是一名非常基本的编码员,我所知道的主要内容来自必修课,因此我还不了解参数背后的逻辑,以及它们在您描述的意义上是如何工作的。你能详细说明一下吗?我是一个非常基础的编码员,我所知道的主要内容来自必修课,所以我还没有理解参数背后的逻辑,以及它们在你描述的意义上是如何工作的。你能详细说明一下吗?它按预期工作,我不知道修复有多简单!非常感谢:)很高兴我能帮上忙。它按预期工作,我不知道修复有多简单!非常感谢:)很高兴我能帮忙。