61 打印杨辉三角形
# 初始化杨辉三角形
# 创建一个10*10的二维列表,并将所有的元素初始化为0
triangle = []
for i in range(10):
triangle.append([])
for j in range(10):
triangle[i].append(0)
# 计算杨辉三角形
# 根据观察,我们知道杨辉三角形左右两边的元素均为1
for i in range(10):
triangle[i][0] = 1
triangle[i][i] = 1
# 第i行j列的值 = 第(i-1)行(j-1)列的值 + 第(i-1)行(j)列的值
for i in range(2, 10):
for j in range(1, i):
triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j]
# 输出直角杨辉三角
for i in range(10): #10行
for j in range(i + 1): #列
print(str(int(triangle[i][j])) + ' ', end='') #输出为字符串+空格
print()
n = 10 #定义输出的行数
# 输出正三角的杨辉三角
for i in range(n):
for j in range(n - i):
print(' ', end='')
for j in range(i + 1):
print(str(int(triangle[i][j])) + ' ', end='')
print()
# 输出杨辉三角形
for i in range(10):
# 因为是三角形,所以i越小,前边需要填充的TAB越多
for k in range((10 - i) // 2):
print('\t', end='')
for j in range(i + 1):
# 要形成“隔行错开”的效果,所以我们在偶数行加4个空格
if i % 2 == 1:
print(" ", end='')
# 为何要使用TAB而非空格,大家可以将下面的end='\t'改成对应的空格数即可知晓
print(triangle[i][j], end='\t')
print()
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 9 36 84 126 126 84 36 9 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 9 36 84 126 126 84 36 9 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 9 36 84 126 126 84 36 9 1
import numpy as np
'''
python输出杨辉三角形,直角三角形和正三角形
'''
n = int(input('输入杨辉三角的层数:'))
arr = np.ones(n * n).reshape(n, n) # 生成n行n列的数组,初始值为1
for i in range(2, n):
for j in range(1, i):
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j]
# 输出直角杨辉三角
for i in range(n):
for j in range(i + 1):
print(str(int(arr[i][j])) + ' ', end='')
print()
# 输出正三角的杨辉三角
for i in range(n):
for j in range(n - i):
print(' ', end='')
for j in range(i + 1):
print(str(int(arr[i][j])) + ' ', end='')
print()
输入杨辉三角的层数:10
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 9 36 84 126 126 84 36 9 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 9 36 84 126 126 84 36 9 1
#!/usr/bin/python
# -*- coding: UTF-8 -*-
if __name__ == '__main__':
a = []
for i in range(10):
a.append([])
for j in range(10):
a[i].append(0)
for i in range(10):
a[i][0] = 1
a[i][i] = 1
for i in range(2, 10):
for j in range(1, i):
a[i][j] = a[i - 1][j - 1] + a[i - 1][j]
from sys import stdout # 标准输出
for i in range(10):
for j in range(i + 1):
stdout.write(str(a[i][j])) #挨个输出矩阵
stdout.write(' ') # 输出的数字直接空一格
print()
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 9 36 84 126 126 84 36 9 1
矩阵的小练习
新建矩阵
方法一:
#创建一个n*n的矩阵
a = [] # 新建一个空矩阵
n = 3 # 矩阵的行数
for i in range(n): #循环从0到n,所以每行每列均为4个数字
a.append([]) #i循环n次代表矩阵每行
for j in range(n):
a[i].append(0) #j循环代表接着每行的第1个数字后面写n列
print(a)
方法二:
import numpy as np
n = 3
a = np.zeros(n * n).reshape(n, n) # 生成n行n列的数组,初始值为0
b = np.ones(n * n).reshape(n, n) # 生成n行n列的数组,初始值为1
print(a)
print("*"*20)
print(b)
[[0. 0. 0.]
[0. 0. 0.]
[0. 0. 0.]]
********************
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
# 输出直角杨辉三角
for i in range(10): #10行
for j in range(i + 1): #列
print(str(int(triangle[i][j])) + ' ', end='') #输出为字符串+空格
print()
[[1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 1, 0, 0, 0, 0, 0, 0, 0, 0], [1, 2, 1, 0, 0, 0, 0, 0, 0, 0], [1, 3, 3, 1, 0, 0, 0, 0, 0, 0], [1, 4, 6, 4, 1, 0, 0, 0, 0, 0], [1, 5, 10, 10, 5, 1, 0, 0, 0, 0], [1, 6, 15, 20, 15, 6, 1, 0, 0, 0], [1, 7, 21, 35, 35, 21, 7, 1, 0, 0], [1, 8, 28, 56, 70, 56, 28, 8, 1, 0], [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]]
因为杨辉三角形是在一个10*10的矩阵里赋值的,第一行a[0](1列有效),第二行a[1](1,2列有效),第3行a[2](1,2,3列有效),可以看出j=i+1有效
通过循环输出就可以把有效数字输出,再改为字符串+空格的形式输出。