python 为什么此代码不更新分数?它只将分数更改为1,而不会更高

4ngedf3f  于 2023-01-08  发布在  Python
关注(0)|答案(2)|浏览(126)

在这段代码中,我希望Score变量在输入f时增加,但它始终保持为1。

Score = 0

def Game():
    KAJSH = input("f e")

    if KAJSH == "f":
        Score =+ 1
        print(Score)
        Game()

Game()

为什么会这样?

11dmarpk

11dmarpk1#

您的代码中存在两个问题(以及一些风格问题):
这是您的代码从屏幕截图:

Score = 0

def Game():
    KAJSH = input("f e")

    if KAJSH == "f":
        Score =+ 1
        print(Score)
        Game()

Game()

第一个问题是打字错误,你写的是Score =+ 1而不是Score += 1-更多细节请参见this question。本质上你说的是Score = (+1),这解释了为什么你的分数总是1。
有趣的是,这个拼写错误隐藏了另一个与score变量作用域相关的问题,我们在函数外部将Score定义为全局变量,为了能够在函数内部修改变量,我们需要在函数中将其定义为全局变量:global Score.
把这些东西放在一起,你的代码看起来像这样:

Score = 0

def Game():

    global Score

    KAJSH = input("f e")

    if KAJSH == "f":
        Score += 1
        print(Score)
        Game()

Game()

这里有一些部分违反了Python的PEP-8 styleguide,使你的代码对其他开发者来说不够直观。一个更传统的实现应该是这样的:

SCORE = 0

def game():

    global SCORE

    user_input = input("f e")

    if user_input == "f":
        SCORE += 1
        print(SCORE)
        game()

game()

Global variables are also not ideal,所以这里有一个版本,可以避免它们在函数中使用默认值作为分数,然后将更改后的值传递给递归:

def game(score=0):

    user_input = input("f e")

    if user_input == "f":
        score += 1
        print(score)
        game(score)

game()
9rnv2umw

9rnv2umw2#

下面是代码的重写版本。

Score = 0
def game(Score):
    k = input("f e")
    if k == 'f':
        Score += 1
        print(Score)
        game(Score)
game(Score)

可以使用循环来代替,但是如果你真的想使用递归,不要忘记传入“Score”

相关问题