python 格式化打印杨辉三角形 递归 (代码 + 注释)重庆邮电大学python作业

本文主要是介绍python 格式化打印杨辉三角形 递归 (代码 + 注释)重庆邮电大学python作业,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一、生成普通杨辉三角形

二、格式化打印

1. 得到最大数字位数

2. 写个函数:printf(作为我们格式化打印的方法)

总结

前言

第一篇博客,打算把自己学习中遇到的有趣的作业或者一些日常写下来,话不多说,进入正题:

题目:

首先,方便大家拿代码,直接上完全AC代码:

def triangle(n):temp = []if n == 1:temp.append(1)return templis.append(triangle(n - 1))temp.append(1)for i in range(n - 2):temp.append(lis[n - 2][i] + lis[n - 2][i + 1])temp.append(1)return tempdef printf(n,blacklen):for i in range(n):print(' ' * (blacklen * (n - i) + 1) ,end = '')for j in range(len(lis[i])):print(' ' * (blacklen - len(str(lis[i][j]))),end = '')print(lis[i][j],end = ' ' * blacklen)print()    n = int(input())
lis = []
lis.append(triangle(n))
maxNumber = lis[n - 1][n // 2]
blacklen = len(str(maxNumber))
printf(n,blacklen)

运行结果:

以下是具体实现思路:

一、生成普通杨辉三角形

我们为了格式化打印杨辉三角形,首先肯定要"生成"这个三角形,这有很多种方法,在这里,我选择使用 列表递归 去实现:

这里不去使用 "高端(我不会的数学方法)" 仅仅使用基本的杨辉三角形的规律去实现,以下是代码 + 注释:

思路:1. 因为杨辉三角是一行一行的多行结构,我们容易想到应该去使用 列表[列表[内容]] 的结构去实现

           2. 因为是递归实现,我们需要一个出口条件,这里我们将其规定为 杨辉三角形的第一行

def triangle(n):#4. 创建一个列表,它是"即将加入"lis列表的列表,即:杨辉三角型的一行,但他现在还是一个空列表,下面要进行的是对它的"加工"temp = []#5. 出口条件,所有的递归都会到这里,然后直接return 也就不会进行下面的递归,终止了所有的递归,它也是杨辉三角形的第一行if n == 1:temp.append(1)return temp#6. 如果能进行到这里,说明此时的 n 也就是现在的层数不是 1 ,所以要进行递归,递归的结果我们将它加入到lis列表中lis.append(triangle(n - 1))#7. 由杨辉三角形的特性我们可以知道它的最左边和最右边都是 1,这个直接加入即可temp.append(1)#8. 这个for循环要进行的是对一行中除了最左边和最右边的 1 的数字的填充for i in range(n - 2):# 观察可得 这一行中的每个元素都是它上一行(lis[n - 2]) 举个栗子:如果n 是第三行,那么lis[n - 2] = lis[1],也就是第二层# ...[i] 和 ...[i + 1]是 这个元素的左上和右上的两个元素temp.append(lis[n - 2][i] + lis[n - 2][i + 1])#9. 同 7 在最左边加入 1temp.append(1)#10. 返回我们已经加工成功的temp列表return temp#1. 接受输入的杨辉三角行数
n = int(input())
#2. 这是杨辉三角形的外壳,即装着列表的列表,因为列表在python是全局变量,所以我们不需要像函数中传入这个值
lis = []
#3. 运行我们的函数,设想这个函数返回了一个列表,其中是杨辉三角型的列表,我们只需要将其加入列表中即可
lis.append(triangle(n))
#打印它,让我们康康!
print(lis)

运行结果如下:

从这里,lis代表了一个杨辉三角形,但这样我们是拿不到分的,所以剩下的我们需要进行格式化打印即可

二、格式化打印

1. 得到最大数字位数

代码如下:

根据题目要求,我们格式化打印的时候需要有它的最大数字的位数,作为空格,所以,我们先设法获得它

根据杨辉三角的特性,我们只需要得到最后一行的中间的元素即可得到最大的元素,将其转化成字符串就可以拿到它的长度了!

maxNumber = lis[n - 1][n // 2]
blacklen = len(str(maxNumber))

2. 写个函数:printf(作为我们格式化打印的方法)

代码如下:

def printf(n,blacklen):for i in range(n):print(' ' * (blacklen * (n - i) + 1) ,end = '')for j in range(len(lis[i])):print(' ' * (blacklen - len(str(lis[i][j]))),end = '')print(lis[i][j],end = ' ' * blacklen)print()    

需要注意的是,这里的格式化重邮的同学们可以看看,调这个格式我眼睛要炸了(还拿尺子量),不过对于大火,这个并不是很重要,需要注意的是这个题目的数字位数是 先空格再加数字 很阴间


总结

这次的作业在递归打印这里还是挺有收获的,后面的格式化可以说是垃圾时间,只要有耐心,仔细归纳规律就行,邮耐心的同学可以自己把这个题目实现一下偶

因为我对python并不是特别熟悉,所以代码可能还有改进或者简便的方法,希望大家能多讨论,交流

这篇关于python 格式化打印杨辉三角形 递归 (代码 + 注释)重庆邮电大学python作业的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/384462

相关文章

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.