如何在python中打印具有特定模式的矩阵

问题描述

我们如何使用 Python 创建一个模式,它会创建一个方阵,它将把对角线元素的值等于 0,改变对角线元素 29 以上元素的值,并将对角线元素的值更改为 5。

>

例如:


Input: 4

Output:

0999
5099
5509
5550

请帮忙。谢谢

解决方法

如果你只是打印,你可以尝试以下

for i in range(n):
    for j in range(n):
        # diagonal case
        if i == j:
            print(0,end='')
        # upper diagonal case
        elif i < j:
            print(9,end='')
        # lower diagonal case
        else:
            print(5,end='')
    print('')
,

尝试使用 numpy 库。

import numpy as np

np.identity(4) # This will print out 1 on the diagnoals and 0 on the rest.

之后只需使用循环将所有 1(诊断)更改为 0 然后用if语句和循环判断一个数是否在0以上

或者,如果您只想使用带有预定义列表的矩阵,那么只需使用 np.array(list)

,

您需要检查对角线(row_index == column_index)、上三角矩阵(column_index > row_index)和下三角矩阵(row_index > column_index)的条件,然后相应地添加值

def func(n):
    l = []
    for i in range(n):
        tmp = []
        for j in range(n):
            if j==i:
                tmp.append(0)
            elif j>i:
                tmp.append(9)
            elif j<n:
                tmp.append(5)
        l.append(tmp)
    return l
,

要搜索的关键词是“上三角”和“下三角”。完成后,我们可以像这样组合所需的输出:

import numpy as np

shape = (4,4)
np.tril(np.full(shape,5),-1) + np.triu(np.full(shape,9),1)

这是如何工作的:

  • np.full(shape,fill_value) 构造给定形状的数组,填充给定数字。
  • np.tril(m,k) 返回矩阵 m 的下三角,从第 k 对角线开始(其余部分为零)。
  • 类似地,np.triu(m,k) 返回矩阵 m 的上三角形,从第 k 条对角线开始(其余部分为零)。
,

我认为这应该可以解决问题

def pattern(size):
    for i in range(size):
        print('5'*i + '0' + '9'*(size-i-1))
        
pattern(4)