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

Reply via email to