A. 求教 杨辉三角的递归解法 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)
B. 如何用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]]
以此类推即可
C. 新手求教:请问怎样用python 显示杨辉三角,任意输入一个数N,输出一个N+1层的杨辉三角。
我来试一下:
#!/usr/bin/python
#coding:utf-8
n=-1
whilen<0:
n=raw_input("Enteranonnegativeinteger>=0:")
try:
n=int(n)
except:
print"pleaseenterinteger!"
n=-1
tmppascal=[0,]*(2*n+3)
pascal=[]
foriinrange(n+2):
pascal+=[tmppascal[:],]
center=n+1
pascal[1][center]=1
x=y=0
foriinrange(2,n+2):
ifn%2==1:
ifi%2==0:
x=1
y=2*n+2
else:
x=2
y=2*n+1
else:
ifi%2==1:
x=1
y=2*n+2
else:
x=2
y=2*n+1
forjinrange(x,y,2):
pascal[i][j]=pascal[i-1][j-1]+pascal[i-1][j+1]
ifn%2==0:
max=pascal[n+1][center]
else:
max=pascal[n+1][center-1]
maxlen=len(str(max))
forrowinpascal[1:]:
forcolinrow[1:-1]:
ifcol==0:
col=""
fm='{0:^'+str(maxlen)+'}'
printfm.format(col),
D. 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]是根据前一行指定索引位置的杨辉三角数据,产生新的一行的数据
E. 关于杨辉三角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)
F. 如何用Python实现杨辉三角和心
方法
ef printlove(start,length,midnumber=0,flag=31):
for i in range(31):
if i<start or i>start+length-1 and i<15-(midnumber-1)/2 or i>15+(midnumber-1)/2 and i<31-start-length or i> 30-start or i==flag:
print " ",
else:
print "*",
print ""
for i in range(16):
if i ==0:
printlove(4,3)
elif i==1:
printlove(1,9)
elif i>=2 and i<=5:
printlove(0,i+10)
elif i==6:
printlove(1,7,7,15)
elif i>=7 and i<=8:
printlove(i-5,6,5-(i-7)*2)
elif i==9:
printlove(5,6,1)
elif i==10:
printlove(8,6,1)
elif i==15:
printlove(15,1,1)
else:
printlove(i-1,16-i,1)
G. python新手 杨辉三角
1) enumerate(iterable) 是对一个可遍历对象进行遍历时添加遍历序号的方法. 例如:
>>>alst=['%02d'%x*2forxinrange(7,3,-1)]
>>>alst
['0707','0606','0505','0404']
>>>fori,iteminenumerate(alst):
...printi,item
...
00707
10606
20505
30404
>>>
2) while True: 进入持续循环; 通常在循环体内有判断逻辑, 当满足条件时 break 或 return
H. 如何用Python输出一个杨辉三角
NUM=5
defprintLine(lineList):
lineList=[str(tmpNum)fortmpNuminlineList]
print("%s%s"%(""*(NUM-len(lineList)),"".join(lineList)))
foriinrange(NUM):
ifi<2:
yhList=[1]*(i+1)
else:
yhList[1:-1]=[(tmpNum+yhList[j])forj,tmpNuminenumerate(yhList[1:])]
printLine(yhList)
I. 怎么用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)
源代码如下(注意源代码的缩进)
J. 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