Python中三种花式打印的示例详解


Posted in Python onMarch 19, 2022

1. 引言

在Python中有很多好玩的花式打印,对厉害的高手来说可能是小菜一碟,对入门的小白来说往往让人望而退步,我们今天就来挑战下面三个常见的花式打印吧。。。

2. 打印圣诞树

2.1 问题描述

编码实现函数christmas_tree(height),该函数输入参数为一个整数表示圣诞树的高度,输出为打印高度为height的圣诞树图案,其中默认树干的高度始终为2.

样例如下:

# height = 3
  *
 ***
*****
  *
  *
# height = 4
   *
  ***
 *****
*******
   *
   *
# height = 5
    *
   ***
  *****
 *******
*********
    *
    *

2.2 问题分析

仔细观察上述输出图案,我们可以将圣诞树分成两部分——顶部三角形和树干。

# case: height = 4
   *      3 space + 1 *
  ***     2 space + 3 *
 *****    1 space + 5 *
*******   0 space + 7 *
   *      3 space + 1 *
   *      3 space + 1 *

如果我们使用 range(height),那么此时需要将 i 的值 0,1,2,3 映射到空格数 3,2,1,0 和 * 字符数 1,3,5,7。即如下所示:

num_space   num_star
i=0  3           1
i=1  2           3
i=2  1           5
i=3  0           7
i    height-i-1  i*2+1

我们将其抽象,可以使用公式 height-i-1 将 i 映射到 num_space,使用公式 i*2+1 将 i 映射到 num_star。进而,我们可以得出我们的代码实现:

def christmas_tree(height):
    for i in range(height):
        print(" " * (height-i-1) + "*" * (i*2+1))
    for i in range(2):
        print(" " * (height-1) + "*")

3. 打印字母版圣诞树

3.1 问题描述

编码实现函数 string_christmas_tree(string) ,它接受一个字符串作为输入,并根据字符串打印一个圣诞树图案。同样,树干的高度始终为 2。

样例如下:

# string = "abc"
  a
 bab
cbabc
  a
  a
# string = "abcd"
   a
  bab
 cbabc
dcbabcd
   a
   a
# string = "abcde"
    a
   bab
  cbabc
 dcbabcd
edcbabcde
    a
    a

3.2 问题分析

和问题一的解决方案类似,我们可以将上述输出拆分为两部分,第一个用于顶部三角形的输出,第二部分用于主干的输出。

# case where string = "abcd"
   a     3 space + string[0:0:-1] + string[:1]
  bab    2 space + string[1:0:-1] + string[:2]
 cbabc   1 space + string[2:0:-1] + string[:3]
dcbabcd  0 space + string[3:0:-1] + string[:4]
   a     3 space + string[0]
   a     3 space + string[0]

这里,如果我们使用range(len(string)),我们需要将i值0,1,2,3映射到空格数3,2,1,0,左切片0,1,2,3和右切片 1,2,3,4。即如下所示:

space             left  right
i=0  3                 0     1
i=1  2                 1     2
i=2  1                 2     3
i=3  0                 3     4
i    len(string)-i-1   i     i+1

更一般的,我们可以使用公式 len(string)-i-1 将 i 映射到num_space。 i 和 left 完全一样,所以这里不需要映射,我们可以简单地将 i 加 1 来得到right。

进而,我们可以得出我们的代码实现:

def string_christmas_tree(string):
    for i in range(len(string)):
        print(" "*(len(string)-i-1) + string[i:0:-1] + string[:i+1])
    for i in range(2):
        print(" "*(len(string)-1) + string[0])

4. 打印字母版菱形

4.1 问题描述

编码实现函数 string_diamond(string) ,该函数接受一个字符串作为输入,并打印以下菱形图案。假设该字符串具有奇数个字符。
样例如下:

# string = "abcde"
  a
 abc
abcde
 cde
  e
# string = "abcdefg"
   a
  abc
 abcde
abcdefg
 cdefg
  efg
   g
# string = "abcdefghi"
    a
   abc
  abcde
 abcdefg
abcdefghi
 cdefghi
  efghi
   ghi
    i

4.2 问题分析

