杨辉三角形,也称帕斯卡三角,其定义为:顶端是 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行中最大数的位数做为数字输时占位宽度)。
一个正整数,如:12
输入 | 输出 | |
示例 1 | 8 |
解题代码:
# 输出杨辉三角 import math num=eval(input()) #输入想要计算的杨辉三角形的阶数 n=len(str(int(math.factorial(num)/(math.factorial(int(num/2))*math.factorial(num-int(num/2)))))) #判断最大的数字位数 ls=[] def yhlist(m): #计算每行的数字 global ls if m==1: ls.append(1) return ls else: ls.insert(0,0) ls.append(0) for i in range(m): ls[i]=(ls[i]+ls[i+1]) #肩上两个数字和 return ls for i in range(1,num+1): lt=yhlist(i).copy() #创建新列表,防止旧值被改变 s=0 print(" "*(n*(num+1-i)),end="") #控制输出格式 for j in range(i): s=s+lt[j] print("{:{}}".format(lt[j],n),end=(" "*n)) #最大位数作为间隔与数字输出长度 print(" "*(n*(num+1-i)),end="") print()