1

holderリスト (を含む[0,0]) を別の関数に渡すのに苦労しています。check_neighboursリストを取得して、さらに処理を行いたいと思います。私はそれを正しく渡していると思いますmain()が、内部で呼び出されたときにリストの内容を単に表示するために何をしなければならないかわかりませんcheck_neighbours=ホルダーを試しましたが、次のエラーが表示されました。

グローバル名「holder」が定義されていません

ここに置く必要があるとholder = #something思いますが、何がわかりません。

 def create_matrix(file):
    with open('network.txt') as f:
        Alist = []
        for line in f:
            part = []
            for x in line.split(','):
                part.append(int(x))
            Alist.append(part)
    return Alist

def start_node(Alist):
        i=0
        j=0
        #point node to pos [0][0] of Alist
        node = Alist[i][j]
        #create a list to hold co-ordinates
        holder = []
        holder.append(i)
        holder.append(j)
        print holder

        return node, holder

#test neighbours to see if they can be used
def check_neighbours(node, Alist):
        holder = #something 



#code begins here
def main():
        file = ("F:/media/KINGSTON/Networking/network.txt")
        Alist = create_matrix(file)
        node = start_node(Alist)
        holder = check_neighbours(node, Alist)
main()
4

1 に答える 1

4

の最後にstart_node、次のようにします。

return node, holder

…しかし、それを呼び出すときは、次のようにします。

node = start_node(Alist)

つまり、ローカルnode変数は のタプルになりnode, holderます。あなたはそれを望んでいません。あなたはこれを求めている:

node, holder = start_node(Alist)

一方、「main() 関数で正しく渡していると思います」と言っていますが、関数ではまったく渡していません。main

holder = check_neighbours(node, Alist)

あなたがここでそれを与えていないので、ここcheck_neighboursにたどり着く方法はありません。holderholder

さらに、 を定義したときはcheck_neighbours、次のようにしました。

def check_neighbours(node, Alist):
    holder = #something 

これはパラメーターを取らず、holderという名前の新しいローカル変数を定義しますholder。したがって、これらの 2 行を次のように変更します。

def check_neighbours(node, Alist, holder):

そしてそれを呼び出す:

holder = check_neighbours(node, Alist, holder)

check_neighborsまた、変数にbackの結果を代入してholder、渡したものを置き換えていることに注意してください。多くの場合、それは完全に合理的なことですが (考えてくださいmy_name = my_name.replace('Joseph', 'Joe'))、それが本当にあなたが望むものであることを確認してください (そしてもちろん、を実行するか、他の適切な値を返すことcheck_neighborsによって終了することを確認してください)。return holder

最後に、他の質問で述べたように、パラメーターと渡す値に同じ名前を使用し続けると、このように混乱し続けることになります。別の名前を使用した場合は、不足しているものを簡単に確認できます。それぞれの接頭辞のような単純なものでも:

def main():
    file = ("F:/media/KINGSTON/Networking/network.txt")
    my_list = create_matrix(file)
    my_node, my_holder = start_node(my_list)
    my_new_holder = check_neighbours(my_node, my_list, my_holder)
于 2013-03-19T01:11:55.107 に答える