Python 打印杨辉三角形(包括金字塔的款式的~~)

您所在的位置:网站首页 python如何输出三角形 Python 打印杨辉三角形(包括金字塔的款式的~~)

Python 打印杨辉三角形(包括金字塔的款式的~~)

2024-06-12 18:42| 来源: 网络整理| 查看: 265

今天是愉快的星期天,终于可以睡个懒觉了。

今天是准备被这周的所以内容归纳一下的,然后看到的经典的杨辉三角形,所以就把代码整理了一下。给他取了个狂野的名字。

==================================疯狂的杨辉三角形===================================

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__,这样的函数,....还得在研究一下,或者有大神们知道的透露一下,谢谢啦!~~~~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3