要求:逆时针转圈圈打印矩阵,如下
01 16 15 14 13
02 17 24 23 12
03 18 25 22 11
04 19 20 21 10
05 06 07 08 09
假设是5*5的列表
LENTH = 5
WIDTH = 5
# 先初始化全是0的矩阵
spin = [[0] * LENTH for i in range(WIDTH)]
x = 0
y = 0
count = 1
# 方向 0 向下 1 右 2 上 3 左
direction = 0
while x < LENTH and y < WIDTH:
spin[x][y] = count
# 如果是最大数,则退出循环
if spin[x][y] == LENTH * WIDTH:
break
count += 1
if direction == 0:
if x == LENTH - 1 or spin[x + 1][y] != 0:
direction += 1
y += 1
continue
else:
x += 1
elif direction == 1:
if y == WIDTH - 1 or spin[x][y + 1] != 0:
direction += 1
x -= 1
continue
else:
y += 1
elif direction == 2:
if x == 0 or spin[x - 1][y] != 0:
direction += 1
y -= 1
continue
else:
x -= 1
elif direction == 3:
if spin[x][y - 1] != 0:
direction = 0
x += 1
continue
else:
y -= 1
for i in spin:
for j in i:
print('%02d' % j, ' ' * 2, end='')
print('')
简单思路:主要是灵活改变二维列表下标的值。分四个方向,
下:x+1,y不变
右:x不变,y+1
上:x-1,y不变
左:x不变,y-1
当到达边界或者同方向下一个位置的值不为0时改变方向