2

我对python相当陌生,我一直在努力编写一个程序,该程序将文件中的一行作为输入来验证Lo Shu Magic Square。我需要做的是一次读取文件中的一行,例如每行 1 2 3 4 5 6 7 8 9 ,并将其转换为二维数组,如 [[1,2,3],[4 ,5,6],[7,8,9]] 前三个数字对应魔方第一行的值,后三个值对应第二行,后三个值对应最后一个排。

到目前为止我已经尝试过

def main():
  data = []
  for line in open('Magic Square Input.txt'):
    items = line.split(" ")
    temp = 0
    setOfThree = []
    for item in items:

        if(len(item) > 1):
            item = item[0:1]

        if(item != " "):
            setOfThree.append(item)
            temp += 1


        if(temp == 3):
            test = []
            test = setOfThree[:]
            test = [int(x) for x in test]
            data.append(test)

但这只会给我

[[4, 3, 8]]
[[4, 3, 8], [8, 3, 4]]
[[4, 3, 8], [8, 3, 4], [6, 1, 8]]
[[4, 3, 8], [8, 3, 4], [6, 1, 8], [6, 9, 8]]
[[4, 3, 8], [8, 3, 4], [6, 1, 8], [6, 9, 8], [6, 1, 8]]
[[4, 3, 8], [8, 3, 4], [6, 1, 8], [6, 9, 8], [6, 1, 8], [6, 1, 3]]
[[4, 3, 8], [8, 3, 4], [6, 1, 8], [6, 9, 8], [6, 1, 8], [6, 1, 3], [5, 5, 5]]

文本文件的内容是

4 3 8 9 5 1 2 7 6
8 3 4 1 5 9 6 7 2
6 1 8 7 5 3 2 9 4
6 9 8 7 5 3 2 1 4
6 1 8 7 5 3 2 1 4
6 1 3 2 9 4 8 7 5
5 5 5 5 5 5 5 5 5

所以我觉得我在正确的轨道上,但它只将每行的前三项附加到数据中,我不知道为什么

4

1 回答 1

0

线条总是有 9 个元素,所以

line = "1 2 3 4 5 6 7 8 9"

items = line.split()

result = [items[0:3], items[3:6], items[6:9]]

print(result)

编辑:所有行都一样

lines = """4 3 8 9 5 1 2 7 6
8 3 4 1 5 9 6 7 2
6 1 8 7 5 3 2 9 4
6 9 8 7 5 3 2 1 4
6 1 8 7 5 3 2 1 4
6 1 3 2 9 4 8 7 5
5 5 5 5 5 5 5 5 5"""

data = []

for line in lines.split('\n'):

    items = line.split()

    data.append([items[0:3], items[3:6], items[6:9]])

print(data)

如果您需要更通用的 - 针对不同的N

N = 3

data = []

for line in lines.split('\n'):

    items = line.split()
    array = []

    while items:
        array.append(items[:N])
        items = items[N:]

    data.append(array)

print(data)
于 2017-02-05T03:28:58.840 回答