Python If语句被忽略

时间:2013-10-15 23:09:53

标签: python python-3.x

我的python程序中存在一个问题,它产生了一个邻接列表。列表本身工作正常,但程序将查看va和vb之间是否存在路径(a到b)。问题是即使在弄乱了元组和括号之后,if语句也完全被忽略了。 if应该验证是否有路径,以及是否有发送消息。如果没有路径,则变量将递增,直到循环结束。如果它在没有找到路径的情况下结束,则会出现失败消息。 这是代码: grafo是图表类型。

class graph:
  v = 0
  a = 0
  node = []

class vertex:
  ta = []
  adj = {}

def caminhografo(grafo, va, vb):
  vat = defaultdict(list)
  i = 0
  a = 0
  z = 0
  vo = int(va)
  vq = int(vb)
  vz = int(va)
  vw = int(vb)
  x = len(grafo.node)
  if vz < vw:
      for vz in range (vw+1):
          a = 0
          x = len(grafo.node)
          for a in range (x):
              if [int(vz),int(a)] in grafo.node:
                  vat[vz].append(a)                   
  if vz > vw:
      while vz > vw:
          a = 0
          x = len(grafo.node)
          for a in range (x):
              if[int(va),int(a)] in grafo.node:
                  vat[vz].append(a)
          vz = vz - 1
  a = 0
  x = len(grafo.node)
  print(vat)
  z = 0
  #Problem starts here, after adjacency list is complete, none of the if's work and     There is never a path between vertex.
  for z in range (x):
      if (vo,vq) in vat:
         print("""
  ==============================================
           Existe Caminho
  ==============================================
  """)
         break
      elif (vo,z) in vat:
          vo = z

  print("""
  ==============================================
   Não Existe Caminho
  ==============================================
  "")

因此,如果我在顶点0和1之间插入弧后将va和vb发送为0和1,则输出显示(0:[1],1:[0])。这意味着这些顶点之间存在路径。除了最后的if,它应该验证路径,但永远不会成功。

我也使用defaultdict,邻接列表是defaultdict的列表字典。 最后的输出总是(“NãoexisteCaminho”),(“No Path”),这是最后的印刷品。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的if州正在寻找字典中的元组。但他们不会找到它们,因为你的字典使用单个值作为键。

我想你希望你的支票是:

if vo in vat and vq in vat[vo]:

这些检查中的第一项甚至不是严格要求的,因为vatdefaultdict(但它有助于避免添加不需要的空列表)。

但可能还有其他一些问题。我真的不明白你的z循环或elif块应该做什么。此外,即使找到路径,也会始终显示"Não Existe Caminho"文本。