在这段代码中,我希望Score变量在输入f时增加,但它始终保持为1。
Score = 0 def Game(): KAJSH = input("f e") if KAJSH == "f": Score =+ 1 print(Score) Game() Game()
为什么会这样?
11dmarpk1#
您的代码中存在两个问题(以及一些风格问题):这是您的代码从屏幕截图:
第一个问题是打字错误,你写的是Score =+ 1而不是Score += 1-更多细节请参见this question。本质上你说的是Score = (+1),这解释了为什么你的分数总是1。有趣的是,这个拼写错误隐藏了另一个与score变量作用域相关的问题,我们在函数外部将Score定义为全局变量,为了能够在函数内部修改变量,我们需要在函数中将其定义为全局变量:global Score.把这些东西放在一起,你的代码看起来像这样:
Score =+ 1
Score += 1
Score = (+1)
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()
9rnv2umw2#
下面是代码的重写版本。
Score = 0 def game(Score): k = input("f e") if k == 'f': Score += 1 print(Score) game(Score) game(Score)
可以使用循环来代替,但是如果你真的想使用递归,不要忘记传入“Score”
2条答案
按热度按时间11dmarpk1#
您的代码中存在两个问题(以及一些风格问题):
这是您的代码从屏幕截图:
第一个问题是打字错误,你写的是
Score =+ 1
而不是Score += 1
-更多细节请参见this question。本质上你说的是Score = (+1)
,这解释了为什么你的分数总是1。有趣的是,这个拼写错误隐藏了另一个与score变量作用域相关的问题,我们在函数外部将
Score
定义为全局变量,为了能够在函数内部修改变量,我们需要在函数中将其定义为全局变量:global Score
.把这些东西放在一起,你的代码看起来像这样:
这里有一些部分违反了Python的PEP-8 styleguide,使你的代码对其他开发者来说不够直观。一个更传统的实现应该是这样的:
Global variables are also not ideal,所以这里有一个版本,可以避免它们在函数中使用默认值作为分数,然后将更改后的值传递给递归:
9rnv2umw2#
下面是代码的重写版本。
可以使用循环来代替,但是如果你真的想使用递归,不要忘记传入“Score”