2通过python命令行和“if\uuuuu name\uuuuu==”\uuuuu main\uuuuuuu:”进行输入

2通过python命令行和“if\uuuuu name\uuuuu==”\uuuuu main\uuuuuuu:”进行输入,python,Python,你知道我做错了什么吗 我使用了以下代码: else: stack_queue.append((next, edge + [next])) if __name__ == "__main__": print(list(breath_first_search(graph, 'J', 'A'))) 它在Spyder控制台[['J','I','H','C','A']上打印 我想通过cmd运行这个。我是这样做的: python C:\XX\

你知道我做错了什么吗

我使用了以下代码:

            else:
                stack_queue.append((next, edge + [next]))

if __name__ == "__main__":
    print(list(breath_first_search(graph, 'J', 'A')))
它在Spyder控制台[['J','I','H','C','A']上打印

我想通过cmd运行这个。我是这样做的:

python C:\XX\XX-first-search.py
这也给了我正确的结果

现在,我想将其更改为从cmd接收2个输入字母。我试过:

if __name__ == "__main__":
    print(list(breath_first_search(graph, sys.argv[0], sys.argv[1])))
它给了我一个错误:

我还尝试:

if __name__ == "__main__":
    print(list(breath_first_search(graph, sys.argv, sys.argv)))
如果需要,我的全部代码:

import sys

graph = {'A': set(['B', 'C']),
         'B': set(['A', 'D', 'E']),
         'C': set(['A', 'G', 'H']),
         'D': set(['B']),
         'E': set(['B', 'F']),
         'F': set(['E']),
         'G': set(['C']),
         'H': set(['C','I']),
         'I': set(['H', 'J']),
         'J': set(['I'])}


def breath_first_search(graph, initial_node, final_node):
    stack_queue = [(initial_node, [initial_node])]  # List; initial node is the initial node; creates a list 

    while stack_queue:
        (node, edge) = stack_queue.pop(0)

        for next in graph[node] - set(edge):

            if next == final_node:
                yield edge + [next]

            else:
                stack_queue.append((next, edge + [next]))

if __name__ == "__main__":
    print(list(breath_first_search(graph, sys.argv, sys.argv)))
是传递给程序的参数列表,包括作为第一个参数的程序本身,因此sys.argv[0]是程序的名称

因此,我们可以使用sys.argv[1]和sys.argv[2]传递两个额外的参数:

if __name__ == "__main__":
    print(list(breath_first_search(graph, sys.argv[1], sys.argv[2])))
或者,我们可以先进行一些适当的检查并按顺序拆包,使其更加优雅:

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print('Program requires two parameters')
        sys.exit(1)
    __, a, b = sys.argv
    print(list(breath_first_search(graph, a, b)))

sys.argv[0]是程序名本身。您想从sys.argv[1]开始。如果您回答正确,请首先回答。如果你把你的答案作为答案,我可以说是正确的;威廉的回答写得很好。如果你接受的话,我一点也不会被轻视