You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现非全局变量的累加计分(避免重置为0)

解决石头剪刀布计分板的非全局变量累加问题

原代码每次调用AIScoreIncrease()时都会在函数内部重置scoreBoardAI为0,导致无法累加。以下是三种无需全局变量的解决方案:

方法1:使用闭包

闭包可以让内部函数访问并保留外部函数的变量状态,适合轻量级的状态管理:

def create_score_tracker():
    score_board_ai = 0
    def ai_score_increase():
        nonlocal score_board_ai
        print(score_board_ai)
        score_board_ai += 1
        print(score_board_ai)
    return ai_score_increase

# 创建专属的计分器实例
ai_score_tracker = create_score_tracker()
ai_score_tracker()
ai_score_tracker()

调用后输出:

0
1
1
2

create_score_tracker定义了初始分数,返回的ai_score_increase函数通过nonlocal声明访问并修改外部变量,每次调用都会保留之前的分数状态。

方法2:使用类(面向对象实现)

类的实例属性可以长期保存状态,扩展性强,适合游戏这类需要多状态管理的场景:

class ScoreBoard:
    def __init__(self):
        self.ai_score = 0
    
    def ai_score_increase(self):
        print(self.ai_score)
        self.ai_score += 1
        print(self.ai_score)

# 创建计分板实例
game_score_board = ScoreBoard()
game_score_board.ai_score_increase()
game_score_board.ai_score_increase()

调用后输出与闭包方案一致,后续还可扩展玩家分数、重置分数、查询分数等功能,更贴合游戏开发需求。

方法3:使用函数默认参数(利用可变对象特性)

这种方式实现简单但可读性较弱,适合快速验证场景:

def ai_score_increase(score_board_ai=[0]):
    print(score_board_ai[0])
    score_board_ai[0] += 1
    print(score_board_ai[0])

ai_score_increase()
ai_score_increase()

Python函数的默认参数在定义时仅初始化一次,可变对象(如列表)会保留修改后的状态,通过修改列表元素实现分数累加。

内容的提问来源于stack exchange,提问作者Evan Sowards

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 09:49:57