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中使用Tkinter模块创建GUI程序实例
Jan 14 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
Sep 20 Python
python版学生管理系统
Jan 10 Python
Python爬虫实现(伪)球迷速成
Jun 10 Python
python Pexpect 实现输密码 scp 拷贝的方法
Jan 03 Python
python简单验证码识别的实现方法
May 10 Python
Django 静态文件配置过程详解
Jul 23 Python
Python插入Elasticsearch操作方法解析
Jan 19 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
Mar 20 Python
Django中ORM找出内容不为空的数据实例
May 20 Python
python 实现朴素贝叶斯算法的示例
Sep 30 Python
Python列表的索引与切片
Apr 07 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计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
java解析json方法总结
2019/05/16 PHP
Yii框架where查询用法实例分析
2019/10/22 PHP
textContent在Firefox下与innerText等效的属性
2007/05/12 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
JS动态插入并立即执行回调函数的方法
2016/04/21 Javascript
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
让python json encode datetime类型
2010/12/28 Python
Python学习笔记之常用函数及说明
2014/05/23 Python
python查看FTP是否能连接成功的方法
2015/07/30 Python
python中利用xml.dom模块解析xml的方法教程
2017/05/24 Python
Python numpy 点数组去重的实例
2018/04/18 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
python如何实现异步调用函数执行
2019/07/08 Python
python3安装OCR识别库tesserocr过程图解
2020/04/02 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
英国伦敦的睡衣品牌:Asceno
2019/10/06 全球购物
会计电算化专业应届大学生求职信
2013/10/22 职场文书
行政部总经理岗位职责
2014/01/04 职场文书
医药销售自荐书
2014/05/29 职场文书
《将心比心》教学反思
2016/02/23 职场文书