1

私はPythonの初心者であり、ここで基本的なエラーを理解しようとしています。TypeErrorが発生しています:'list'オブジェクトは、以下のコードでは呼び出し可能なエラーではありません。誰かが私のコードの何が悪いのか説明してもらえますか?

graph = {'a': ['b', 'c'], 'b': ['a', 'c'], 'c': ['b', 'd'], 'd': ['a'], 'e': ['a']}


def reachable(graph, node):
    res = [node]
    reachable = graph[node]
    for currentnode in reachable:
        if currentnode not in res :
            reachableNodes = reachable(graph,currentnode) << TypeError: 
            for newNode in reachableNodes:
                if newNode not in res :
                    res.append(newNode)
    return res 

エラー:TypeError:'list'オブジェクトは呼び出し可能エラーではありません

4

2 に答える 2

8

を実行して関数名を非表示にしましたreachable = graph[node]。別の名前を使用してください。

于 2012-04-08T20:03:53.653 に答える
2

reachable再帰的に呼び出すモジュール名です。

3 行目で と言うと、関数にバインドされていreachable = graph[node]た変数が上書きreachableされ、リスト (またはその他) にリンクされます。

6行目で関数を再帰的に呼び出そうとすると、リストを呼び出そうとしてreachable失敗します。

この変数の名前の変更を解決するには、リストを別のものに保持するつもりですreachable

canreach = graph[node]
for currentnode in canreach:

また、到達可能な機能を再確認してください。無限再帰の可能性があります。を再帰的に呼び出すたびにreachable、 の新しいインスタンスを作成していますres。だからif currentnode not in res決して間違っていません。res をパラメーターとして渡すか、グローバルとして使用してみてください。

于 2012-04-08T20:10:09.637 に答える