Passing Functions

MRAB python at mrabarnett.plus.com
Thu Mar 10 21:00:33 EST 2011


On 11/03/2011 01:13, yoro wrote:
> Hi,
>
> I am having an issue with passing values from one function to another
> - I am trying to fill a list in one function using the values
> contained in other functions as seen below:
>
> infinity = 1000000
> invalid_node = -1
> startNode = 0
>
> #Values to assign to each node
> class Node:
>       distFromSource = infinity
>       previous = invalid_node
>       visited = False
>
> #read in all network nodes
> def network():
>      f = open ('network.txt', 'r')
>      theNetwork = [[int(node) for node in line.split(',')] for line in
> f.readlines()]
>      print theNetwork
>
>      return theNetwork
>
> #for each node assign default values
> def populateNodeTable():
>      nodeTable = []
>      index = 0
>      f = open('network.txt', 'r')
>      for line in f:
>        node = map(int, line.split(','))
>        nodeTable.append(Node())
>
>        print "The previous node is " ,nodeTable[index].previous
>        print "The distance from source is
> " ,nodeTable[index].distFromSource
>        index +=1
>      nodeTable[startNode].distFromSource = 0
>
>      return nodeTable
>
> #find the nearest neighbour to a particular node
> def nearestNeighbour(currentNode, theNetwork):
>       nearestNeighbour = []
>       nodeIndex = 0
>       for node in nodeTable:
>            if node != 0 and currentNode.visited == false:
>               nearestNeighbour.append(nodeIndex)
>               nodeIndex +=1
>
>       return nearestNeighbour
>
> if __name__ == "__main__":
>      nodeTable = populateNodeTable()
>      theNetwork = network()
>      nearestNeighbour(currentNode, theNetwork, )
>
> So, I am trying to look at the values provided by the network
> function,  set all nodes to 'visited = false' in populateNodeTable
> function and then determine the nodes' nearest neighbour by looking at
> the values provided in the previous function, though I get this error
> message:
>
> if node != 0 and currentNode.visited == false:
> AttributeError: 'int' object has no attribute 'visited'
>
> I'm not sure what to try next
>
In nearestNeighbour, 'currentNode' is an int because that's what you're
passing in ... except that you aren't.

You're passing in the value of the global 'currentNode', which doesn't
exist. Perhaps you meant 'startNode'?

When I run the above program I get:

Traceback (most recent call last):
   File "C:\Documents and Settings\Administrator\Desktop\network.py", 
line 49, in <module>
     nearestNeighbour(currentNode, theNetwork, )
NameError: name 'currentNode' is not defined



More information about the Python-list mailing list