杨辉三角
描述
杨辉三角形,也称帕斯卡三角,其定义为:顶端是 1,视为(row0).第1行(row1)(1&1)两个1,这两个1是由他们上头左右两数之和 (不在三角形内的数视为0).依此类推产生第2行(row2):0+1=1;1+1=2;1+0=1.第3行(row3):0+1=1;1+2=3; 2+1=3;1+0=1. 循此法可以产生以下诸行,如下图所示。
定义一个函数 ,传入正整数参数 M,输出 M 行的杨辉三角(为使格式美观,采用M行中最大数的位数做为数字输时占位宽度)。
说明:以输出M行中最大数的位数做为数字输时占位宽度,表示以要输出阶数的杨辉三角的最后一行数据占位总宽度与数据间总空格占位为准输出杨辉三角。
比如:输出3阶的杨辉三角,最后一行占位总宽度是7,其余各行也要占位宽度是7。这里“*”表示占位,题目输出时不需要
输入格式
一个正整数n(0<n<=20),如:12
输出格式
(注意数字导中输出,数字两边输出等量空格)
示例 1
8
参考代码
这道题不看代码很难想出来……
#以二维列表求解杨辉三角 以M行中最大数的位数做为数字输时占位宽度,对杨辉三角居中显示
def YangHui(num):
'''生成杨辉三角'''
t=[[1]]
for n in range(2,num+1):
t.append([1]*n)
for m in range(1,n-1):
t[n-1][m]=t[n-2][m-1]+t[n-2][m]
return t
def printtriangle(t,width):
'''居中输出杨辉三角'''
l=" "*width #数据间隔
c=len(t[-1])*width + width*(len(t[-1])+1) #最后一行数据占位总宽度+数据间总空格占位
for i in t:
ls=[]
for j in i:
ls.append("{0:^{1}}".format(str(j),width))
print("{0:^{1}}".format(l.join(ls),c))
num=eval(input())
t=YangHui(num)
width=len(str(max(t[-1]))) #获取第M行最大数据占位宽度
printtriangle(t,width)