蜗牛/螺旋矩阵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.]]