使用python

时间:2017-03-25 13:21:01

标签: python file loops matrix graph

这是一次学校运动,我也是新手,所以请稍等一下。我有一个图表'fileName'和一个下面的程序输出一个邻接矩阵。矩阵放在如下列表中:

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

通过这个邻接矩阵,它列出了一个理论上的运动比赛,其中相互比赛的球队被列为'1'而没有被列为'0'的球队。我有另一个文件'fileName2',它列出了一堆团队名称,其中文本文件的每一行都有一个团队名称。我的目标是打印出彼此之间没有比赛的球队的名字。到目前为止,我的代码可以在下面找到(它有很多调试工件,我知道,它很乱):

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()

到目前为止,这段代码的问题在于,当从'if m&lt;中调用该代码行时,“for for team in f2”循环不再循环。 n'声明。因此,它只打印出一场尚未上场的比赛,但没有打出另外一场没有比赛的比赛。

应该有两个尚未参与的比赛(0-3和2-3),所以它打印的名称列为0-3但不是2-3。

想知道如何: 1.修复for循环文件'f2'的问题;和 2.改进我到目前为止拼凑的代码。

提前致谢。

注意:我正在使用Python 3.5.3

1 个答案:

答案 0 :(得分:0)

当您在文件f2上迭代一次时,您必须将文件倒回以重新开始:

f2.seek(0)