问题描述
我们如何使用 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)