Python全栈[第十一篇]:杨辉三角

1、每行端点与结尾的数为1.
2、每个数等于它上方两数之和。
3、每行数字左右对称,由1开始逐渐变大。
4、第n行的数字有n项。

在这里插入图片描述
方法一:
主要思想根据 每行端点与结尾的数为1;每个数等于它上方两数之和;

n = int(input('>>>:')) # 输入需要打印多少行
lit = [] # 定义一个空的列表接受每行的数据
for i in range(n):
    newlit = [1]  # 给端点补1
    if i == 0:
        lit.append(1)  # 第一行是特例
    else:
        for j in range(i - 1):  # 累加次数
            newlit.append(lit[j] + lit[j + 1])  # 每个数等于它上方两数之和
        newlit.append(1)  # 给结尾补1
        lit = newlit
    print(lit)
>>>:6
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]

代码结构优化

n = int(input('>>>:'))
lit = []
for i in range(n):
    newlit = [1]
    if i != 0:
        for j in range(i - 1):
            newlit.append(lit[j] + lit[j + 1])
        newlit.append(1)
    lit = newlit
    print(lit)

方法二:
首尾补0,可用通过负索引运算只要在尾部追加一个0即可.
在这里插入图片描述

n = int(input('>>>:'))
lit = [1]
for i in range(n):
    newlit = []
    lit.append(0) 
    for j in range(i + 1):  #每一个行有几个值就需要计算几次,i是从索引0开始的,例如打印n=4行 range(4) 前包后不包,实际i=3 那么几次次数是 0 1 2 为三次,所以需要 + 1 
        newlit.append(lit[j - 1] + lit[j])
    lit = newlit
    print(lit)

方法三:
先开辟空间

n = 6
for i in range(n):
    lit = [1] * (i+1)
    print(lit)
[1]
[1, 1]
[1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1]
n = 4
new_lit = []
for i in range(n):
    lit = [1] * (i+1)
    for j in range(1, i):
        lit[j] = new_lit[j - 1] + new_lit[j]
    print(lit)
    new_lit = lit
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]

拓展:
求 n 行 m 个数字:
第n行的m个数可表示为 C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。

xiayanxuedeMBP:.pip root# pip3 install scipy
Looking in indexes: https://mirrors.aliyun.com/pypi/simple/
Collecting scipy
  Downloading https://mirrors.aliyun.com/pypi/packages/85/7a/ae480be23b768910a9327c33517ced4623ba88dc035f9ce0206657c353a9/scipy-1.4.1-cp37-cp37m-macosx_10_6_intel.whl (28.4MB)
    100% |████████████████████████████████| 28.4MB 13.5MB/s
Collecting numpy>=1.13.3 (from scipy)
  Downloading https://mirrors.aliyun.com/pypi/packages/81/14/6d7c914dac1cb2b596d2adace4aa4574d20c0789780f1339d535e69e271f/numpy-1.18.2-cp37-cp37m-macosx_10_9_x86_64.whl (15.1MB)
    100% |████████████████████████████████| 15.1MB 8.1MB/s
Installing collected packages: numpy, scipy
Successfully installed numpy-1.18.2 scipy-1.4.1
You are using pip version 19.0.3, however version 20.0.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
xiayanxuedeMBP:.pip root#
import scipy.special
n = 6
m = 2
print(scipy.special.comb( n - 1, m - 1 ))
5.0
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值