-
问题描述
上一次我们已经通过python实现了输出回形数组,即从外到内每圈分别输出数字1,2,3,4,5,6,7,8,9。链接如下:PYTHON输出回型数组,今天将尝试将此阵列旋转45°,使其变成菱形(如下图) -
问题分析
实现这个问题可以将菱形拆分来看,上半部分的奇数行都可以写成“a b c d e d c b a"型,如第7行”1 2 3 4 3 2 1“;偶数行可以写成”a b c d d c b a“的形式,如第八行”1 2 3 4 4 3 2 1“。而下半部分则是上半部分关于中心行的对称分布。 -
过程分解
前两个for循环分别完成每一行的前一半和后一半,第三、第四个for循环将前两个组件组合起来作为奇数行和偶数行的子组件。后面两个for循环则是将组件组合到一起的过程。 -
代码实现
alist=["1 "]
blist=["1 1 "]
numlist1=["1 "]
numlist2=["1 "]
for i in range(1,9):
numlist1.append(str(numlist1[i-1])+str(i+1)+" ")
for i in range(1,9):
numlist2.append(str(i+1)+ " " +str(numlist2[i-1]) )
for i in range(2,10):
alist.append(str(numlist1[i-2])+str(i)+" "+str(numlist2[i-2]))
for i in range(2,9):
blist.append(str(numlist1[i-1])+str(numlist2[i-1]))
d=32
for i in range(0,9):
if i!=8:
print(d*" "+alist[i])
d=d-2
print(d*" "+blist[i])
d=d-2
else:
print(alist[i])
d=2
for i in range(8,-1,-1):
if i!=8:
print(d*" "+blist[i])
d=d+2
print(d*" "+alist[i])
d=d+2
- 结果展示