本文已参与「新人创作礼」活动,一起开启掘金创作之路。
在杨辉三角形中,有一个很大的规律:
就是每一行的第一个和最后一个都是1,那中间的数据是怎么生成的呢?
中间的数据其实就是一个公式:(假设n表示行,m表示列)
ist1[n][m] = list1[n-1][m-1] + list1[n-1][m]
-
杨辉三角会用到yield generator(生成器)和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。 这里的杨辉三角代码其实就是一个生成器,而yield的作用就是惰性生成一行杨辉三角并且输出,对于生成器需要调用next()时,才会继续执行语句。但是实际操作过程中,我们通常用for循环来代替next(),让生成器不断生成下一行。
-
杨辉三角居中显示 先把数据类型转化为字符串类型,然后利用 ''.join() 来让一个列表的字符串连接在一起中间空格
下接下来代码实现
def triangle(): # 杨辉三角的计算
N = [1]
while True:
yield N # generator特点在于:在执行过程中,遇到yield就中断,并且返回值,下次又继续执行
N.append(0) # 每次都要在最后一位加个0,用于后续的叠加
N = [N[i] + N[i - 1] for i in range(len(N))]
def print_triangle(x): # 杨辉三角的居中对齐和输出
a = 0
for t in triangle(): # 这里可以每次调用一个N(得力于Yield函数)
new_list = []
for i in range(len(t)):
new_list.append(str(t[i])) # 将数字列表转化为字符串列表
string = ' '.join(new_list) # 字符串相连接中间一个空格
width = x * 10 # 设置字符宽度
print(string.center(width)) # 居中对齐并输出
a += 1
if a == x: # 判断输入几行
break
line_number = int(input("请输入打印几行: "))
print_triangle(line_number) # 打印行