【李刚-21天通关Python-14】之 实操:绕圈圈面试题
一、结果呈现
绕圈圈(4):
- 01 12 11 10
- 02 13 16 09
- 03 14 15 08
- 04 05 06 07
绕圈圈(5):
- 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
二、规则
- 位于①号转弯线的行索引与列索引总和为 n-1(n为给定整数值)
- 位于②号转弯线的行索引与列索引相等
- 位于③号转弯线的行索引等于列索引减一
三、程序设计
- 用二维列表来保存程序数据
- 用一个变量来控制方向
SIZE = 6
# 得到一个SIZE*SIZE的二位列表
array = [[0] * SIZE]
for i in range(SIZE - 1):
array += [[0] * SIZE]
# orient控制方向
# 0代表向下,1代表向右,2代表向左,3代表向上
orient = 0
# j控制行,k控制列
j, k = 0, 0
# 将1~SIZE*SIZE的数填入二维数组
for i in range(1, SIZE * SIZE + 1):
array[j][k] = i
# ①号转弯线
if j + k == SIZE - 1:
# 行大于列,下半部分,方向转为向右
if j > k:
orient = 1
# 列大于行,下半部分,方向转为向左
else:
orient = 2
# ②号转弯线,方向转为向上
elif j == k and j >= SIZE / 2:
orient = 3
# ③号转弯线,方向转为向下
elif j + 1 == k and k <= SIZE / 2:
orient = 0
# 根据方向,控制行与列
if orient == 0:
j += 1
elif orient == 1:
k += 1
elif orient == 2:
k -= 1
elif orient == 3:
j -= 1
# 打印二位列表
# array是一个二维列表,array的元素也是列表
for ele in array:
for e in ele:
# '%02d'中,0:多余的位置用0代替,2:数字站2位
print('%02d' % e, end=' ')
print('')
输出结果: