大爽Python入门练习题 3-2 生成回形矩阵

大爽Python入门练习题总目录

第三章 中期练习题 困难 第2题

题目

简介

实现一个函数generate_matrix(m, n)
接受两个正整数mn作为参数

返回一个mn列的特殊矩阵(二维列表)。
该矩阵最外面一圈值都为0,
里面一圈为1,
再往里一圈都为2,
依次类推

详细说明

题意中,34列的特殊矩阵(二维列表)如下

matrix = [
    [0, 0, 0, 0, 0, 0],
    [0, 1, 1, 1, 1, 0],
    [0, 1, 2, 2, 1, 0],
    [0, 1, 1, 1, 1, 0],
    [0, 0, 0, 0, 0, 0]
]

示例

示例一

matrix = generate_matrix(5, 6)
for row in matrix:
    print(row)

输出为

[0, 0, 0, 0, 0, 0]
[0, 1, 1, 1, 1, 0]
[0, 1, 2, 2, 1, 0]
[0, 1, 1, 1, 1, 0]
[0, 0, 0, 0, 0, 0]

示例一

matrix = generate_matrix(7, 10)
for row in matrix:
    print(row)

输出为

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 1, 1, 1, 1, 1, 1, 1, 0]
[0, 1, 2, 2, 2, 2, 2, 2, 1, 0]
[0, 1, 2, 3, 3, 3, 3, 2, 1, 0]
[0, 1, 2, 2, 2, 2, 2, 2, 1, 0]
[0, 1, 1, 1, 1, 1, 1, 1, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

分割线

本小段没有实际意义,
仅用于分隔题目和答案。
防止学生无意中直接看到答案,
影响思路。



















答案

思路来自直播彈幕:栢栢酱 說: aij=min(i,m-i,j,n-j)
感谢栢栢酱的思路:格子的值为到四个边界的最短距离
比我原本的思路好。我本来想的使用循环一层一层做,其实比较麻烦。

def get_min(*args):
    # 其实也可以直接使用python内置函数`min`
    # 我这里相当手动实现了一遍
    min_v = args[0]
    for v in args:
        if v < min_v:
            min_v = v

    return min_v

def generate_matrix(m, n):
    matrix = [
        [get_min(ri, ci, n-ci-1, m-ri-1) for ci in range(n)]
        for ri in range(m)
    ]

    return matrix
posted @ 2021-12-14 22:21  大爽歌python编程辅导  阅读(96)  评论(0编辑  收藏  举报