用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 杨辉三角居中打印_利用python打印杨辉三角相关推荐

  1. python如何自动打印_利用Python每天自动打印练习题

    在日常教学工作中,我几乎每天都会给班上的每位同学打印一份口算练习题.为了防止出现抄袭的现象,给每位同学的练习题都不相同. 通过网上下载的一个小软件自动生成的练习题. 之前的操作是通过网上下载的软件,自 ...

  2. python中θ符号怎么打出来_利用python打印特殊符号

    原博文 2020-05-02 19:57 − 1.方法一,调用字符映射表输入特殊符号 在键盘上按win+R,在打开的对话框中输入"charmap",会出现字符映射表: 2.利用字符 ...

  3. python 16bit转8bit的工具_利用python读取YUV文件 转RGB 8bit/10bit通用

    注:本文所指的YUV均为YUV420中的I420格式(最常见的一种),其他格式不能用以下的代码. 位深为8bit时,每个像素占用1字节,对应文件指针的fp.read(1): 位深为10bit时,每个像 ...

  4. python数据库操作批量sql执行_利用Python如何批量修改数据库执行Sql文件

    利用Python如何批量修改数据库执行Sql文件 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  利用Python如何批量修改数据库执行Sql文件.txt ] (友 ...

  5. python处理word或者pdf文件_利用python程序生成word和PDF文档的方法

    一.程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob.Apache POI.Java2Word.iText等各种方式,以及使用fr ...

  6. python 钉钉机器人发送图片_利用Python自动发送钉钉数据消息

    现在大部分公司都使用钉钉作为内部的主要沟通工具,钉钉消息基本都上都能快速有效的被阅读,打开率会比邮件高上不少.所以准备使用钉钉来播报平台每日的成交额,并附上一些鼓励的话和图片.起到一个激励团队的作用 ...

  7. python爬取外文文献翻译_利用Python爬取翻译网站的翻译功能

    现在我想分享一个利用Python技术,爬取一个翻译网站的翻译功能的小代码. 首先隆重介绍我们今天将要爬取的网站:http://fy.iciba.com/ 咱们用Python中的urllib模块的功能进 ...

  8. python贪吃蛇最简单代码_利用python实现简易版的贪吃蛇游戏(面向python小白)

    引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程序.以至于常常整天在那看各种语法教程,学了几个月还是只会print('hello world'). 这样做效率太低,正确的 ...

  9. python 替换array中的值_利用Python提取视频中的字幕(文字识别)

    我的CSDN博客id:qq_39783601,昵称是糖潮丽子~辣丽 从今天开始我会陆续将数据分析师相关的知识点分享在这里,包括Python.机器学习.数据库等等. 今天来分享一个Python小项目! ...

  10. python获取window共享目录列表_利用Python获取DICOM RTstructure勾画列表

    在<利用Python打开DICOM CT文件>一文中,我们利用pydicom.dcmread()读取了CT图像.本文中我们将修改load_scan()函数来读取RTstructure文件并 ...

最新文章

  1. 异步调用WCF的方法需要小心的地方
  2. JavaScript 中 Object ,Prototype 相关的属性和方法
  3. cstring越界_try catch 捕捉数组越界异常
  4. [改善Java代码]生成子列表后不要再操作原列表
  5. 如何判断一个点是否在一个多边形内?
  6. 《Linux内核设计与实现》读书笔记(一)-内核简介
  7. Redis客户端命令行redis-cli操作
  8. webpackjsonp 还原_具有催化CO2还原性能的非贵金属配合物的配体设计
  9. Redis文档阅读笔记-Pub/Sub官方解析
  10. IDC商人应不应该给客户提供服务器测试?```
  11. 程序猿必须要知道的一个内容:客户端+服务端一(源码解析、建议收藏)
  12. mongovue mysql_MongoDB 客户端 MongoVue
  13. mysql 执行 毫秒_记录sql执行时间毫秒级
  14. 上位机和下位机通信故障判断方法
  15. wps怎么关闭修改痕迹_WPS文字如何保留修改痕迹?WPS文字保留修改痕迹教程
  16. golang 腾讯通用OCR 文字识别 Api 调用
  17. 帮你选处理器:CPU T9500-p9500-T9400-T9300-p8700对比分析!
  18. 记录阿里云服务器和百度网盘之间传输文件
  19. 前端学习从入门到高级全程记录之39 (PHP基础Ⅱ)
  20. 俗话说别在一棵树上吊死,那为什么那么多NOSQL都喜欢在LSM树上吊死呢?

热门文章

  1. 记一次在京东购买笔记本电脑的经历
  2. CVPR2022论文速递(2022.3.24)!共11篇含表情识别/deepfake检测/插帧等
  3. SYD8821或SYD8811连接《SYDTEK Studio》异常状况说明
  4. 某单机斗地主内购破解
  5. 【光学】基于matlab相互垂直的光波叠加仿真【含Matlab源码 2071期】
  6. 哇塞,原来自己写 Google Chrome 浏览器扩展(插件)这么容易!
  7. 该怎么保持微信公众账号用户活跃度
  8. 影片剪辑app android,4款经典的手机影片剪辑App
  9. 20210725:FLAC刻录音乐CD教程03-Flac转wav格式
  10. Elaine的oi之路