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 相关文章推荐
python3制作捧腹网段子页爬虫
Feb 12 Python
python编程线性回归代码示例
Dec 07 Python
Python中生成器和迭代器的区别详解
Feb 10 Python
Python读取mat文件,并转为csv文件的实例
Jul 04 Python
详解Django中CBV(Class Base Views)模型源码分析
Feb 25 Python
Python assert语句的简单使用示例
Jul 28 Python
Python动态声明变量赋值代码实例
Dec 30 Python
python批量处理txt文件的实例代码
Jan 13 Python
tensorflow estimator 使用hook实现finetune方式
Jan 21 Python
基于Python数据结构之递归与回溯搜索
Feb 26 Python
Python基于QQ邮箱实现SSL发送
Apr 26 Python
Python3中FuzzyWuzzy库实例用法
Nov 18 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内存管理之谁动了我的内存
2013/06/20 PHP
浅析Dos下运行php.exe,出现没有找到php_mbstring.dll 错误的解决方法
2013/06/29 PHP
firefox中JS读取XML文件
2006/12/21 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
JQuery中Ajax的操作完整例子
2017/03/07 Javascript
JavaScript中重名的函数与对象示例详析
2017/09/28 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
jquery实现上传图片功能
2020/06/29 jQuery
JavaScript 实现继承的几种方式
2021/02/19 Javascript
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
Python 的描述符 descriptor详解
2016/02/27 Python
Python的re模块正则表达式操作
2016/05/25 Python
使用Python实现简单的服务器功能
2017/08/25 Python
python实现xlsx文件分析详解
2018/01/02 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
python 实现矩阵上下/左右翻转,转置的示例
2019/01/23 Python
PyTorch的深度学习入门之PyTorch安装和配置
2019/06/27 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
python自动点赞功能的实现思路
2020/02/26 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
python中Mako库实例用法
2020/12/31 Python
html+css实现自定义图片上传按钮功能
2019/09/04 HTML / CSS
技术副厂长岗位职责
2013/12/26 职场文书
三问三解心得体会
2014/09/05 职场文书
2014教师个人自我评价范文
2014/09/13 职场文书
关于运动会广播稿300字
2014/10/05 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
珍爱生命主题班会
2015/08/13 职场文书
检讨书范文
2019/04/16 职场文书
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python
Python Pygame实战之塔防游戏的实现
2022/03/17 Python