前言:我在学习Python的时候,正好学到列表推导式,于是这里尝试运用列表推导式来写一个杨辉三角。如果能点出其中不足或提出优化建议,感激不尽。
杨辉三角:杨辉三角左右两侧的数字都是1,而里面的数字等于它肩上的两数之和。
图源: 杨辉三角ppt_word文档在线阅读与下载_无忧文档
1.先建立一个值为1的三角形二维数组:
n = int(input("请输入一个整数n:"))
# 先建立一个直角三角形的二维数组
L = [[1 for x in range(n) if x <= y] for y in range(n)]
print(L)
运行结果:
因为这样横排看着较抽象,我们可以换一个方式输出:
for x in range(n):
print(L[x])
这样就可以变成直角三角形:
2.接下来让左右两侧的数字都是1,而里面的数字等于它肩上的两数之和。
因为是二维数组,所以用for循环嵌套。
因为里面的数字等于它肩上的两数之和,所以 L[x][y] = L[x - 1][y - 1] + L[x - 1][y]。
因为L下标不可小于零,所以x - 1 >= 0 and y - 1 >= 0。
因为取的是下三角所以x>y。
完整代码如下:
n = int(input("请输入一个整数n:"))
# 先建立一个直角三角形的二维数组
L = [[1 for x in range(n) if x <= y] for y in range(n)]
# 再转为杨辉三角
for x in range(n):
for y in range(n):
if x - 1 >= 0 and y - 1 >= 0 and x > y:
L[x][y] = L[x - 1][y - 1] + L[x - 1][y]
for x in range(n):
print(L[x])