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

问题描述:

首先我想感谢您的帮助。我试图做一个蜗牛/螺旋矩阵在Python 3.6这样蜗牛/螺旋矩阵PYTHON程序不执行

[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) 

但是当我运行该程序仍然加载很长一段时间,从来没有做过什么,它没有显示我的错误,但它什么都不做。

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

再次感谢你

你几乎在那里。当您的计数器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.]]