利用python打印杨辉三角
用python打印杨辉三角
介绍
杨辉三角,是初高中时候的一个数列,其核心思想就是说生成一个数列,该数列中的每一个元素,都是之前一个数列中,同样位置的元素和前一个元素的和。
正好在python中,也就是生成一个列表,该列表中的元素,都是之前列表的同样位置的元素和前一个元素的和。在这里,我想到的方法是通过迭代来进行计算,因为每一个数列的生成,都是需要前一个数列作为基础。
实现方式
首先,需要实现第N个杨辉三角的列表生成,通过分析整个杨辉三角,除了第一个和第二个数列意外,其他的都是可以通过迭代的方式进行生成的。具体的函数如下:
def Traingle(x):
'''定义杨辉三角的函数,即下一行的第N个元素,是本行的第N个元素和第N-2个元素的和,最后返回一个列表'''
x = int(x)
Traingle_list = []
if x == 1:
Traingle_list = [1]
elif x == 2:
Traingle_list = [1,1]
else:
Traingle_list_temp = Traingle(x-1)#获取上一行三角列表
Traingle_list = [1,1]
temp = 1
while temp <= x-2:
Traingle_list.insert(temp,Traingle_list_temp[temp]+Traingle_list_temp[temp-1])
temp += 1
return Traingle_list
在上面的函数中,1和2比较好理解,因为比较简单,从第3个开始,都是要先获取前一个数列,然后利用循环的方式,在对应的位置上,进行插入,插入的元素,即为前一个数列中,同样位置和之前一个元素的和。同时需要注意的是,由于列表索引和初始列表的原因,第一个元素和最后一个元素是不用插入的,所以最后一个元素是x-1,最多插入到x-2的位置。
返回的结果是一个列表,可以直接进行调用打印。
为了是杨辉三角看上去比较有规律,在打印的时候需要做一下处理,比如居中显示。我能想到的办法是利用字符串的居中显示,先将列表转化成为字符串,然后对整个字符串进行居中显示。
在处理数据的过程中,由于数字越加越大,所以每个元素的长度也不一样,居中显示如果固定死了,对于后面的列表,就显得不好看。所以在处理的过程中,默认先取出最大的列表中的最大元素,然后计算该元素的长度,所有列表中的每一个元素,都按照该元素的长度进行居中补齐,这样就保证了所有列表的所有元素,长度都是固定相同的,看上去就能好看一些。
另外,由于整个列表的长度,由列表转化成为的字符串来限定的,字符串,由元素和空格组成,元素是固定长度的,空格是固定个数的,有N个元素,就有N-1个空格。所以定义一个打印的函数,对杨辉三角的输出进行打印,具体如下:
def PrintTringle(x):
'''
打印杨辉三角,其中利用到的是字符串居中显示,周围填充空格,但是由于不确定得到的结果的长度,所以需要得到整个列表中最大的那个元素,然后计算该元素的长度,利用该长度,为每一个杨辉三角的值进行填充剧中。
:param x:
:return:
'''
n = 1
x = int(x)
# 获取最大的元素,判断列表最大的元素的长度
if x % 2 == 0:
max_item = Traingle(x)[int(x/2)]
else:
max_item = Traingle(x)[int((x+1)/2)]
max_length = len(str(max_item))
while n <= x :
list = Traingle(n)
string = ''
tem = 0
# 对每一列杨辉三角进行处理,转化成为字符串,拼接
while tem < len(list):
if tem == 0:
string = str(list[tem]).center(max_length)
else:
string = string + ' ' + str(list[tem]).center(max_length)
tem += 1
# 打印处理,每一列的元素有N个,空格用N+1
print(string.center((max_length+1)*x-1))
n += 1
在调用该函数的时候,只需要输入一个参数,正整数,就可以打印出整个杨辉三角到一定长度的完整序列,并且逻辑展示排列。比如打印20个。
PrintTringle(20)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1
1 15 105 455 1365 3003 5005 6435 6435 5005 3003 1365 455 105 15 1
1 16 120 560 1820 4368 8008 11440 12870 11440 8008 4368 1820 560 120 16 1
1 17 136 680 2380 6188 12376 19448 24310 24310 19448 12376 6188 2380 680 136 17 1
1 18 153 816 3060 8568 18564 31824 43758 48620 43758 31824 18564 8568 3060 816 153 18 1
1 19 171 969 3876 11628 27132 50388 75582 92378 92378 75582 50388 27132 11628 3876 969 171 19 1
以上显示,受页面排版的影响,显示不全,其实在终端中是可以正常显示的。

