我的list.append出了什么问题?

时间:2014-01-25 16:16:22

标签: python

我正在编写一个解决经典河流拼图的程序,我有点坚持这个。基本上我有一个函数getmoves,它给我一个包含有效游戏状态列表的列表。该函数通过遍历所有可能的移动并将有效的移动附加到输出来计算有效的游戏状态。

问题是我每次向output追加output次更改。

def getmoves(gamestate):
    """
    Returns a list of all possible moves
    """
    boatshore=None
    moveablemen=[]
    moveableobjects=[]
    output = []
    gs = gamestate

    for item in gs:
        if item['name'] == 'boat':
            boatshore = item['shore']

    for item in gs:
        if (item['shore'] == boatshore and item['name'].find('man')!=-1):
            moveablemen.append(item)

    for item in gs:
        if (item['shore'] == boatshore and item['name'] != 'boat'):
            moveableobjects.append(item)

    for man in moveablemen:
        for obj in moveableobjects:
            if (man != obj and man['value']>=obj['value']):
                possiblemove = move(man['name'], obj['name'],gs)

                if shorenetworth(possiblemove) == True:
                    output.append(possiblemove)
                    pp.pprint(output)

    return output

在一次追加操作后输出为:

[   [   {   'name': 'manA', 'shore': -1, 'value': 3},
        {   'name': 'manB', 'shore': 1, 'value': 5},
        {   'name': 'manC', 'shore': 1, 'value': 8},
        {   'name': 'coinA', 'shore': -1, 'value': 3},
        {   'name': 'coinB', 'shore': 1, 'value': 5},
        {   'name': 'coinC', 'shore': 1, 'value': 8},
        {   'name': 'boat', 'shore': -1}]]

输出终于来了:

[   [   {   'name': 'manA', 'shore': -1, 'value': 3},
        {   'name': 'manB', 'shore': 1, 'value': 5},
        {   'name': 'manC', 'shore': -1, 'value': 8},
        {   'name': 'coinA', 'shore': -1, 'value': 3},
        {   'name': 'coinB', 'shore': 1, 'value': 5},
        {   'name': 'coinC', 'shore': -1, 'value': 8},
        {   'name': 'boat', 'shore': -1}],
    [   {   'name': 'manA', 'shore': -1, 'value': 3},
        {   'name': 'manB', 'shore': 1, 'value': 5},
        {   'name': 'manC', 'shore': -1, 'value': 8},
        {   'name': 'coinA', 'shore': -1, 'value': 3},
        {   'name': 'coinB', 'shore': 1, 'value': 5},
        {   'name': 'coinC', 'shore': -1, 'value': 8},
        {   'name': 'boat', 'shore': -1}],
    [   {   'name': 'manA', 'shore': -1, 'value': 3},
        {   'name': 'manB', 'shore': 1, 'value': 5},
        {   'name': 'manC', 'shore': -1, 'value': 8},
        {   'name': 'coinA', 'shore': -1, 'value': 3},
        {   'name': 'coinB', 'shore': 1, 'value': 5},
        {   'name': 'coinC', 'shore': -1, 'value': 8},
        {   'name': 'boat', 'shore': -1}],
    [   {   'name': 'manA', 'shore': -1, 'value': 3},
        {   'name': 'manB', 'shore': 1, 'value': 5},
        {   'name': 'manC', 'shore': -1, 'value': 8},
        {   'name': 'coinA', 'shore': -1, 'value': 3},
        {   'name': 'coinB', 'shore': 1, 'value': 5},
        {   'name': 'coinC', 'shore': -1, 'value': 8},
        {   'name': 'boat', 'shore': -1}],
    [   {   'name': 'manA', 'shore': -1, 'value': 3},
        {   'name': 'manB', 'shore': 1, 'value': 5},
        {   'name': 'manC', 'shore': -1, 'value': 8},
        {   'name': 'coinA', 'shore': -1, 'value': 3},
        {   'name': 'coinB', 'shore': 1, 'value': 5},
        {   'name': 'coinC', 'shore': -1, 'value': 8},
        {   'name': 'boat', 'shore': -1}]]

我确定我可能在某个地方犯了一个愚蠢的错误,但我不知道在哪里可以得到任何帮助。

编辑:

def move(man, name, gsinput):
    """
    move two items
    """
    for item in gsinput:
        if (item['name'] == name or item['name'] == man or item['name'] == 'boat'):
            item['shore'] *= -1
    return gsinput

这是将值附加到output的函数。

1 个答案:

答案 0 :(得分:0)

啊,我遇到了问题。我将变量possiblemove附加到我的列表而不是字符串,所以当变量更改时输出也会更改。