python - 2 通过 python 的命令行和 "if __name__ == "__main__":" 输入
问题描述
关于我做错了什么的任何想法?
我正在使用以下代码:
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
[doc]是传递给程序的参数列表,包括程序本身作为第一个参数(sys.argv[0]
程序名称也是如此)。
因此,我们可以使用sys.argv[1]
andsys.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)))
推荐阅读
- reactjs - Capybara 功能测试(js:true,React)失败,因为图像元素被迫提出请求
- java - RedisCacheManager 未更新 keyspace_misses
- php - 当我遍历它时,php多维数组输出显示不正确的产品
- angular - Angular 5 使用 Angular Universal 从 API 设置路由
- android - 使用 Picasso 将多个图像从 url 加载到 android 应用程序
- github - git diff - 向(未)提交的版本添加编辑
- cassandra - 如何在 cassandra.yaml 中重新加载种子
- mongodb - 通配符搜索和单个文本搜索之间的区别
- android - Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeOnPause
- java - 方法 com/mysql/jdbc/PreparedStatement.isClosed()Z 是抽象的