python如何实现九宫算术

Python初学,该怎样实现在IDLE环境下编写出九宫算数呢,百思不得其解。

不用numpy的话,如下:

n = int(input("请输入宫格数:"))
a = [[0 for _ in range(n)] for _ in range(n)]
if n%2==0:
    print("unknown")
else:
    num=1
    i=0
    j=n//2
    a[i][j]=num       
    while(num<n*n):
        num=num+1
        if i-1<0 and j+1>=n:
            a[i+1][j]=num
            i=i+1
        elif i-1<0:
            for k in range(n-1,0,-1):
                if a[k][j+1]==0:
                    a[k][j+1]=num
                    i=k
                    j=j+1
                    break
        elif j+1>=n:
            for k in range(n):
                if a[i-1][k]==0:
                    a[i-1][k]=num
                    i=i-1
                    j=k
                    break
        else:
            if a[i-1][j+1]!=0:
                a[i+1][j]=num
                i=i+1
            else:
                a[i-1][j+1]=num
                i=i-1
                j=j+1

for i in a: print(i)
 

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


import numpy as np
n=int(input("输入是几宫格"))
a=np.zeros((n,n))
if n%2==0:
    print("unknown")
else:
    num=1
    i=0
    j=n//2
    a[i][j]=num       
    while(num<n*n):
        num=num+1
        if i-1<0 and j+1>=n:
            a[i+1][j]=num
            i=i+1
        elif i-1<0:
            for k in range(n-1,0,-1):
                if a[k][j+1]==0:
                    a[k][j+1]=num
                    i=k
                    j=j+1
                    break
        elif j+1>=n:
            for k in range(n):
                if a[i-1][k]==0:
                    a[i-1][k]=num
                    i=i-1
                    j=k
                    break
        else:
            if a[i-1][j+1]!=0:
                a[i+1][j]=num
                i=i+1
            else:
                a[i-1][j+1]=num
                i=i-1
                j=j+1
print(a)