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