0

関数に問題が見つかりましたHerusticSort。確認します。


次のようなネストされたリストを使用してPythonコードを作成しました。

opentab = [[start], [0], [None]]

node = opentab[0].pop(0)

しかし、コードを実行すると、プロンプトが表示されます

HerusticSearchAのファイル「\HerusticSearch.py​​」、97行目

node = opentab [0] .pop(0)

AttributeError:'タプル'オブジェクトに属性'pop'がありません

クラスを変更せず、ネストされたリストとしてすでに定義しているので、非常に奇妙です。


問題が発生した後、それが正しいことを確認するためにアサーションを設定しました。

assert isinstance(opentab[0], list)

そしてもちろん今、私はAssertionErrorを受け取りました

IDLEも1つずつ試してみましたが問題ありません。

ここに完全なコード部分を置いただけですが、なぜこれが起こったのかわかりません...


def HerusticSearchA(start, end):
    '''
    
    '''

    def H_Function(state, depth):
        '''
        state is a 3 x 3 list, stands for the puzzle state.
        returns the herustic assessment value
        g for the depth of the node, h for the incorrect tile number
        '''
        crit = copy.deepcopy(end)
        count = 0
        for i in range(len(state)):
            for j in range(len(state[0])):
                if state[i][j] - crit[i][j] != 0:
                    count += 1
        return depth + count


    #1. Variables
    #[[state], [value], [father]]
    opentab = [[start], [0], [None]]
    close = [[], [], []]

    depth = 0
    done = False

    print(start, end)
    while len(opentab[0]) > 0:
    #2. Nothing to continue
        if opentab == [[], [], []]:
            return None
    #3. remove n from OPEN
        assert isinstance(opentab[0], list)

        node = opentab[0].pop(0)
        nodevalue = opentab[1].pop(0)
        father = opentab[2].pop(0)
        close[0].append(node)
        close[1].append(nodevalue)
        close[2].append(father)
    #4. Got result
        if node == target:
            close[0].append(node)
            close[1].append(nodevalue)
            close[2].append(father)
            done = True
            break
    #5. Extract followers
        else:
            nexts = NextStep(node)
            for subnode in nexts:
                newvalue = H_Function(subnode, depth)
                #conditions:
                #6.
                if subnode not in opentab[0] and subnode not in close[0]:
                    opentab[0].append(subnode)
                    opentab[1].append(newvalue)
                    opentab[2].append(node)
                #7.
                if subnode in opentab[0]:
                    idx = opentab[0].index(subnode)
                    if newvalue < opentab[1][idx]:
                        opentab[1][idx] = newvalue
                        opentab[2][idx] = node
                #8.
                if subnode in close[0]:
                    idx = close[0].index(subnode)
                    if newvalue < close[1][idx]:
                        close[1][idx] = newvalue
                        close[2][idx] = node
        #9. sort opentab
        HerusticSort(opentab, 1)
        depth += 1

    return close
4

2 に答える 2

2

このプログラムで、opentab[0]通常の状況ではタプルに変更される可能性がある唯一の行はですHeuristicSort。残念ながら、のソースはHeuristicSortここにないので、それが問題であるかどうかはわかりません。しかし、私はこれを要求に応じて投稿しています。

于 2012-07-12T17:44:57.360 に答える
0

58行目を変更して修正opentab[0].append(subnode)するopentab[0].append(list(subnode))必要があります。

問題は、subnodeではtupleないということlistです。

于 2012-07-12T17:07:43.553 に答える