求一个3*3矩阵对角线元素之和python_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肯定已经准备好了什么函数或方法,可以轻松计算矩阵。容我有空好好搜索一番,再来更新。

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

标签:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值