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实现图片批量剪切示例
Mar 25 Python
跟老齐学Python之数据类型总结
Sep 24 Python
Python中的装饰器用法详解
Jan 14 Python
python通过smpt发送邮件的方法
Apr 30 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
Dec 20 Python
Python实现PS图像调整黑白效果示例
Jan 25 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
Python数据报表之Excel操作模块用法分析
Mar 11 Python
Python实现微信机器人的方法
Sep 06 Python
详解Python 中sys.stdin.readline()的用法
Sep 12 Python
详解Python 最短匹配模式
Jul 29 Python
Python+pyaudio实现音频控制示例详解
Jul 23 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源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
php is_file 判断给定文件名是否为一个正常的文件
2010/05/10 PHP
PHP数组实例总结与说明
2011/08/23 PHP
php实现网站文件批量压缩下载功能
2015/10/28 PHP
jQuery 使用手册(五)
2009/09/23 Javascript
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
基于jquery循环map功能的代码
2011/02/26 Javascript
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
2016/09/17 Javascript
AngularJS ng-style中使用filter
2016/09/21 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
js实现颜色阶梯渐变效果(Gradient算法)
2017/03/21 Javascript
Node接收电子邮件的实例代码
2017/07/21 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
Vue-cli3简单使用(图文步骤)
2019/04/30 Javascript
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
Python的Urllib库的基本使用教程
2015/04/30 Python
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
django 简单实现登录验证给你
2019/11/06 Python
css3.0新属性效果在ie下的解决方案
2010/05/10 HTML / CSS
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
高中生期末评语大全
2014/01/28 职场文书
高中军训感想800字
2014/02/23 职场文书
大学四年个人自我小结
2014/03/05 职场文书
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
起诉状范本
2015/05/20 职场文书
小学体育课教学反思
2016/02/16 职场文书
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript