0

我正在尝试将整数传递给函数。我认为它可能不起作用,因为我多次调用它?例如,我在一个名为 Alist 的函数中创建了一个二维矩阵,然后将其返回。使用第二个函数,我通过 Alist 并为我想要从 Alist 中返回的值指定一个位置,然后返回。最后(到目前为止),第三个函数将要求返回值和 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

这是您的问题,在“代码运行从这里开始”的第二行:

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——你确实需要定义,但不是在顶部。)

然后,如果您将所有顶级内容(包括这两个全局变量)抽象为一个函数,这将消除所有混淆的可能性。

所以,留下你的三个函数定义,然后:

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 = []正在创建一个新的局部变量Alist,它会影响全局变量Alist。尝试以下操作:

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 回答