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

Python函数更新对象问题:求解Score对象未正确更新的原因

问题分析与解决

你的代码无法更新原对象的核心问题是:你只读取了solver对象的分数值,修改的是局部变量solver_p,根本没对原solver对象执行任何更新操作。

solver_p = int(solver.get_score_at(g, phase))这行代码只是把get_score_at返回的分数值复制到了局部变量solver_p里,后续对solver_p的加减操作只会改变这个局部变量,和solver内部存储的分数数据没有任何关联,自然无法更新原对象。

修复方案

步骤1:确认并调用Solver类的分数修改方法

首先你需要确认Solver类是否提供了修改分数的方法(比如set_score_at这类命名的方法)。如果有,直接在函数里调用它来更新原对象:

def Updating(solver : Solver, g: Goal, phase: Phase, a: int):
    current_score = int(solver.get_score_at(g, phase))
    if a == 0:
        current_score += 1
    # 调用Solver类的设置方法,把新分数写入原对象
    solver.set_score_at(g, phase, current_score)
    # 可选:如果需要返回更新后的分数,可以保留return
    return current_score

步骤2:如果Solver类没有修改方法,需要自己实现

如果Solver类原本没有提供修改分数的方法,你需要在Solver类中添加对应的设置逻辑。假设Solver内部用字典存储分数,示例如下:

class Solver:
    def __init__(self):
        # 用(g, phase)元组作为键存储对应分数
        self._score_storage = {}

    def get_score_at(self, g: Goal, phase: Phase):
        # 不存在时返回0作为默认值
        return self._score_storage.get((g, phase), 0)

    def set_score_at(self, g: Goal, phase: Phase, new_score: int):
        # 更新对应位置的分数
        self._score_storage[(g, phase)] = new_score

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 21:40:21