python不能使用函数来更改variab的值

2024-09-27 23:15:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python比较陌生,我想知道为什么函数和if语句在下面的代码中返回“100”而不是“83”。我不确定我是否遗漏了一些明显的东西,但它似乎应该起作用。This is the code I'm refering to:

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

Tags: theto函数代码ifiscode语句
3条回答

下面是代码的工作示例:

playerhp = 100


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

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

但是关于你的问题最重要的是你真正了解传递参数是如何工作的,有很多网站解释了这一点,这里只是one

必须将返回值attack1赋给playerhp

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

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

正如上面的评论所提到的,这个问题归结为范围界定。尝试谷歌搜索更多信息,但我会尝试给一个初学者的解释在这里。你知道吗

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

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。正如其他答案所指出的,您可以通过将x的return value分配给您要传递的原始数字来解决这个问题,即

playerhp = attack1(playerhp)

取一个比原来少17的新数字,并将其重新指定为原始值,因此它将采用这个新值。你知道吗

编辑其他答案的建议

有些人建议直接修改全局变量。(我在这里假设python3,我不知道您使用的是哪个版本,或者python2是否有所不同),您可以这样做。Python在确定函数范围方面有点滑稽,但重写攻击函数很简单,如下所示:

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

你可以简单地用

attack1()

它也会以同样的方式工作。如果可以避免的话,许多程序员会回避使用全局变量,但这是非常主观的,他们会为此奋斗一整天,直到时间的尽头。你知道吗

相关问题 更多 >

    热门问题