今天是愉快的星期天,终于可以睡个懒觉了。
今天是准备被这周的所以内容归纳一下的,然后看到的经典的杨辉三角形,所以就把代码整理了一下。给他取了个狂野的名字。
==================================疯狂的杨辉三角形===================================
1.普通的杨辉三角形
杨辉三角形的规则就是出意每行的第一个数字之外,每个数字等于上一行对应两个数字的和。就不多说啦~~
- 先用函数的思想
def triangle():
N = [1]
while True:
yield N #generator特点在于:在执行过程中,遇到yield就中断,下次又继续执行
N.append(0) #每次都要在最后一位加个0,用于后续的叠加
N = [N[i]+N[i-1] for i in range(len(N))]
def print_triangle(x):
a = 0
for t in triangle(): #这里可以每次调用一个N(得力于Yield函数)
print(t)
a += 1
if a ==x:
break
print_triangle(10) #打印10行
- 下面是个简洁的方法,杨辉三角的关键在于每次打印之后要在列表最后以为加上0这个元素
N = [1]
for i in range(10): #打印10行
print(N)
N.append(0)
N = [N[k] + N[k-1] for k in range(i+2)]
好,以上就是非常常规的两个杨辉三角形的打印方法,那来拓展一下好了
1.居中的杨辉三角形(就是让打印出来的数字排成一个三角形)
思路:普通的杨辉三角形打印出来的是列表,而现在要让他呈金字塔状输出,即让每行输出有个中轴线
列表是不能想这样对其剧中的(也许有办法???),而字符串有
所以我们要先将列表转换为字符串,并在每个数字直接放置间隔
然后在剧中打印,剧中长度就是最后一会字符串的长度+最后一行数字的个数
- 首先我们要想如何把列表变成一个字符串,方法很多这里用一个选择一种使用
list1 = [1,2,3,4,5,6] #随便定义一个字符串,字符串中的元素是int类型 for i in range(len(list1)): temp = str[i] list1[i] = temp #遍历list1里所有元素,将其转换为str类型,再重新赋值给list1 list_to_str = ' '.join(length) #用join函数将字符串们组合起来,注意引号里有空格,让个数字隔开 list_to_str = list_to_str.center(90) #将字符串改装成一个长度是90的字符串,原字符串居中(这两部可以一起写) print(list_to_str) #在打印就会得到一个剧中的字符串了
上述这个为什么是90,因为懒得算应该是多少,所以取一个比较大的数字就好了~~~
-
现在知道如何居中之后就想把这段引用到杨辉三角形里(代码如下)
N = [1] #先把第一行给定义好 for i in range(10): #打印10行 #从这里开始我们就要把list转换为一个剧中的字符串打印出来 L = N.copy() #我们需要吧N复制给L,而不能直接L = N,因为这样L和N会在同一个地址,后续算法就会出错 for j in range(len(L)): #遍历和转化 temp = str(L[j]) L[j] = temp l = ' '.join(L).center(50) #组合和剧中一起写 print(l) #这里就是打印l了 N.append(0) #因为复制之后L是L,N是N,所以我们还是继续在N末尾加0 N = [N[k] + N[k-1] for k in range(i+2)]
因为昨天刚刚看了装饰器,所以想能不能把转化的过程放在装饰器里面
装饰器还没深入理解,只能尽量写一下 -
代码如下
-
def transfor(fun): #定义一个转换函数, def war(N): #带参数的装饰器,把参数传闭包里 L = N.copy() for j in range(len(L)): temp = str(L[j]) L[j] = temp l = ' '.join(L).center(90) fun(l) return war @transfor #甜甜的函数糖 def f1(N): #把print定义成f1()函数 print(N) N = [1] for i in range(10): f1(N) #这里注意要用f()代替print() N.append(0) N = [N[k] + N[k-1] for k in range(i+2)]
我一直在想如何不把print() 换成f1(),就是让装饰器直接作用在系统的print上,但是都失败了,好像大概是调用__main__,这样的函数,....还得在研究一下,或者有大神们知道的透露一下,谢谢啦!~~~~