蜗牛/螺旋矩阵PYTHON程序没有执行

时间:2017-09-23 08:53:38

标签: python matrix

首先,我要感谢你的帮助。我试图在python 3.6中像这样做一个蜗牛/螺旋矩阵

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

我已尝试使用此代码进行对方矩阵

    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-1,init,-1):
                c=c+1
                M[i,nlimit] = c

            for i in range(nlimit-1,init,-1):
                c=c+1
                M[init,i] = c

            for i in range(init,nlimit-1,1):
                c=c+1
                M[i,init] = c

           init = init + 1
           nlimit = nlimit - 1

    print(M)

但是当我运行该程序时,它仍然会加载很长时间并且从不做某些事情,它不会向我显示错误,但它什么都不做。

我不知道我的错误是什么,请帮助我。

再次感谢您

1 个答案:

答案 0 :(得分:0)

你快到了。当您的计数器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)

输出:

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

作为奖励,您不需要为奇数更改太多。对于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.]]