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和IPython中使用Docker
Apr 28 Python
Python使用turtule画五角星的方法
Jul 09 Python
Python 查看文件的读写权限方法
Jan 23 Python
python计算两个数的百分比方法
Jun 29 Python
python之super的使用小结
Aug 13 Python
django admin组件使用方法详解
Jul 19 Python
python检测服务器端口代码实例
Aug 31 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
Jan 08 Python
Django中modelform组件实例用法总结
Feb 10 Python
Eclipse配置python默认头过程图解
Apr 26 Python
Python求解排列中的逆序数个数实例
May 03 Python
Python tkinter制作单机五子棋游戏
Sep 14 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通用分页类page.php[仿google分页]
2008/08/31 PHP
一个简单的网页密码登陆php代码
2012/07/17 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
PHP设计模式之状态模式定义与用法详解
2018/04/02 PHP
php无限级评论嵌套实现代码
2018/04/18 PHP
新鲜出炉的js tips提示效果
2011/04/03 Javascript
JavaScript自执行闭包的小例子
2013/06/29 Javascript
javascript进行四舍五入方法汇总
2014/12/16 Javascript
JS实现向表格中动态添加行的方法
2015/03/30 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
浅谈js中的in-for循环
2016/06/28 Javascript
web打印小结
2017/01/11 Javascript
基于vue实现分页/翻页组件paginator示例
2017/03/09 Javascript
JS实现的合并多个数组去重算法示例
2018/04/11 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
详解element上传组件before-remove钩子问题解决
2020/04/08 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
Python格式化压缩后的JS文件的方法
2015/03/05 Python
以一段代码为实例快速入门Python2.7
2015/03/31 Python
python生成ppt的方法
2018/06/07 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
浅谈django不使用restframework自定义接口与使用的区别
2020/07/15 Python
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
英国工具中心:UK Tool Centre
2017/07/10 全球购物
Waterford英国官方网站:世界上最受欢迎的优质水晶品牌
2019/08/17 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
预备党员入党思想汇报
2014/01/04 职场文书
给酒店员工的表扬信
2014/01/11 职场文书
2015年房地产销售工作总结
2015/04/20 职场文书
休假证明书
2015/06/24 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书
vue引入Excel表格插件的方法
2021/04/28 Vue.js
微信小程序实现录音Record功能
2021/05/09 Javascript
redis实现的四种常见限流策略
2021/06/18 Redis
一文搞懂PHP中的抽象类和接口
2022/05/25 PHP