0

関数に整数を渡そうとしています。何度も呼んでいるのでうまくいかないのではないでしょうか?たとえば、Alist という 1 つの関数で 2 次元行列を作成し、それを返します。2 番目の関数では、Alist を渡し、Alist から取得したい値の場所を指定してから返します。最後に (これまでのところ)、3 番目の関数が戻り値と Alist を要求します。Alist は正常に出力されますが、戻り値 (ノード) は 4 になるはずのときに 0 を出力しています。コードの先頭で宣言された node = 0 変数を使用していると思いますが、その理由はわかりません。

network.txt の最初の行は次のようになります: 0,2,4,1,6,0,

Alist = []
node = 0

file = ("F:/media/KINGSTON/Networking/network.txt")

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):
        node = Alist[0][2]
        print (node)
        return node

#test neighbours to see if they can be used
def check_neighbours(node, Alist):
        print (Alist)
        print (node)
        #check for neighbours. if we start at [0][0] we must look for [0][1]
        #and [1][0]. Figure out how to add 1 to each cell to navigate across.

#running of code begins here
Alist = create_matrix(file)
start_node(Alist)
check_neighbours(node, Alist)
4

2 に答える 2

2

これがあなたの問題です。「コードの実行はここから始まります」の2行目です。

Alist = create_matrix(file) 
start_node(Alist) 
check_neighbours(node, Alist)

を呼び出すとstart_node(Alist)、ローカル変数(たまたま呼び出されますnode)が作成され、その値が返されますが、無視してください。これは、グローバル変数node(偶然の名前にもかかわらず)が変更されていないため、0のままであることを意味します。

これを機能させるには、上記の行で行うのと同じことを行う必要があります。

node = start_node(Alist) 

ただし、コードの混乱を少なくするために、実際にはいくつかのことを行う必要があります。

Alist = []まず、上部のとを削除しnode = 0ます。関数の前にそれらを定義すると、関数内でグローバルとして使用されることを期待しているように見えますが、これは誤解を招く恐れがあります。(そして同じfileことが言えます—あなたはそれを定義する必要がありますが、一番上には必要ありません。)

次に、すべての最上位のもの(これらの2つのグローバル変数を含む)を関数に抽象化すると、混乱の可能性がすべてなくなります。

したがって、3つの関数定義を残して、次のようにします。

def main():
    file = ("F:/media/KINGSTON/Networking/network.txt")
    Alist = create_matrix(file)
    node = start_node(Alist)
    check_neighbours(node, Alist)
main()
于 2013-03-18T17:55:39.147 に答える
-1

create_matrixあなたが書いているときの機能では、グローバル変数をシャドウAlist = []する新しいローカル変数を作成しています。次のことを試してください。AlistAlist

def create_matrix(file):
    global Alist  # Mark Alist as global variable
    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

詳細については、globalキーワード ドキュメントを参照してください。

于 2013-03-18T17:53:34.543 に答える