page contents

python基础编程100例:第16期—杨辉三角

本文讲述了python基础编程100例:第16期—杨辉三角!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2022-03-XAYcOX0C622bfae3b6faf.png

本文讲述了python基础编程100例:第16期—杨辉三角!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

第16期—杨辉三角

1 问题描述

杨辉三角是中国数学史上的一个伟大成就,最早由中国南宋末年的数学家、教育家杨辉在其著作《详解九章算术》中提出的。在大约500年后的欧洲,法国数学家帕斯卡也发现了这一结论,因此杨辉三角又称为帕斯卡三角。​

杨辉三角是一个无限堆成的数字金字塔,它的两条斜边都是由数字1组成的,而其余的数则是等于它肩上的两个数之和。

        1

       1 1

      1 2 1

     1 3 3 1

    1 4 6 4 1

   1 5 10 10 5 1

  1 6 15 20 15 6 1

 1 7 21 35 35 21 7 1

1 8 28 56 70 56 28 8 1


杨辉三角的性质:

每行首尾的数字都是1

每行中间的各数都是它肩上两个数的和

第n行的数字有n项

第n行的项数总比n-1行多1个

请用户输入一个非负整数n, 用Python输出杨辉三角前 n 行~

2 解题思路

用input函数使用户输入行数

创建两个列表,一个用于输出最后的结果,另一个输出每一行的数字,并将其添加到第一个列表中

根据杨辉三角形的特点输出结果:每行首尾的数字都是1;每行中间的各数都是它肩上两个数的和

3 解题方法

n = int(input("输入需要打印的杨辉三角行数 :"))

assert n > 0, "请输入正整数!"


list1 = []

for i in range(n):

    list2 = []

    if i == 0:

        list2 = [1]

    elif i == 1:

        list2 = [1, 1]

    else:

        for j in range(i + 1):

            if j == 0 or j == i:

                list2.append(1)

            else:

                list2.append(list1[i - 1][j - 1] + list1[i - 1][j])

    list1.append(list2)


space = len(list1[-1])

for i in list1:

    print(' ' * (space * 4 // 2), end='')

    for j in i:

        print(f"{j:<4}", end='')

    print()

    space -= 1

第1行: 用input函数获取用户输入的行数,int函数将其转化为整型,并赋值给变量 n

第2行: 用assert断言函数限定变量 n 大于0,若大于0,执行后面的代码,否则报错“AssertionError: 请输入正整数!”

第4行: 创建一个空列表list1,用于完成整个序列的循环,输出杨辉三角

第5行: 用for循环控制输出的行数

第6行: 创建另一个空列表list2,用于存储每一行的数值

第7-8行: 第一次循环i == 0,输出杨辉三角第一行

第9-10行: 第二次循环i == 1,输出杨辉三角第二行

第11-12行: 接着输出杨辉三角的其他行,变量 j 表示一行中的每一个元素,用for循环遍历每一行中的每一个元素

第13-14行: 每行首尾的数字都是1,输出每行首尾的数字 1,添加到列表list2

第15-16行: 每行中间的各数都是它肩上两个数的和,通过对双重列表的索引,获取中间这个数肩上的两个数,求和后将其添加到列表list2

以杨辉三角第3行为例

第3次循环时,i == 2, list1 = [[1], [1, 1]]

求第3行中间的数 2 时, j 进行到第二次循环,j == 1

2 等于第2行两个数值的和,即 list1中位置1的列表元素和,通过列表的索引,这两个元素分别是(list1[i - 1][j - 1] 和 list1[i - 1][j]

第17行: 将列表list2添加到列表list1

第19行: 为使杨辉三角每一行的数值能居中排列,设置每一行第一个数值前的空格数,用len函数获取list1最后一行的长度

第20行: 由于list1是二维列表,用for循环遍历list1,循环变量 i 为一维列表,即杨辉三角每一行的数值列表

第21行: 每个数值之间间隔4个空格,每一行第一个元素前的空格数为space * 4 // 2, 用end将结果输出到同一行

第22行: 在第19行for循环的基础上,嵌套一个for循环,获取杨辉三角每一行中的每一个元素

第23行: 每个数值之间间隔4个空格,用end将结果输出到同一行

第24行: 一行输出后,用print()换行输出下一行

第25行: 由于第n行的数值比n-1行多1个,所以在一次循环后,space在原有基础上减 1

运行结果如下图所示:

attachments-2022-03-3sLA6J9Z622bfa9eb68aa.png

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-37lorKCU6291963694b51.jpeg

  • 发表于 2022-03-12 09:44
  • 阅读 ( 956 )
  • 分类:Python开发

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章