2017-02-05 5 views
2

Я довольно новичок в python, и я борется с кодированием программы, которая возьмет строку в файле в качестве входных данных, чтобы проверить Lo Shu Magic Square. То, что мне нужно сделать, - это прочитать одну строку в файле за раз и с каждой строкой , например, и преобразовать ее в массив 2d, такой как [[1,2,3] , [4,5,6], [7,8,9]] Первые три числа соответствуют значениям в первой строке магического квадрата, следующие три значения соответствуют второй строке, а последние три значения соответствуют последней строке.Как превратить строку в файл в массив 2d

До сих пор я пытался

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 

Так что я чувствую, как им на правая дорожка, но только добавляет первые три элемента каждой строки к данным, и я не могу понять, почему

+0

Что вы пытаетесь, и с чем именно вы боретесь? Редактируя свой вопрос, чтобы мы могли видеть ваш код до сих пор и детализируя, что происходит, значительно увеличит ваши шансы получить хороший ответ. – miradulo

+0

Программа должна быть в состоянии взять этот 2d-массив, проверить его как действительный магический квадрат или нет, а затем напечатать допустимый или недействительный для каждой строки, если это магический квадрат или нет. – TheBudderBomb

+0

Это не касается моего вопроса - I спросил, что вы пробовали, и что происходит не так. Stack Overflow - это не программа для написания кода, и вы не получите всю свою программу для вас. – miradulo

ответ

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) 

EDIT: то же самое со всеми линиями

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)