Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.7k views
in Technique[技术] by (71.8m points)

Python转化为JS的问题

有这样一段Python代码:

map = {
    'V0': ['V1', 'V2'],
    'V1': ['V0', 'V3', 'V4'],
    'V2': ['V0', 'V5', 'V6'],
    'V3': ['V1', 'V7'],
    'V4': ['V1', 'V5', 'V7'],
    'V5': ['V2', 'V4', 'V6'],
    'V6': ['V2', 'V5', 'V8'],
    'V7': ['V3', 'V4'],
    'V8': ['V6']
}


def traverse(start, end):
    main_stack = [start]
    side_stack = [map[start]]

    while len(main_stack) > 0:
        side_top = side_stack.pop()
        if len(side_top) > 0:
            main_top = side_top[0]
            main_stack.append(main_top)
            side_stack.append(side_top[1:])
            if len(map[main_top]) > 0:
                side_top = []
                for v in map[main_top]:
                    if v not in main_stack:
                        side_top.append(v)
                side_stack.append(side_top)
        else:
            main_stack.pop()

        if len(main_stack) > 0 and main_stack[-1] == end:
            print("==============FOUND==============")
            print(main_stack)
            pop_stack(main_stack, side_stack)


def pop_stack(main_stack, side_stack):
    main_stack.pop()
    if len(side_stack) > 0:
        side_stack.pop()

if __name__ == '__main__':
    traverse('V3', 'V6')

我尝试转换成javascript:

var map = {
  'V0': ['V1', 'V2'],
  'V1': ['V0', 'V3', 'V4'],
  'V2': ['V0', 'V5', 'V6'],
  'V3': ['V1', 'V7'],
  'V4': ['V1', 'V5', 'V7'],
  'V5': ['V2', 'V4', 'V6'],
  'V6': ['V2', 'V5', 'V8'],
  'V7': ['V3', 'V4'],
  'V8': ['V6']
}

var main_stack
var side_stack

function traverse(start, end) {
  main_stack = [start]
  side_stack = [map[start]]

  while (main_stack.length) {
    var side_top = side_stack.pop()
    
    if (side_top.length) {
      var main_top = side_top[0]
      
      main_stack.push(main_top)
      side_stack.push(side_top.slice(1))

      if (map[main_top].length) {
        side_top = []

        for (let v of map[main_top]) {
          if (!map[main_top].includes(v)) {
            side_top.push(v)
          }
        }
        side_stack.push(side_top)
      }
    } else {
      main_stack.pop()
    }

    if (main_stack.length && main_stack[main_stack.length - 1] === end) {
      console.log(main_stack)
      pop_stack(main_stack, side_stack)
    }
  }
}

function pop_stack(main_stack, side_stack) {
  main_stack.pop()
  if (side_stack.length)
    side_stack.pop()
}

traverse('V3', 'V6')

可是并没有输出Python代码的运行结果,我对Python语法不是很熟悉,可以请教一下高人是哪里写错了吗?谢谢~


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
for (let v of map[main_top]) {
  if (!map[main_top].includes(v)) {
    side_top.push(v)
  }
}

这句写错了吧,自相矛盾的样子


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...