Python練習題 028:求3*3矩陣對角線數字之和


【Python練習題 028】 求一個3*3矩陣對角線元素之和

-----------------------------------------------------

這題解倒是解出來了,但總覺得代碼太啰嗦。矩陣這東西,應該有個很現成的方法可以直接計算才對…… 啰嗦代碼如下:

str = input('請輸入9個數字,用空格隔開,以形成3*3矩陣:')
n = [int(i) for i in str.split(' ')]  #獲取9個數字
mx = []  #存儲矩陣
for i in range(3):
    mt = []  #收集矩陣中每行的數字列表
    for j in range(3):
            mt.append(n[i*3 + j])
    mx.append(mt)  #每行數字存儲進mx列表
    print(mt)
sum1 = 0
sum2 = 0
for i in range(3):
    sum1 += mx[i][i]
    sum2 += mx[2-i][i]
print('\方向對角線3元素之和為:%s' % sum1)
print('/方向對角線3元素之和為:%s' % sum2)

輸出結果如下:

請輸入9個數字,用空格隔開,以形成3*3矩陣:7 9 6 5 4 8 6 7 3
[7, 9, 6]
[5, 4, 8]
[6, 7, 3]
\方向對角線3元素之和為:14
/方向對角線3元素之和為:16

只要將代碼稍微改一下,就可以接受任意 n*n 矩陣的計算了,而且數字數目輸入有誤時,也可以提示重新輸入。改后代碼如下:

import math

err = True
while err:
    str = input('請輸入n**2個數字,用空格隔開,以形成n*n的矩陣:')
    n = [int(i) for i in str.split(' ')]  #獲取9個數字
    t = math.floor(math.sqrt(len(n)))
    if t == math.sqrt(len(n)) and t != 1:
        err = False
    else:
        print('您輸入的數字個數有誤,請重試。')
mx = []  #存儲矩陣
for i in range(t):
    mt = []  #收集矩陣中每行的數字列表
    for j in range(t):
            mt.append(n[i*t + j])
    mx.append(mt)  #每行數字存儲進mx列表
    print(mt)
sum1 = 0
sum2 = 0
for i in range(t):
    sum1 += mx[i][i]
    sum2 += mx[t-1-i][i]
print('\方向對角線元素之和為:%s' % sum1)
print('/方向對角線元素之和為:%s' % sum2)

輸出結果如下:

請輸入n**2個數字,用空格隔開,以形成n*n的矩陣:8 7 5 4 3 5 6 7 4 5 3 4 2 9 8 7 5 8 9 6 5 2 3 2 6
[8, 7, 5, 4, 3]
[5, 6, 7, 4, 5]
[3, 4, 2, 9, 8]
[7, 5, 8, 9, 6]
[5, 2, 3, 2, 6]
\方向對角線元素之和為:31
/方向對角線元素之和為:19

雖然湊合能用,但我仍然堅信,Python肯定已經准備好了什么函數或方法,可以輕松計算矩陣。容我有空好好搜索一番,再來更新。

 

++++++++++++++++++++++++++++++++++++++

題目出處:編程語言入門經典100例【Python版】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM