2017-02-05 99 views
2

我對python相當陌生,我一直在努力編寫一個程序,該程序將文件中的一行作爲輸入來驗證Lo Shu Magic Square。我需要做的是每次在文件中讀取一行,每行例如,並將其轉換爲一個二維數組,如 [[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 

所以我覺得像IM上正確的軌道,但它唯一的附加每條線的前三項數據,我不知道爲什麼

+0

你有什麼企圖,你究竟在與什麼掙扎?編輯你的問題,以便我們可以看到你的代碼到目前爲止,並詳細說明發生了什麼問題將大大增加獲得良好答案的機會。 – miradulo

+0

該程序需要能夠採取這個二維數組,驗證它是一個有效的魔術廣場或沒有,然後打印有效或無效的每條線給出,如果它的魔術廣場或不 – TheBudderBomb

+0

這不解決我的問題 - 我問你已經嘗試了什麼,出了什麼問題。堆棧溢出不是一個代碼寫入服務,你不會爲你完成整個程序。 – 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) 

編輯:的所有生產線

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) 
相關問題