本文讲述了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
运行结果如下图所示:
更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。
想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!