klant a écrit :
do i need to call Graph.find_path?
>
g = Graph({'A': ['B', 'C'],
'B': ['C', 'D'],
'C': ['D'],
'D': ['C'],
'E': ['F'],
'F': ['C']})
g
<__main__.Graph instance at 0x01D74378>
g.find_all_paths('A', 'C')
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
g.find_all_paths('A', 'C')
File "C:/Python25/Progs/pygameProgs/visualgraph/graph.py", line 26,
in find_all_paths
newpaths = find_all_paths(self.dictionary, node, end, path)
NameError: global name 'find_all_paths' is not defined
g.find_path('A', 'C')
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
g.find_path('A', 'C')
File "C:/Python25/Progs/pygameProgs/visualgraph/graph.py", line 13,
in find_path
newpath = find_path(self.dictionary, node, end, path)
NameError: global name 'find_path' is not defined
>
class Graph:
Unless you need to ensure compat with ages-old Python versions, better
to use newstyle classes:
class Graph(object):
def __init__(self, dictionary):
self.dictionary = dictionary
def find_path(self, start, end, path=[]):
http://effbot.org/pyfaq/why-are-default-values-shared-between-objects.htm
Unless you exactly what you're doing (and given your current problem, I
can tell it's not the case), *don't* use mutable containers as default
function argument values.
def find_path(self, start, end, path=None):
if path is None:
path = []
path = path + [start]
path.append(start)
if start == end:
return path
if not self.dictionary.has_key(start):
if start not in self.dictionnary:
return None
for node in self.dictionary[start]:
if node not in path:
newpath = find_path(self.dictionary, node, end, path)
newpath = self.find_path(...)
(snip remaining code - same problems, same solutions...)
--
http://mail.python.org/mailman/listinfo/python-list