一次使用多个输入

时间:2015-10-20 10:50:15

标签: python python-3.x

现在我的程序接受输入并提供单行输出。该程序基本上使用一个名为network-x的手动安装的python库(它创建和分析图形,并具有许多内置的图论相关功能)。

对于此特定程序,它需要输入如下所示:

6       <-- Order of the graph (i.e the graph has 0 to 5 vertices)
1 2 3   <-- vertices going out from 0
2       <-- vertices going out from 1
3 5     <-- vertices going out from 2
4       <-- vertices going out from 3
5       <-- vertices going out from 4
        <-- vertices going out from 5 (no vertices going out from 5)

并返回输出(表示图表有多少个连接组件):

1

输入的另一个例子:

6
3 5
2

4

4

并输出:

2

我的程序的源代码是:

import networkx as nx
import sys
def main():     
 dag = nx.Graph()
 order = int(input())
 for i in range (order):
      dag.add_node(i)
 for j in range(order):
      seq = [input()]
      for vertex in seq:
           vertexList = vertex.split()
           for element in vertexList:
                dag.add_edge(j,int(element))
      j+=1

 components = nx.number_connected_components(dag)
 print (components)
main()

我目前只是想弄清楚如何让程序同时接受这两个输入并计算2行输出(每行输出每个输入的结果),如下所示:

6
1 2 3
2
3 5
4
5

6
3 5 
2

4

4
0 <-- when the the user inputs a zero, the loop terminates
循环结束后

输出:

1
2

任何帮助将不胜感激。 如果你想安装network-x库,请访问network-x的github网站:https://networkx.github.io/documentation/latest/install.html

1 个答案:

答案 0 :(得分:1)

只需使用循环并将每个结果保存在list

def main():
    result = []

    while 1:
        dag = nx.Graph()
        order = int(input())
        if not order: # check if it's 0
            break # end the loop
        for i in range (order):
            dag.add_node(i)
        for j in range(order):
            vertexList = input().split() # no need to put this single string into a list
            for element in vertexList:
                dag.add_edge(j,int(element))
        result.append(nx.number_connected_components(dag))

    print (result)

我删除了不必要的[input()],它生成了一个循环的单元素list。无需创建循环来访问单个对象。我还使用j += 1删除了循环结束时的j,因为所有这一切都是在它从range对象获取下一个值之前重新分配一个新值。它没有做任何事情。