代码之家  ›  专栏  ›  技术社区  ›  Evan Sowards

使得分值递增,而不是重置为零

  •  0
  • Evan Sowards  · 技术社区  · 1 年前

    我正在开发一个Python程序。我有以下代码:

    def AIScoreIncreaseParameter(parameter):
        return parameter+ 1
    
    def AIScoreIncrease():
        scoreBoardAI=0
        print(scoreBoardAI)
        scoreBoardAI=AIScoreIncreaseParameter(scoreBoardAI)
        print(scoreBoardAI)
    
    AIScoreIncrease()
    AIScoreIncrease()
    

    这是我在一场石头剪刀游戏的记分板上使用的一组更大的代码的一部分。我不知道如何为记分板分数设置一个非全局变量,每次调用函数时都会累加。这段代码刚刚打印出来 (0101) 当我希望它的价值每次增加一个时 (0102) ,但要定义变量,我必须给它一个值,即零。我该怎么解决这个问题?我在另一次遇到了同样的问题,它严重限制了我可以进行的游戏娱乐类型的范围,因为大多数游戏都有一个会改变的计数系统(分数、货币、卡值等)。

    1 回复  |  直到 1 年前
        1
  •  1
  •   user19077881    1 年前

    避免全局变量或全局可访问名称的一个好方法是在函数闭包中“隐藏”一个局部变量。下面的代码显示了如何做到这一点的示例:

    def get_next_num():
        num = 0
        started = False
        def inner_num():
            nonlocal  num, started
            if started:
                num += 1
            else:
                started = True
            return num
        return inner_num
    
    next_num = get_next_num()
    
    print(next_num())
    print(next_num())
    print(next_num())
    

    给予:

    0
    1
    2
    

    如果需要,可以修改上述代码,通过调用函数而不是在代码中“硬编码”值来设置起始值(例如,不是0)。也可以将代码重写为函数装饰器,它计算某个任意函数被调用的次数。