项目场景:
提示:这里简述项目相关背景:
python练习题
问题描述:
提示:这里描述项目中遇到的问题:
杨辉三角形,也称帕斯卡三角,其定义为:顶端是 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行中最大数的位数 做为数据输出时的占位宽度和 数据间的间隔)。
原因分析:
提示:这里填写问题的分析:
解决方案:
提示:这里填写该问题的具体解决方案:
源码
def yh(li):
list1 = []
list1.append(c)
s = len(li)
r = ""
for i in range(1, s):
r = eval(li[i - 1]) + eval(li[i])
rl = len(str(r))
g2 = []
for j in range(ysl - rl):
g2.append(" ")
ys = "".join(str(i) for i in g2) + str(r)
list1.append(ys)
list1.append(c)
# print(list1)
return list1
# 阶乘
def jc(n):
sum = 1
for i in range(1, n + 1):
sum *= i
return sum
n = int(input())
lis = [1]
b = (n - 1) // 2
max = jc(n - 1) / jc(b) / jc(n - 1 - b)
max = int(max)
ysl = len(str(max))
g1 = []
for j in range(ysl - 1):
g1.append(" ")
c = "".join(str(i) for i in g1) + "1"
g3 = []
for j in range(ysl):
g3.append(" ")
jg = "".join(str(i) for i in g3)
for i in range(n):
gs = []
for j in range(n - i):
gs.append(jg)
sc = "".join(str(i) for i in gs) + jg.join(str(i) for i in lis)
print(sc)
lis = yh(lis)