2017-03-25 3 views
0

Dies ist für eine Schule Übung, auch ich bin neu, also bitte bitte mit mir ein bisschen. Ich habe ein Diagramm 'Dateiname' und ein Programm darunter, das eine Adjazenzmatrix ausgibt. Die Matrix ist wie so in einer Liste gesetzt:Drucken einer bestimmten Zeile aus einer Textdatei mit Python

[[0, 1, 1, 0], [1, 0, 1, 1], [1, 1, 0, 0], [0, 1, 0, 0]] 

Mit dieser Adjazenzmatrix, listet es ein theoretisches Sport Match-up, wo die Teams, die gegeneinander ausgespielt werden aufgelistet ‚1‘ und diejenigen, die nicht aufgeführt ist " 0 '. Ich habe eine andere Datei 'fileName2', die eine Gruppe von Teamnamen auflistet, wobei jede Zeile der Textdatei einen einzelnen Teamnamen hat. Ich möchte die Namen der Teams, die kein Spiel gegeneinander gespielt haben, ausdrucken. Mein Code so weit unten zu finden (es eine Menge Debug-Artefakte hat, ich weiß, es ist chaotisch):

vertices = int(input('How many vertices are there in the graph?')) 
fileName = input("What's the name of the file of graph to read?") 
fileName2 = input("What's the name of the file of team names to read?") 

f1 = open(fileName, 'r') 
f2 = open(fileName2, 'r') 

# Create adjacency matrix skeleton for storing later 

adjMatrix = [ [0] * vertices for i in range(vertices) ] 
# adjMatrix = [[0] * vertices] * vertices 

# Looping through the file to obtain the connecting vertices 

for line in f1: 
    line = line.replace('\n', '') 
    line = line.split(' ') 
    i = 0 
    for vert in line: 
     line[i] = int(vert) 
     i += 1 

    j = line[0] 
    k = line[1] 

    adjMatrix[j][k] = 1 
    adjMatrix[k][j] = 1 

print(adjMatrix) 

# Print out the teams who have yet to play against each other 

for m in range(vertices): 
    # print(adjMatrix[m]) 
    for n in range(vertices): 
     # print(adjMatrix[m][n]) 
     if m != n and adjMatrix[m][n] == 0: 
      if m < n: 
       print(m,n) 
       t = 0 
       for team in f2: 
        if m == t: 
         print(team) 
        if n == t: 
         print(team) 
        t += 1 
      # Is this elif statement necessary as we sort through the teams? 
      elif m > n: 
       print(n,m) 

# for team in f2: 
# print(team) 

f1.close() 
f2.close() 

Das Problem mit diesem Code so weit ist, dass die „für Team in f2“ Schleife nicht Schleife erneut, wenn diese Codezeile aus der Anweisung 'if m < n' aufgerufen wird. Aus diesem Grund druckt es nur ein Match, das noch nicht gespielt wurde, aber nicht das andere Match-Up, das nicht gespielt wurde.

Es sollen 2 noch zu spielende Match-Ups sein (0-3 und 2-3), so dass die Namen für 0-3, aber nicht für 2-3 ausgegeben werden.

Möchten Sie wissen, wie Sie: 1. das Problem mit der for-Schleife über Datei 'f2' beheben; und 2. verbessere diesen Code, den ich bisher zusammengefügt habe.

Vielen Dank im Voraus.

Hinweis: Ich verwende Python 3.5.3

Antwort

0

Wenn Sie einmal über Datei f2 laufen, müssen Sie die Datei zurückspulen erneut zu starten:

f2.seek(0) 
+0

Dieser Befehl ist gesetzt, bevor ich anfangen die Schleife wieder, sagen wir t = 0; f2.Suche (0); bevor die for-Schleife erneut startet? –

+0

Ja, genau dort. – user4624500

Verwandte Themen