Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
同一函数中同名的python3变量是不同的_Python_Python 3.x_Python 3.4 - Fatal编程技术网

同一函数中同名的python3变量是不同的

同一函数中同名的python3变量是不同的,python,python-3.x,python-3.4,Python,Python 3.x,Python 3.4,让我们简短一点 这是代码,我有一个WorldState和Action类,这里使用Action类属性名,WorldState不满和next_Action方法 def choose_action_plan(max_depth): # storage for world stage and action states = [[WorldState(goals, actions, costs), Action('base')]] # keep track of current best actions

让我们简短一点

这是代码,我有一个WorldState和Action类,这里使用Action类属性名,WorldState不满和next_Action方法

def choose_action_plan(max_depth):
# storage for world stage and action
states = [[WorldState(goals, actions, costs), Action('base')]]

# keep track of current best actions
best_action = None
best_value = 10000
best_plan = []

verbose = True

if verbose:
    print('Searching...')

changed = True

while states:
    current_value = states[-1][0].discontentment()

    if verbose and changed:
        print(states[-1][1].name + ' [' + str(current_value) + ']')

    if len(states) >= max_depth:
        # if current value is best (low) keep it!
        if current_value < best_value:
            best_action = states[1][1]
            best_value = current_value
            best_plan = [state[1].name for state in states if state[1]] + [best_value]
        states.pop()
        continue

    next_action = states[-1][0].next_action()
    if next_action:
        new_state = deepcopy(states[-1][0])
        states.append([new_state, None])
        states[-1][1] = Action(next_action)
        # apply action
        new_state.apply_action(next_action)
        changed = True
    else:
        # drop back down a level
        states.pop()


# Return the "best action"
return best_action.name
def选择行动计划(最大深度):
#世界舞台和行动的存储
状态=[[WorldState(目标、行动、成本)、行动(“基础”)]]
#跟踪当前的最佳行动
最佳行动=无
最佳值=10000
最佳计划=[]
详细=正确
如果冗长:
打印('正在搜索…')
更改=真
而缔约国:
当前_值=状态[-1][0]。不满()
如果详细且已更改:
打印(状态[-1][1]。名称+'['+str(当前_值)+']')
如果len(states)>=最大深度:
#如果当前值为最佳(低),请保留它!
如果当前_值<最佳_值:
最佳行动=国家[1][1]
最佳值=当前值
最佳_计划=[状态[1]。如果状态[1]]+[最佳_值],则状态中状态的名称
states.pop()
持续
下一步行动=状态[-1][0]。下一步行动()
如果下一步行动:
新状态=深度复制(状态[-1][0])
states.append([new_state,None])
国家[-1][1]=行动(下一个行动)
#应用操作
新的\u状态。应用\u操作(下一个\u操作)
更改=真
其他:
#降下一层
states.pop()
#返回“最佳操作”
返回最佳_action.name
我正在为人工智能创建一个面向目标的行动计划,
在上面的代码中,
best_action
总是以none返回,我已经尝试过调试,它通过循环内部传递出去,
best_action
已经填充,
best_value+best_plan
也没有修改,就像在循环内外有两个不同的变量一样。我不明白代码中发生了什么,我错过了什么?

结果是,当能量耗尽时,我的最佳操作在最后一个循环中没有返回任何结果(显然我无法始终找到最佳操作)。在我返回之前,我只需要检查
BestAction
是否为
None

您是否尝试过制作状态的深度副本并在其上循环,而不是在循环时修改原始状态?@JacobIRR我实际上没有,我只是做了一个WorldState类的深度复制,并附加到状态列表中,这样我就有了另一个不会影响真实状态的WorldState。我也没有对最佳值、最佳动作变量做任何事情。python将这两个变量检测为2个不同的变量(我可以看到pycharm为变量添加了灰色)啊,好的。现在,这个
best_plan
变量的作用是什么?@JacobIRR best_action是下一步,而best plan包含了未来的大量步骤。。因此,它不仅看到前进一步,如果对前方行动的不满能够导致最低的一步,那么它将选择最好的一步