python无法使用函数来更改变量的值

N3MESIS先生

我是python的新手,想知道为什么函数和if语句在下面的代码中返回“ 100”而不是“ 83”。我不确定是否遗漏了一些明显的东西,但似乎应该可以使用。这是我指的代码:

playerhp = 100
def attack1(x):
    x = (x - 17)
    return x

while playerhp > 0:
    enemyattack = input("please type the word 'attack': ")
    if enemyattack.upper() == "ATTACK":
        attack1(playerhp)
        print(playerhp)
    else:
        break
科迪

正如上面评论中提到的那样,这个问题归结为范围界定。尝试使用Google搜索,以获取更多信息,但我将在此处尝试提供初学者级别的解释。

声明变量时,它存在于特定作用域中,并且只能由相同或较低作用域中的变量访问。例如,

var1 = 5
if var1 < 6:
   print(var1)
   var2 = 7
print(var2) #error on this line

var1在此示例中存在于最高范围,因此较低的范围可以访问,因此该print(var1)行工作正常。但是,var2它的作用域比尝试打印它的语句更大,因此它找不到该变量。由于Python强制采用良好的格式,因此您可以将范围大致视为缩进的每个级别。如果必须去缩进的部分可以找到它,但是如果需要去缩进的部分可以找到它,那么就找不到。

这扩展到功能。您的函数attack1与while循环内部的作用域不同,并且变量x仅存在于该函数内。因此,当您修改时x,它只会在该范围内进行修改,而不是原始范围。这超出了您最初提出的问题的范围,但是请查询含义passing by valuepassing by reference含义,以及它们如何适用于Python。正如其他答案指出的那样,您可以通过将return valuex的x分配给您要传递的原始数字来解决此问题,即

playerhp = attack1(playerhp)

取新的数字(比原来少17个数字),然后将其重新分配为原始值,因此它将采用该新值。

根据其他答案的建议进行编辑

有人建议直接修改全局变量。(我在这里假设使用Python 3,我不知道您使用的是哪个版本,或者Python 2甚至不一样),您可以执行此操作。Python对于范围外的功能有点可笑,但是像这样重写攻击函数很简单:

def attack1():
   global playerhp
   playerhp -= 17 #shortcut to subtract 17, same as playerhp = playerhp - 17

你可以简单地用

attack1()

它将以相同的方式工作。如果可以避免的话,许多程序员会避免使用全局变量,但这是非常主观的,他们将一整天都在为此而斗争,直到时间结束。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

n + = 1返回0 python函数无法更改变量

来自分类Dev

无法更改变量内的值?

来自分类Dev

我无法更改变量的值

来自分类Dev

在Python中临时更改变量的值

来自分类Dev

使用按钮(Tkinter)更改变量的值

来自分类Dev

使用条件语句更改变量的值

来自分类Dev

使用jQuery或JavaScript更改变量的值

来自分类Dev

更改变量的值

来自分类Dev

如何使用函数更改返回函数/更改变量?

来自分类Dev

entry.get()函数不会更改变量的值

来自分类Dev

在每个时间步更改变量的值 - Matlab ODE 函数

来自分类Dev

在函数中更改变量

来自分类Dev

为什么通过函数更改变量的值会更改Lua中其父表的变量的值?

来自分类Dev

JS无法更改变量

来自分类Dev

更改变量onclick的值

来自分类Dev

更改变量onclick的值

来自分类Dev

更改变量“ cookies”的值

来自分类Dev

更改变量的单个值

来自分类Dev

使用指针在其他函数中更改变量

来自分类Dev

如何使用def函数获取玩家输入并更改变量

来自分类Dev

使用函数中的内容更改变量值

来自分类Dev

无法在python中动态更改变量(分数)

来自分类Dev

无法在运行python程序中更改变量

来自分类Dev

无法在 tfs vnext 中使用 powershell 更改变量

来自分类Dev

无法使用 jquery.post 更改变量

来自分类Dev

C ++:使用其指针更改变量的值

来自分类Dev

C ++:使用其指针更改变量的值

来自分类Dev

如何使用if else语句更改变量的值?

来自分类Dev

如何使用if条件在python中更改变量值