导航:首页 > 源码编译 > 杨辉三角算法python

杨辉三角算法python

发布时间:2022-09-01 05:22:43

‘壹’ python 写的一个杨辉三角的生成器,但是使用的时候一直报错,错误没看懂是什么意思。

1.print(L.values())ortype()L是个字典,valueskeys那几个是字典的几个方法2.printortype(g)g是生成器3.错误信息已经写的很清楚了你问题说反了,fib(8)是生成器其实是类型不同

‘贰’ python杨辉三角形原理

triangles里用到了yield,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 triangles(5) 不会执行 triangles函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield L 时,triangles函数就返回一个迭代值,下次迭代时,代码从 yield L的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。

1那个2去哪了

你看else语句L1 = [1,1]每次L都是基于这个L1生成的 比如L=[1,2,1] 那么下一个L1就是[1,3,3,1],下一句L = L1 所以每次都是新的L1生成


2画红圈的地方应该是和L1.insert(i,L[i-1+i])意思一样

不一样,插入的值是两个数的和

deftriangles(max):
L=[1]
n=0
while(n<max):
n=n+1
if(n==2):
L=[1,1]
yieldL
else:
i=1
L1=[1,1]
while(i<=n-2):
L1.insert(i,L[i-1]+L[i])
i=i+1
L=L1
yieldL


fornintriangles(5):
printn

‘叁’ 求教 杨辉三角的递归解法 python

1、九九乘法表

def multiplicationTable():
for i in range(1, 10):
for j in range(1, i):
print "%d * %d = %d\t" % (j, i, j * i),
print "%d * %d = %d\n" % (i, i, i * i),

if __name__ == '__main__':
multiplicationTable()
2、杨辉三角

def pascalsTriangle(n):
line = [1]
print "\t" * (n - 1),
print "%d\n" % line[-1],
for i in range(n - 1):
new_line = [1]
for j in range(i):
new_line.append(line[j] + line[j + 1])
new_line.append(1)
line = new_line
print "\t" * (n - i - 2),
for each in line[:-1]:
print "%d\t\t" % each,
print "%d\n" % line[-1],

if __name__ == '__main__':
pascalsTriangle(7)

‘肆’ 怎么用python实现这样的杨辉三角啊

按照你的要求用字符串类型编写的杨辉三角的Python程序如下

defprintYangHui(n):

foriinrange(1,n+1):

ifi==1:

s="1"

ifi==2:

s="1,1"

ifi>2:

s1=""

begin=0;

forjinrange(0,(i-3)+1):

begin1=s.find(",",begin)

begin2=s.find(",",begin1+1)

ifbegin2==-1:

begin2=begin1+2

s1=s1+str(int(s[begin:begin1])+int(s[begin1+1:begin2]))+","

begin=begin2-(begin2-begin1-1)

s="1,"+s1+"1"

print(s)

n=int(input())

printYangHui(n)

源代码如下(注意源代码的缩进)

‘伍’ 关于杨辉三角python代码的问题

