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
相关产品推荐
相关产品推荐

