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 相关文章推荐
django反向解析和正向解析的方式
Jun 05 Python
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
python 文本单词提取和词频统计的实例
Dec 22 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
Python中那些 Pythonic的写法详解
Jul 02 Python
基于python全局设置id 自动化测试元素定位过程解析
Sep 04 Python
Python pygame绘制文字制作滚动文字过程解析
Dec 12 Python
基于python实现计算且附带进度条代码实例
Mar 31 Python
django迁移文件migrations的实现
Mar 31 Python
10个python爬虫入门实例(小结)
Nov 01 Python
python自动化操作之动态验证码、滑动验证码的降噪和识别
Aug 30 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
通过html表格发电子邮件
2006/10/09 PHP
php代码审计比较有意思的例子
2014/05/07 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
菜鸟javascript基础整理1
2010/12/06 Javascript
jQuery+html5实现div弹出层并遮罩背景
2015/04/15 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
正则 js分转元带千分符号详解
2017/03/08 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
vue实现页面加载动画效果
2017/09/19 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
vue watch关于对象内的属性监听
2019/04/22 Javascript
js获取浏览器地址(获取第1个斜杠后的内容)
2019/09/03 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
编写v-for循环的技巧汇总
2020/12/01 Javascript
JavaScript实现切换多张图片
2021/01/27 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
django模型中的字段和model名显示为中文小技巧分享
2014/11/18 Python
Python爬虫——爬取豆瓣电影Top250代码实例
2019/04/17 Python
Python绘制组合图的示例
2020/09/18 Python
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
Audible英国:有声读物,30天免费试用
2019/10/16 全球购物
给孩子的新年寄语
2014/04/08 职场文书
小学生学习雷锋倡议书
2014/05/15 职场文书
小学数学教学经验交流材料
2014/05/22 职场文书
企业环保标语
2014/06/10 职场文书
公司应聘求职信
2014/06/21 职场文书
亮剑精神观后感
2015/06/05 职场文书
公司管理制度范本
2015/08/03 职场文书
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python
MYSQL常用函数介绍
2022/05/05 MySQL