杨辉三角,是二项式系数在三角形中的一种几何排列。
前提:每行端点与结尾的数为1.
每个数等于它上方两数之和。
每行数字左右对称,由1开始逐渐变大。
第n行的数字有n项。
第n行数字和为2n-1。
第n行的m个数可表示为
C(n-1,m-1),即为从n-1个不同元素中取m-1个元素的组合数。
第n行的第m个数和第n-m+1个数相等
,为组合数性质之一。
每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即
C(n+1,i)=C(n,i)+C(n,i-1)。
(a+b)n的展开式中的各项系数依次对应杨辉三角的第(n+1)行中的每一项。
将第2n+1行第1个数,跟第2n+2行第3个数、第2n+3行第5个数……连成一线,这些数的和是第4n+1个斐波那契数;将第2n行第2个数(n>1),跟第2n-1行第4个数、第2n-2行第6个数……这些数之和是第4n-2个斐波那契数。
将各行数字相排列,可得11的n-1(n为行数)次方:1=11^0;
11=11^1;
121=11^2……当n>5时会不符合这一条性质,此时应把第n行的最右面的数字”1”放在个位,然后把左面的一个数字的个位对齐到十位…
…,以此类推,把空位用“0”补齐,然后把所有的数加起来,得到的数正好是11的n-1次方。以n=11为例,第十一行的数为:1,10,45,120,210,252,210,120,45,10,1,结果为
25937424601=1110。
完整代码:
#!/usr/bin/python
#coding=utf-8
#
__author__
=
'cy'
#输出杨辉三角数值表
def
triangle(num):
#初始表值为[1]
triangle=[[1]]
#添加i个值([1])至triangle表,eg:[1]*3,triangle=[[1],
[1],
[1]]
for
i
in
range(2,
num+1):
triangle.append([1]*i)
#改变triangle表的值,eg:
#当num=5时,i取5,j取3
#triangle[4][1]
=
triangle[3][1]+triangle[3][0]
#triangle[4][2]
=
triangle[3][2]+triangle[3][1]
#triangle[4][3]
=
triangle[3][3]+triangle[3][2]
#相当于triangle表的第4位的值(这里的值为一个表)的第1,2,3位值等于第3位的值(这里的值也是一个表)的第1,2,3位值和0,1,2的值分别相加(即错位相加)。
for
j
in
range(1,
i-1):
triangle[i-1][j]
=
triangle[i-2][j]+triangle[i-2][j-1]
return
triangle
#格式化输出(输出的是一个表)
def
printtriangle(triangle,
width):
#列宽
column
=
len(triangle[-1])*width
for
sublist
in
triangle:
result
=
[]
for
contents
in
sublist:
#控制间距
result.append('{0:^{1}}'.format(str(contents),
width))
#控制缩进,{0:^{1}}:空格在两边补齐空位‘^’居中对齐,‘:’号后面带填充的字符
print('{0:^{1}}'.format(''.join(result),
column))
#启动函数
if
__name__
==
'__main__':
#输入整数
num
=
int(input('How
many
rows
do
you
want:'))
#打印信息
print
"The
triangle
rows
as
follows:"
triangle
=
triangle(num)
#列宽
width
=
len(str(triangle[-1][len(triangle[-1])//2]))+3
printtriangle(triangle,
width)

‘陆’ 用Python输出一个杨辉三角的例子

用Python输出一个杨辉三角的例子
这篇文章主要介绍了用Python和erlang输出一个杨辉三角的例子,同时还提供了一个erlang版杨辉三角,需要的朋友可以参考下
关于杨辉三角是什么东西,右转维基网络:杨辉三角
稍微看一下直观一点的图:
代码如下:

杨辉三角有以下几个特点:
每一项的值等于他左上角的数和右上角的数的和,如果左上角或者右上角没有数字,就按0计算。
第N层项数总比N-1层多1个
计算第N层的杨辉三角,必须知道N-1层的数字,然后将相邻2项的数字相加,就能得到下一层除了最边上2个1的所有数字。 听起来有点像递归的思想,我们不妨假设我们已经知道N-1层的数字,来计算一下N层的数字吧。
代码如下:
def _yanghui_trangle(n, result):
if n == 1:
return [1]
else:
return [sum(i) for i in zip([0] + result, result + [0])]

上面代码中,result表示N-1层杨辉三角的数字。实习上,我们在列表2端各补了一个0,然后计算相邻项的和,就可以直接得到结果。
稍微完善一下代码:
代码如下:
def yanghui_trangle(n):
def _yanghui_trangle(n, result):
if n == 1:
return [1]
else:
return [sum(i) for i in zip([0] + result, result + [0])]
pre_result = []
for i in xrange(n):
pre_result = _yanghui_trangle(i + 1, pre_result)
yield pre_result
if __name__ == "__main__":
for line in yanghui_trangle1(5):
print line

_yanghui_trangle可以用lambda的方式简写,但是可读性感觉会变差,所以还是保持现状好了。
tips: 上面的程序并没有考虑数据格式化的问题,也就是说输出不是完美的三角形。
鉴于最近在学习erlang,补上一个erlang版本的,性能上没有测试过,不过还是要惊叹于函数式语言的表达能力:
代码如下:

-mole(yanghui).
-author(lfyzjck).
-export([triangle/1]).
triangle_next(P) ->
lists:zipwith(fun(X, Y) -> X+Y end, [0|P], P ++ [0]).
triangle(1) ->
[[1]];
triangle(N) ->
L = triangle(N - 1),
[H|_] = L,
[triangle_next(H)|L].

‘柒’ python杨辉三角函数问题

[1]
[1,
1]
[1,
2,
1]
[1,
3,
3,
1]
[1,
4,
6,
4,
1]
[1,
5,
10,
10,
5,
1]
执行你那个生成器,并生成6行杨辉三角的数据
经过观察你就会发现这个列表推导式[L[i-1]
+
L[i]
for
i
in
range(len(L))]是产生每一行的杨辉三角数据的。
L[i-1]+L[i]是根据前一行指定索引位置的杨辉三角数据,产生新的一行的数据

‘捌’ 如何用python输出杨辉三角

程序输出需要实现如下效果:
[1]
[1,1]
[1,2,1]
[1,3,3,1]
......
方法:迭代,生成器def triangles() L = [1] while True: yiled L L =[1] + [L[i] + L[I+1] for i in range(len(L)-1)] + [1] n = 0 for t in triangles(): print(t) n += 1 if n == 10: break

实现逻辑:
1.由于yield为生成器中断输出,所以有了第一个次输出为[1]
2.继续while下面的yield后的循环,此时list长度为1,将其代入L中的len(L),得出[L[i]+L[i+1] for i in range(1-1)]得出为空值,所以yield L输出为[1,1]
3.此时len(L)值为2,代入得出[L[i]+L[i+1] for i in range(2-1)]为[L[i]+L[i+1] for i in range(1)],i能取值为0,代入后为[L[0]+L[1]],而L[0]和L[1]的值均为1(有上面结果可知),所以输出结果为[1,2,1]
4.由第三条可知此时len(L)值为3,代入得出[L[i]+L[i+1] for i in range(2)],i取值为0和1,通过循环输出有两个值,均为3,分别由[L[0]+L[1]],[L[1]+L[2]]
以此类推即可

阅读全文

与杨辉三角算法python相关的资料

热点内容
在单片机中有哪些显示器 浏览:789
我的世界如何在服务器里设置货币 浏览:591
酷猫系统如何安装app 浏览:636
邮寄服务器是干什么用 浏览:159
解除电脑加密文件夹 浏览:358
androidcheckbox组 浏览:546
linux在线安装软件 浏览:823
如何设置手机安卓版 浏览:285
简历pdfword 浏览:123
锋云视频服务器网关设置 浏览:162
linux服务器如何查看网卡型号 浏览:142
加密相册误删了怎么恢复 浏览:380
安卓代练通怎么下载 浏览:518
知道域名如何查询服务器 浏览:907
方舟手游怎么才能进服务器 浏览:289
抖音算法自动爆音 浏览:24
linux修改网卡配置 浏览:913
云服务器和本地服务器数据 浏览:843
在家如何创业python 浏览:225
编译原理好课 浏览:718