Passing Functions
yoro
gmj123 at hotmail.co.uk
Fri Mar 11 08:49:51 EST 2011
On Mar 11, 2:00 am, MRAB <pyt... at mrabarnett.plus.com> wrote:
> 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
I've found the error, I had to type in:
for node in nodeTable:
if node != 0 and Node.visited == False:
More information about the Python-list
mailing list