Helsinki python programming part5.4 的最后一题。
Layers: 3
CCCCC CBBBC CBABC CBBBC CCCCC
Layers: 4
DDDDDDD DCCCCCD DCBBBCD DCBABCD DCBBBCD DCCCCCD DDDDDDD
解题思路是从外到内一圈圈的赋值,等二维数组形成的时候再用两个for循环把数字转换为字母。字母a的大写ASCII是65,所以在26个数字的基础上都加上64,就可以转为大写了。
# Write your solution here
layer = int(input("Layer: "))
sum_column = layer*2 -1
sum_row = layer*2-1
arr = [[0 for col in range(sum_column)]for row in range(sum_row)] # 初始化数组
ini = 0
while layer >= 1:
r = 0
c = 0
# ---------------------完成初始化-----------------------
for r in range(ini,sum_row-ini):
if r == ini or r == sum_row-ini-1:
for c in range(ini,sum_column-ini):
arr[r][c] = layer
c+=1
else:
r+=1
# ---------------完成第一行和最后一行的归数-----------------
for c in range(ini,sum_column-ini):
if c == ini or c == sum_row-ini-1:
for r in range(ini,sum_row-ini):
arr[r][c] = layer
else:
c+=1
# ---------------完成第一列和最后一列的归数-----------------
# 完成以上的循环以后,layer的层数需要少一层
layer-=1
ini +=1
# 转换layer数字代表的字母,加上96,再进行ASCII的转换。chr()
c = 0
r = 0
l = len(arr)
for r in range(l):
for c in range(l):
arr[r][c] = chr(arr[r][c]+64)
print(arr[r][c],end="")
print()


