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 yield使用方法示例
Dec 04 Python
一个小示例告诉你Python语言的优雅之处
Jul 04 Python
Python字符串和文件操作常用函数分析
Apr 08 Python
在Django中限制已登录用户的访问的方法
Jul 23 Python
详解python之多进程和进程池(Processing库)
Jun 09 Python
对dataframe进行列相加,行相加的实例
Jun 08 Python
Python彻底删除文件夹及其子文件方式
Dec 23 Python
tensorflow实现测试时读取任意指定的check point的网络参数
Jan 21 Python
Python matplotlib可视化实例解析
Jun 01 Python
Python常驻任务实现接收外界参数代码解析
Jul 21 Python
Python引入多个模块及包的概念过程解析
Sep 21 Python
Python爬虫如何破解JS加密的Cookie
Nov 19 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中目录操作opendir()、readdir()及scandir()用法示例
2019/06/08 PHP
js键盘事件的keyCode
2014/07/29 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
Nodejs初级阶段之express
2015/11/23 NodeJs
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
浅谈JavaScript对象与继承
2016/07/10 Javascript
微信小程序 选择器(时间,日期,地区)实例详解
2016/11/16 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
js实现登录与注册界面
2017/11/01 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
JS实现分页导航效果
2020/02/19 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
python创建和删除目录的方法
2015/04/29 Python
Python MD5加密实例详解
2017/08/02 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
Python进行统计建模
2020/08/10 Python
HTML5中form如何关闭自动完成功能的方法
2018/07/02 HTML / CSS
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
jurlique茱莉蔻英国官网:澳洲天然护肤品
2018/08/03 全球购物
下述程序的作用是计算机数组中的最大元素值及其下标
2012/11/26 面试题
《白鹅》教学反思
2014/04/13 职场文书
课例研修方案
2014/05/31 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
社区五一劳动节活动总结
2015/02/09 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
教师理论学习心得体会
2016/01/21 职场文书
python实现语音常用度量方法的代码详解
2021/05/25 Python
python迷宫问题深度优先遍历实例
2021/06/20 Python
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js