利用python打印杨辉三角的更多相关文章
- C语言打印杨辉三角(2种方法)
杨辉三角是我们从初中就知道的,现在,让我们用C语言将它在计算机上显示出来. 在初中,我们就知道,杨辉三角的两个腰边的数都是1,其它位置的数都是上顶上两个数之和.这就是我们用C语言写杨辉三角的关键之一. ...
- python实现杨辉三角
刚刚学python,原来用c++,Java很轻松实现的杨辉三角,现在用python实现,代码是少了,理解起来却不容易啊. 这里主要用到的Python的生成器. 我们都知道Python有列表解析功能,根 ...
- 使用Java打印杨辉三角
package 杨辉三角; import java.util.Scanner; public class 三角 { private static Scanner scn; public static ...
- java代码打印打印杨辉三角
郑州大学 徐峰 public class Print { void print(){ int[][] a=new int[6][6]; for(int i=0;i<a.length;i++){ ...
- 打印杨辉三角--for循环
要求打印7行直角杨辉三角 杨辉三角特点: 第1行和第2行数字都为1: 从第三行开始,除去开头和结尾数字为1,中间数字为上一行斜对角两个数字的和. 如下图: 打印结果: 代码如下: package 杨辉 ...
- [Java练习题] -- 1. 使用java打印杨辉三角
package cn.fzm.demo1.array; import java.util.Scanner; /* * 需求:打印杨辉三角形(行数可以键盘录入) 1 1 1 1 2 1 1 3 3 1 ...
- python 实现杨辉三角(依旧遗留问题)
1 #! usr/bin/env python3 #-*- coding :utf-8 -*- print('杨辉三角的generator') def triangles(): N=[1] while ...
- Python之杨辉三角算法实现
学习了廖雪峰的官方网站的python一些基础,里面有个题目,就是让写出杨辉三角的实现,然后我就花了时间实现了一把.思路也很简单,就是收尾插入0,然后逐层按照杨辉三角的算法去求和实现杨辉三角. 附属代码 ...
- C语言用一维数组打印杨辉三角(原:无意中想到)
本贴地址 ] = { }; a[] = , a[] = ; int i, j,m; ; i <= ; i++) //2-11 输出10行 { ; j > ; j--) //关键在这句,倒着 ...
随机推荐
- akka-typed(0) - typed-actor, typed messages
akka 2.6.x正式发布以来已经有好一段时间了.核心变化是typed-actor的正式启用,当然persistence,cluster等模块也有较大变化.一开始从名称估摸就是把传统any类型的消息 ...
- 认证(Authentication)和授权(Authorization)总结
身份认证是验证你的身份,一旦通过验证,即启用授权.你所拥有的身份可以进行哪些操作都是由授权规定.例如,任何银行客户都可以创建一个账户(如用户名),并使用该账户登录该银行的网上服务,但银行的授权政策必须 ...
- jchdl - GSL实例 - DLatch(D锁存器)
https://mp.weixin.qq.com/s/c8kDgye50nKJR4tkC0RzVA D锁存器对电平敏感,当使能位使能时,输出Q跟随输入D的变化而变化. 摘自康华光<电子 ...
- RocketMQ系列(一)基本概念
RocketMQ是阿里出品的一款开源的消息中间件,让其声名大噪的就是它的事务消息的功能.在企业中,消息中间件选择使用RocketMQ的还是挺多的,这一系列的文章都是针对RocketMQ的,咱们先从Ro ...
- Redis高可用-主从,哨兵,集群
主从复制 Master-Slave主从概念 同时运行多个redis服务端,其中一个作为主(master),其他的一个或多个作为从(slave),主从之间通过网络进行通讯,slave通过复制master ...
- Java实现 LeetCode 493 翻转对
493. 翻转对 给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对. 你需要返回给定数组中的重要翻转对的数 ...
- Java实现 LeetCode 474 一和零
474. 一和零 在计算机界中,我们总是追求用有限的资源获取最大的收益. 现在,假设你分别支配着 m 个 0 和 n 个 1.另外,还有一个仅包含 0 和 1 字符串的数组. 你的任务是使用给定的 m ...
- Java实现 LeetCode 321 拼接最大数
321. 拼接最大数 给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字.现在从这两个数组中选出 k (k <= m + n) 个数字拼接成一个新的数,要 ...
- java实现第五届蓝桥杯锦标赛
锦标赛 这题小编能力有限,还望大佬解决 题目描述 如果要在n个数据中挑选出第一大和第二大的数据(要求输出数据所在位置和值),使用什么方法比较的次数最少?我们可以从体育锦标赛中受到启发. 如图[1.pn ...
- XStrea学习手册
一.前言 1.XStream官网 http://x-stream.github.io 2.XStream是什么 XStream是一个简单的基于Java的类库,用来将Java对象序列化成XML(J ...