pyhton 数字矩阵螺旋代码

python 数字螺旋

需求,随便写一个数字,比如数字7,使用python 打印出一个 7*7 的数字螺旋
如下:

      01 24 23 22 21 20 19
      02 25 40 39 38 37 18
      03 26 41 48 47 36 17
      04 27 42 49 46 35 16
      05 28 43 44 45 34 15
      06 29 30 31 32 33 14
      07 08 09 10 11 12 13

思路:
首先,我们先找一个规律出来,显而易见,我们可以将每个数字的位置用坐标 x,y 来定义。那么这样每个数字都会有一个相应的位置了。
假设 数字1 的坐标,是 0,0 那么数字2的坐标就是 1,0 以此类推 这些数字的坐标就变成了
01 ==> 0 0
02 ==> 1 0
03 ==> 2 0
04 ==> 3 0
05 ==> 4 0
06 ==> 5 0
07 ==> 6 0
08 ==> 6 1
09 ==> 6 2
10 ==> 6 3
11 ==> 6 4
12 ==> 6 5
13 ==> 6 6
14 ==> 5 6
15 ==> 4 6
16 ==> 3 6
17 ==> 2 6
18 ==> 1 6
19 ==> 0 6
20 ==> 0 5
21 ==> 0 4
22 ==> 0 3
23 ==> 0 2
24 ==> 0 1
25 ==> 1 1
26 ==> 2 1
27 ==> 3 1
28 ==> 4 1
29 ==> 5 1
30 ==> 5 2
31 ==> 5 3
32 ==> 5 4
33 ==> 5 5
34 ==> 4 5
35 ==> 3 5
36 ==> 2 5
37 ==> 1 5
38 ==> 1 4
39 ==> 1 3
40 ==> 1 2
41 ==> 2 2
42 ==> 3 2
43 ==> 4 2
44 ==> 4 3
45 ==> 4 4
46 ==> 3 4
47 ==> 2 4
48 ==> 2 3
49 ==> 3 3

好了,规律显而易见,数字上下左右的偏移量为 down(1,0),right(0,1), up(-1,0) left(0,-1)
我们现在来从头看起, 数字1 坐标为 0,0 数字 2为1,0 那么,我们就先将偏移量设置为 1,0 当坐标到达的6,0的时候,偏移量变成了 1,0
当坐标到达6,6的时候 偏移量变成了 -1,0 所以,我们可以设定
偏移量 x=1 y=0
down
x坐标 = x坐标 +偏移量 x
y坐标 = y坐标 +偏移量 y
right
x坐标 = x坐标 +偏移量 y
y坐标 = y坐标 +偏移量 x
up
x坐标 = x坐标 -偏移量 x
y坐标 = y坐标 +偏移量 y
left
x坐标 = x坐标 +偏移量 x
y坐标 = y坐标 -偏移量 x

呃。我表达的不是很清楚,大体上希望你们能看懂,
下面是代码:

def numtest(size):
    #定义矩阵数字的总数
    total = size**2
    #定义起始位置坐标
    x,y = 0,0
    #定义偏移量
    postion_x ,postion_y=  1 , 0
    #定义一个空的列表,这个列表有两个下标,代表xy轴坐标点数字,因为还没有插入数字,所以先用none来定义
    all = [[None ]*size for z in range(size)]
    ##循环数字所有
    for  num in range(1,total+1):
        #定义数字所在坐标点
        all[x][y] = num
        #定义下一个数字所在的坐标点
        next_x ,next_y = x +postion_x  ,y + postion_y

        if size > next_x >= 0 and 0 <= next_y < size and all[next_x][next_y] == None: #这个判断,来确定什么时候进行上下左右的偏移。
            x , y = next_x , next_y
        else:
            postion_x , postion_y = -postion_y , postion_x
            x , y = x + postion_x , y + postion_y


    #打印
    for a in range(size):
        for b in range(size):
            print "%02d"  %all[a][b],
        print



numtest(10)

结果,我们打印了一个 10*10 的数字螺旋出来

"D:\Program Files\python27\python.exe" E:/script/python/flask/testsss.py
01 36 35 34 33 32 31 30 29 28
02 37 64 63 62 61 60 59 58 27
03 38 65 84 83 82 81 80 57 26
04 39 66 85 96 95 94 79 56 25
05 40 67 86 97 100 93 78 55 24
06 41 68 87 98 99 92 77 54 23
07 42 69 88 89 90 91 76 53 22
08 43 70 71 72 73 74 75 52 21
09 44 45 46 47 48 49 50 51 20
10 11 12 13 14 15 16 17 18 19

Process finished with exit code 0

未经允许不得转载:99ya » pyhton 数字矩阵螺旋代码

抢沙发