python菜鸟教程-杨辉三角形

本文详细介绍了如何用Python编程语言,通过循环和numpy库来生成和输出杨辉三角的不同形式,包括直角三角形、正三角形和传统的二维列表表示。
摘要由CSDN通过智能技术生成

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有效

通过循环输出就可以把有效数字输出,再改为字符串+空格的形式输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值