python杨辉三角

325 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

在杨辉三角形中,有一个很大的规律:
就是每一行的第一个和最后一个都是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)  # 打印行

图片.png