蜗牛/螺旋矩阵PYTHON程序不能执行

2024-06-01 01:00:32 发布

您现在位置:Python中文网/ 问答频道 /正文

首先我要感谢你的帮助。我尝试在python3.6中做一个蜗牛/螺旋矩阵,就像这样

    [10 9  8  7]
    [11 16 15 6]
    [12 13 14 5]
    [1  2  3  4]

我试过用这个代码来计算对方阵

^{pr2}$

但当我运行这个程序时,它会在很长一段时间内保持加载状态,从不执行任何操作,它不会向我显示错误,但它什么也不会做。在

我不知道我的错在哪里,请帮帮我。在

再次感谢你


Tags: 代码程序状态错误矩阵螺旋方阵蜗牛
1条回答
网友
1楼 · 发布于 2024-06-01 01:00:32

你就快到了。当计数器c等于n*n时,就会进入一个无限循环。for循环中的所有范围都将变为空,c = c + 1将不再执行。在

您需要将检查改为c < (n*n)和范围:

import numpy as np
n = 4
M = np.zeros([n, n])
init = 0
nlimit = n - 1
c = 0
if (n % 2 == 0):
    while (c < (n*n)):
        for i in range(init, nlimit, 1):
            c = c + 1
            M[nlimit, i] = c
        for i in range(nlimit, init, -1):
            c = c + 1
            M[i, nlimit] = c
        for i in range(nlimit, init, -1):
            c = c + 1
            M[init, i] = c
        for i in range(init, nlimit, 1):
            c = c + 1
            M[i, init] = c
        init = init + 1
        nlimit = nlimit - 1

print(M)

It输出:

^{pr2}$

作为奖励,你不需要为奇数改变太多。对于n=5,它输出:

[[ 13.  12.  11.  10.   9.]
 [ 14.  23.  22.  21.   8.]
 [ 15.  24.   0.  20.   7.]
 [ 16.  17.  18.  19.   6.]
 [  1.   2.   3.   4.   5.]]

您只需更改while c并在中间添加最后一个数字:

import numpy as np
n = 5
M = np.zeros([n, n])
init = 0
nlimit = n - 1
c = 0
while c < (n * n) - 1:
    for i in range(init, nlimit, 1):
        c = c + 1
        M[nlimit, i] = c
    for i in range(nlimit, init, -1):
        c = c + 1
        M[i, nlimit] = c
    for i in range(nlimit, init, -1):
        c = c + 1
        M[init, i] = c
    for i in range(init, nlimit, 1):
        c = c + 1
        M[i, init] = c
    init = init + 1
    nlimit = nlimit - 1

M[(n - 1) // 2, (n - 1) // 2] = n * n

print(M)

它现在输出:

[[ 13.  12.  11.  10.   9.]
 [ 14.  23.  22.  21.   8.]
 [ 15.  24.  25.  20.   7.]
 [ 16.  17.  18.  19.   6.]
 [  1.   2.   3.   4.   5.]]

相关问题 更多 >