2015-10-20 2 views
2

Прямо сейчас моя программа принимает ввод и дает один вывод линии. Эта программа в основном использует установленную вручную библиотеку python, называемую network-x (которая создает и анализирует графики и имеет множество встроенных функций, связанных с графикой).Использование сразу нескольких входов

Для этой конкретной программы, она принимает входной сигнал, как показано ниже:

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 

Любая помощь будет оценена по достоинству. PSif вы хотите установить веб-сайт GitHub в сети-X библиотека посетить сетевой-X: https://networkx.github.io/documentation/latest/install.html

+0

Поместите свою «главную» функцию в цикл, сохраните «компоненты» в списке, выйдите, когда 'order' равно' 0', и выведите список 'components'. – Holt

ответ

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. Это ничего не делало.