• 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版】

  • 相关阅读:
    从面向对象到SOA
    我对国内软件开发类书籍出版与写作的体会与努力
    MSDN for 2010的那些麻烦事
    金旭亮新作《.NET 4.0面向对象编程漫谈》之序“穿越梦想、起锚远航”
    Silverlight应用程序的本地通讯
    C#中Dictionary的用法
    泛型
    动态规划算法
    C# Timer
    面向对象程序设计寒假作业1
  • 原文地址:https://www.cnblogs.com/iderek/p/5978918.html
Copyright © 2020-2023  润新知