Python 如何对函数调用进行评分

Python 如何对函数调用进行评分,python,Python,我刚开始学习编码,目前正在制作一款篮球视频游戏。然而,我似乎不能把分数加得很对。每次循环重新启动时,它只是重置为零,然后向变量添加2。有没有一种方法可以在每次循环返回时继续添加数字,这样它就不会重置 下面是一个非常简单的版本: 敌方得分=0 def敌人_分数(): 打印(“敌人分数”) 打印(敌人得分加1分) 返回 敌人得分()#这只是函数被调用过的情况 敌人得分() 敌人得分() 以下是与您的解决方案最相似的解决方案,它只解决了代码的问题: score_of_enemy = 0 def en

我刚开始学习编码,目前正在制作一款篮球视频游戏。然而,我似乎不能把分数加得很对。每次循环重新启动时,它只是重置为零,然后向变量添加2。有没有一种方法可以在每次循环返回时继续添加数字,这样它就不会重置

下面是一个非常简单的版本:

敌方得分=0 def敌人_分数(): 打印(“敌人分数”) 打印(敌人得分加1分) 返回 敌人得分()#这只是函数被调用过的情况 敌人得分() 敌人得分()
以下是与您的解决方案最相似的解决方案,它只解决了代码的问题:

score_of_enemy = 0

def enemy_score():
    global score_of_enemy
    print(" ENEMY SCORE")
    score_of_enemy = score_of_enemy.__add__(1)
    print(score_of_enemy)

enemy_score()  # this is just if the function is ever called
enemy_score()
enemy_score()
结果:

 ENEMY SCORE
1
 ENEMY SCORE
2
 ENEMY SCORE
3
这些问题是:

  • 如果您在函数内部对敌人的分数进行操作,而没有声明它是全局的,那么您就不会修改函数外部存在的全局副本,这是您想要的,因此对函数的每次调用都会增加分数。因此,我添加了呼叫
    敌人的全球得分
  • score\u敌人。
    add\uu(1)
    1
    添加到
    score\u敌人的值中
    ,但不将结果值存储回
    score\u敌人的值中。您必须明确地这样做,如我的版本所示
  • 不能将赋值语句放在
    print
    语句中,因此我将这两个操作分为几行
  • 如果不给
    return
    语句一个参数来指定要返回的内容,则不需要它。函数末尾的
    return
    是多余的
  • 使用
    \uuuu add\uuuu
    是不寻常的,因为它与
    +
    是一样的。大多数程序员使用
    +
    。您可以使用
    +=
    进一步缩写该行。因此,敌方的得分=敌方的得分。敌方的得分(1)
    等于敌方的得分+=1

    为了让您了解如何避免使用
    global
    (根据注释),下面是另一个避免使用的版本。这里看起来更复杂,确实如此,但这只是因为这段代码只是一个简单的示例。在现实生活中,遵循此模式将使代码更具可读性和稳定性:

    score_of_enemy = 0
    
    def enemy_score(score):
        print(" ENEMY SCORE")
        score += 1
        print(score_of_enemy)
        return score
    
    score_of_enemy = enemy_score(score_of_enemy)  # this is just if the function is ever called
    score_of_enemy = enemy_score(score_of_enemy)
    score_of_enemy = enemy_score(score_of_enemy)
    

    对于这样一个简单的任务,函数似乎不是适合该任务的工具。相反,我将直接增加变量:

    score = 0
    
    score = score + 1
    print(score)
    
    # or
    score += 1
    print(score)
    

    如果你正在跟踪一个“敌人”的多个属性,那么你最终会想要了解类。这些允许您存储分数以及与“敌人”相关的其他数据。

    print()
    之外添加
    敌人分数+=1
    ,只需
    打印(敌人分数)
    ,否则不会向敌人分数添加任何值。这是否回答了您的问题?我在您的示例代码中没有看到循环。对
    foreign\u score()
    的3个调用是否模拟了完整代码中循环中的多个调用?我很好奇您下面的代码示例显示了如何使用
    \u add\u()
    。正如其他人所指出的,这是不寻常的,因为它更容易、更自然地编写敌人+1的分数。如果您在代码示例中看到
    \uuuu add\uuuu()
    ,我建议您避免使用该内容,因为它会教您一些糟糕的习惯。谁知道他们还做了什么你不应该做的事情呢。而且,从完整的代码来看,这个例子似乎过于简单了。要增加一个变量,函数是多余的。你可以直接用
    score\u of_敌军+=1
    这样的方法来做。我怀疑您的实际代码更复杂,并且有更好的解决方案来解决您的问题。然而,我很难推荐一件事,因为有很多可能性。作为OP的旁注,以这种方式使用全局变量被认为是一种不好的做法。在大型程序中,全局变量可能导致难以发现的错误。我鼓励您(OP)学习更多关于局部变量、函数参数、从函数返回值以及包含方法和字段的类的知识。这些是我们用来封装数据和行为的工具,它们使得全局变量变得不必要。我知道有很多东西要学。我只是想把你推向正确的方向,我同意。我只是想把反馈限制在最直接的问题上。我的世界里有很多Python代码,一些是我自己编写的,另一些是我维护的。如果我在所有的ode中都找不到一个使用
    global
    关键字的地方,我也不会太惊讶。只是还没做完。Python,IMO,如果将该关键字从语法中删除,将是一种更好的语言。在这样的回答中避免使用
    global
    关键字的麻烦在于,实际上存在无限可能的解决方案。从问题的有限信息来看,“正确”的答案并不明显。所以我理解你为什么用这种方式写你的答案。我同意@Code学徒在变量上使用a不是最好的方法。