2017-09-23 33 views
1

首先我想感謝您的幫助。我試圖做一個蝸牛/螺旋矩陣在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) 

但是當我運行該程序仍然加載很長一段時間,從來沒有做過什麼,它沒有顯示我的錯誤,但它什麼都不做。

我不知道我的錯誤是什麼,請幫助我。

再次感謝你

回答

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.]]