2014-10-20 146 views
0

這是爲了我的IT類,我試圖找出每一行的總和。它是一個神奇的廣場節目。當我運行這個它說int對象不可迭代。另外,老師需要這個函數的頭像def rowSum(matrix,rowNum),但我不明白爲什麼需要rowNum。該函數應該能夠計算任意大小矩陣的每一行的總和。此外,我不能使用numpy和enumarate,因爲我們還沒有在課堂上討論過它。從文件中讀取Python的矩陣

矩陣txt文件:

1 4 
3 2 

這裏是代碼

def main(): 
    filNam = "matrix1.txt" 
    matrix = (readMatrix(filNam)) 
    print(eachNumPresent(matrix)) 
    print(rowSum(matrix)) 

def readMatrix(filNam): 
    matrixFile = open(filNam, "r") 
    line = matrixFile.readline() 
    for line in matrixFile: 
     line = line.split() 
    return line 
    matrixFile.close() 

def eachNumPresent(matrix): 
    if len(matrix) % 2 == 0: 
     return True 
    else: 
     print("Not enough numbers") 

def rowSum(matrix, rowNum): 
    for line in matrix: 
     return(sum(int(line))) 

main() 
+0

有人(看起來他是同學)幾個小時前問同樣的問題,試圖檢查這個線程:: http://stackoverflow.com/questions/26457089/magic-square-algorithm – user3378649 2014-10-20 03:02:52

+0

是否rowNum指的是矩陣中的行數? – Totem 2014-10-20 03:19:03

+0

他寫了這個rowSum(矩陣,rowNum)\t:返回矩陣的指定行的總和 – 2014-10-20 03:25:48

回答

1

這個怎麼樣,它假定,當你想在第一行,你輸入「0」,如果你想在第二行你會輸入'1'等等...很容易改變。

def main(): 
    fn = "matrix1.txt" 
    matrix = readMatrix(fn) 
    n = int(input("Enter row number: ")) 
    rowSum(matrix, n) 

def readMatrix(fn): 
    matrix = [] 
    with open(fn) as f: # a with block will auto close your file after the statements within it 
     for line in f: 
      line = line.strip() # strip off any trailing whitespace(including '\n') 
      matrix.append(line.split()) 
    return matrix 

def rowSum(matrix, rowNum): 
    result = sum(int(i) for i in matrix[rowNum]) 
    print("The sum of row {} = {}".format(rowNum, result)) 

main() 

輸出示例:

The sum of row 1 = 5 

編輯:

要計算列的總和:

def main(): 
    fn = "matrix1.txt" 
    matrix = readMatrix(fn) 
    n = int(input("Enter col number: ")) 
    colSum(matrix, n) 

def readMatrix(fn): 
    matrix = [] 
    with open(fn) as f: # a with block will auto close your file after the statements within it 
     for line in f: 
      line = line.strip() # strip off any trailing whitespace(including '\n') 
      matrix.append(line.split()) 
    return matrix 

def colSum(matrix, colNum): 
    result = sum(int(row[colNum]) for row in matrix) 
    print("The sum of col {} = {}".format(colNum, result)) 

main() 
+0

好的謝謝,似乎工作。要計算列的總和,我會做同樣的rowSum,而不是我在矩陣([rowNum])它將爲j矩陣([colNum])? – 2014-10-20 03:50:31

+0

我再次包含相同的代碼,但是這次它總結了選擇的列。 – Totem 2014-10-20 04:02:08

0

1.you可以學習大熊貓

2。她的代碼有錯誤e是我的代碼

def main(): 
    filNam = "matrix1.txt" 
    rowNum, matrix = (readMatrix(filNam)) 
    print(eachNumPresent(rowNum)) 
    rowSum(matrix) 

def readMatrix(filNam): 
    matrix_list = [] 
    total_num = 0 
    with open(filNam, 'r') as matrixFile: 
     for line in matrixFile.readlines(): 
      line = line.split() 
      line = [int(i) for i in line] 
      matrix_list.append(line) 
      total_num += len(line) 
    return total_num, matrix_list 

def eachNumPresent(num): 
    if num % 2 == 0: 
     return True 
    else: 
     print("Not enough numbers") 

def rowSum(matrix): 
    for row in matrix: 
     print sum(row) 

main() 

出來:

True 
5 
5 
+0

你會怎麼做列然後如果你做了這樣的行 – 2014-10-20 04:18:27

+0

你可以使用numpy或熊貓來計算列 – Dyue 2014-10-20 04:38:43

+0

這是班級,我們不能使用熊貓或numpy,因爲我們hasvent在類 – 2014-10-20 05:32:28

1

你不是遍歷正確順序,您用來代替「readlines方法」「的ReadLine」,其中只讀的線路之一矩陣,而不是完整的文件。你想要做的是讀取所有行,並將這些行轉換爲列表,所以你可以使用sum()。請注意,拆分之後,您需要確保將結果字符串轉換爲int。通過這種方式,您可以將矩陣形成列表列表(格式[[1,2],[3,4]]),然後您可以將行號(從零開始,但可以調整)傳遞給rowSum方法(這就是爲什麼你的老師給你這種格式的原因)

看到更正後的例子中的差異(例如我在不同的操作中給出了轉換的步驟,但你實際上可以重構該代碼來獲得它做更少的行):

def main(): 
    filNam = "matrix1.txt" 
    matrix = (readMatrix(filNam)) 
    print(eachNumPresent(matrix)) 
    print(rowSum(matrix, 0)) 

def readMatrix(filNam): 
    with open(filNam, 'r') as matrixFile: 
     matrix = [] 
     lines = matrixFile.readlines() 
     for line in lines: 
      items = line.split() 
      numbers = [int(item) for item in items] 
      print numbers 
      matrix.append(numbers) 
     return matrix 

def eachNumPresent(matrix): 
    if len(matrix) % 2 == 0: 
     return True 
    else: 
     print("Not enough numbers") 

def rowSum(matrix, rowNum): 
    for line in matrix: 
     return(sum(line)) 

main() 

如果您需要任何澄清只是讓我知道...希望它有幫助!

+0

談論他們我不認爲他想要輸入一行,因爲這是一個魔術方塊程序。我假設每行,列和兩個診斷列表的總和是否相同 – 2014-10-21 02:25:15

+0

在這種情況下,您可以修改上面的代碼以跟蹤列,因爲它們已經在列表中,並且可以通過它以任何方式進行迭代。但通過給出行號,它可以獲得一個特定的功能,它可以實際移植到列等等,並使用這些方法作爲對所有總和進行全面檢查的基礎,具有模塊化和易於更改行爲的優點在需要時(或分析它)。從那裏你可以製作colSum(matrix,rowNum),你甚至可以讓它們檢查它們各自對角線的總和。或者與他一起澄清爲什麼不一步完成。 – jcabrera 2014-10-21 03:57:03