根据我们的观察,我们依旧将上述输出图案拆分为上下两个部分,其中上半部分为顶部三角形,另一半为底部倒三角形。

# case where string = "abcdefg"
   a      3 space + string[:1]
  abc     2 space + string[:3]
 abcde    1 space + string[:5]
abcdefg   0 space + string[:7]
 cdefg    1 space + string[2:]
  efg     2 space + string[4:]
   g      3 space + string[6:]

首先,我们需要找到上半部分顶部三角形的高度。我们可以使用公式 len(string)//2+1 来获得高度。
接着我们来分析上半部分的三角形输出:

如果我们使用 range(height),我们需要将 i 映射到空格数 3,2,1,0,然后是切片的末端 1,3,5,7。

spaces      slice
i=0  3           1
i=1  2           3
i=2  1           5
i=3  0           7
i    height-i-1  i*2+1

最后我们来分析下半部分的三角形输出:

我们可以使用 range(1, height),此时需要将 i 映射到空格数 1,2,3 和切片的开头 2,4,6

spaces   slice
i=1  1        2
i=2  2        4
i=3  3        6
i    i        i*2

有了上面的分析,我们可以愉快的编码了,代码实现如下:

def string_diamond(string):
    height = len(string)//2+1
    
    for i in range(height):
        print(" "*(height-i-1) + string[:i*2+1])
    for i in range(1, height):
        print(" "*i + string[i*2:])

5. 总结

本文对三种常见的花式打印进行了由浅入深的讲解,通过分析对应的输出图案,找出相应的打印规律,并给出了相应的代码实现。

到此这篇关于Python中三种花式打印的示例详解的文章就介绍到这了,更多相关Python花式打印内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在Python的gevent框架下执行异步的Solr查询的教程
Apr 16 Python
在Python的Flask框架中验证注册用户的Email的方法
Sep 02 Python
Python生成随机密码的方法
Jun 16 Python
Python探索之ModelForm代码详解
Oct 26 Python
python调用百度语音识别api
Aug 30 Python
使用python实现unix2dos和dos2unix命令的例子
Aug 13 Python
pandas条件组合筛选和按范围筛选的示例代码
Aug 26 Python
Python缓存技术实现过程详解
Sep 25 Python
python-numpy-指数分布实例详解
Dec 07 Python
Python之字典添加元素的几种方法
Sep 30 Python
Python如何telnet到网络设备
Feb 18 Python
总结Python变量的相关知识
Jun 28 Python
Python学习之包与模块详解
Python requests用法和django后台处理详解
Mar 19 #Python
Python实现Hash算法
Mar 18 #Python
python实现会员信息管理系统(List)
Mar 18 #Python
Python实现归一化算法详情
Mar 18 #Python
python实现会员管理系统
Mar 18 #Python
Python内置数据类型中的集合详解
You might like
PHP经典的给图片加水印程序
2006/12/06 PHP
php和jquery实现地图区域数据统计展示数据示例
2014/02/12 PHP
Yii 2.0中场景的使用教程
2017/06/02 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
javascript如何实现暂停功能
2015/11/06 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
javascript作用域、作用域链(菜鸟必看)
2016/06/16 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
angular1配合gulp和bower的使用教程
2018/01/19 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
深入浅析vue全局环境变量和模式
2020/04/28 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
Python中的asyncio代码详解
2019/06/10 Python
pandas实现to_sql将DataFrame保存到数据库中
2019/07/03 Python
python3读取图片并灰度化图片的四种方法(OpenCV、PIL.Image、TensorFlow方法)总结
2019/07/04 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
python 如何将office文件转换为PDF
2020/09/22 Python
Python hashlib模块的使用示例
2020/10/09 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
Daisy London官网:英国最大的首饰集团IBB旗下
2019/02/28 全球购物
迪斯尼假期(欧洲、中东及非洲):Disney Holidays EMEA
2021/02/15 全球购物
面向对象编程的优势是什么
2015/12/17 面试题
高三英语教学反思
2014/01/13 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
创先争优演讲稿
2014/09/15 职场文书
2014年个人售房协议书
2014/10/30 职场文书
求职自我评价范文
2015/03/09 职场文书
党员干部学法用法心得体会
2016/01/21 职场文书