如何在python中通过文本文件获取输入?

时间:2017-11-28 11:15:46

标签: python

enter code here

def prims():

  r = 4;
  c = 4;
  total = 0
  matrix = [ [0 for x in range(r)] for y in range(c)]
  min = 999
  u = 0
  v = 0
  visited = [None]*4
  for i in range(0,4):
    visited[i] = 0
    for j in range(0,4):
        matrix[i][j] = input()
        if matrix[i][j]== 0:
            matrix[i][j] = 999
 visited[0] = 1
 for counter in range(0,3):
    min = 999
    for  i in range(0,4):
        if visited[i] == 1:
            for j in range(0,4):
                if visited[j] != 1:
                    if min > matrix[i][j]:
                        min = matrix[i][j]
                        a = u = i
                        b = v = j
    visited[v] = 1
    total = total + min

    print("edge found :{}->{}:{}".format(u,v,min))
print("The weight of minimum spanning tree is : {}".format(total))
return

prims()

我需要做什么,如果我想要将输入作为文本文件提供给该程序。我创建了一个名为" input.txt"的文件。我把矩阵的输入。任何人都可以帮我解决问题。

input.txt:

0 28 999 999 999 10 999

28 0 16 999 999 999 14

999 16 0 12 999 999 999

999 999 12 0 22 999 18

999 999 999 22 0 25 24

10 999 999 999 25 0 999

999 14 999 18 24 999 999

2 个答案:

答案 0 :(得分:2)

以下是从文件中读取的方法

file = open('path of input file')
for line in file.readlines():
  print(list(map(int, line.split(' '))))
file.close()

您也可以通过

将其存储到数组中
arr = []
file = open('path of input file')
for line in file.readlines():
  arr.append(list(map(int, line.split(' '))))
print(arr)
file.close()

输出

  

[[0,28,999,999,999,10,999],[28,0,16,999,999,999,14],[999,16,0,12,999,999,999] ],[999,999,12,0,22,999,18],[999,999,999,22,0,25,24],[10,999,999,999,25,0,999], [999,14,999,18,24,999,999]]

答案 1 :(得分:1)

如果我理解正确,您正在寻找一种转换输入的方法,例如:

0 28 999 999 999 10 999
28 0 16 999 999 999 14
999 16 0 12 999 999 999
999 999 12 0 22 999 18
999 999 999 22 0 25 24
10 999 999 999 25 0 999
999 14 999 18 24 999 999

您从文件中获取的内容为matrix ixj

matrix = []
with open('test.txt') as file:
    for line in file:
        matrix.append([int(val) for val in line.split()])

你得到结果:

matrix
Out[93]: 
[[0, 28, 999, 999, 999, 10, 999],
 [28, 0, 16, 999, 999, 999, 14],
 [999, 16, 0, 12, 999, 999, 999],
 [999, 999, 12, 0, 22, 999, 18],
 [999, 999, 999, 22, 0, 25, 24],
 [10, 999, 999, 999, 25, 0, 999],
 [999, 14, 999, 18, 24, 999, 999]]

当然,你可以使用索引:

matrix[1][2]
Out[94]: 16