核心思路:
1.将所有数以字符串保存在列表
2.将各个数拆成单个字符
3.一行一行填充(其中尾行单独填充)
4.列表再转化为字符串,统一输出格式
详细思路在代码注释:
#等腰三角形
n = int(input())
#n = 10
#end为观察得知,n与三角形个数的关系
end = (n-2)*2+n*2
#保存需要的字符,将每个数字当成字符串判断
m = []
#将每个数字加入列表,如['9','10','11']
for i in range(1,end):
m.append(str(i))
#判断是否大于等于所需要的个数,
if len(''.join(m)) >= end:
break
#将每个数字拆分,如['9','10','11']拆成['9','1','0','1','1']
m = list(''.join(m))[:end]
#print(m)
#观察得知,其'.'与行数的关系,即有n行,每行有n+i个值(包括数字,先默认为'.')
ans = []
for i in range(n):
ans.append(list('.'*(n+i)))
#print(ans[0])
#开始同时填充等腰的两条边
#主要观察
k = 0
for i in range(len(ans)):
#第一行规律与其它行不同,只用填充一个值
if i == 0:
#观察发现填充的位置,如n=10,ans[0][9] = m[0],符合
ans[i][n-1-i] = m[k]
else:
#其它行数,可以同时由两边往中间填,其观察得到规律如下
ans[i][n-1-i] = m[k]
ans[i][n-1+i] = m[len(m)-k]
k += 1
#print(ans)
#最后填充底边
for i in range(1,2*n-1):
ans[-1][i] = m[k]
k += 1
#整理格式,将列表变为字符串,输出
for x in ans:
print(''.join(map(str,x)))