前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何理解python一行代码实现一个爱心字符画?

如何理解python一行代码实现一个爱心字符画?

作者头像
叶子陪你玩
发布2020-04-24 19:02:40
1.7K0
发布2020-04-24 19:02:40
举报

前言

python中有个很酷的效果,一行代码实现一个爱心字符,虽说是一行代码,但是理解起来还是比较难的,括号太多,并且使用了python的一些快捷小技巧。比如三元表达式,列表生成式,字符串拼接以及一个心形曲线公式:(x2+y2-1)3-x2y3=0。

下面通过分解来理解这行代码,这里主要理解三元表达式,列表生成式,还有就是循环中的数字为什么是-30,30和30,-30。

三元表达式理解

三元表达式其实就是将if else语句一行书写,格式为:result = 为真时的结果 if 判断条件 else 为假时的结果。

列表生成式理解

原理分析

最终结果是一个爱心的字符串形状,实际上先打印出60行和60列的字符串方阵,这里为了演示,先使用了一个字符串。

根据上面的效果可以看出的确是一个字符方阵,如何将这个方阵变成爱心的形状,就需要利用心形曲线公式:(x2+y2-1)3-x2y3=0。这里我们如果小于0 就显示 字符 O,否则就显示 点(.)。

爱心形状出来了,如果想要只保留爱心形状,只需要将外围一圈O写成空字符就可以了。现在还有循环中的数字范围是如何求的不清楚。

这里就涉及到解方程了,求边界的范围。

求解边界范围

通过sympy库,可以直接使用隐函数公式,不用给定一系列点就可以直接绘制出图形来,非常方便,根据图形可以 看出x和y取值范围。

绘制散点图

上面求出的范围非常小,有点没想到,我们通过这个范围去绘制一个散点图试试。

理解

根据结果可以看出的确是一个个点形成的,由于点比较多,显示区间比较小,整体看上去就像一个爱心的效果了。

这里有些方法可能比较难理解,可以结合下面的两张图片理解,它们的作用就是将满足条件的点的x和y坐标分别提取出来,为后面绘图做准备。

如果不好理解,也可以采用下面这个方法,更好理解。

打印爱心字符图形

前面利用散点图的方式,绘制出了一个爱心图形,实际上是由一个个点组成的,如果将点用字符来替代,那么就可以变成字符图形了。这里的arange中的数字间隔0.1,根据你想要的点多少可以调整。

上面的0.1的间隔显得有点细长,让横向的点多一些,就可以变的圆润一点了。

将单个字符改成字符串,利用字符串的索引可以获取到不同的字符,也可以使用随机方法去选取。

解开疑惑

通过上面动手自己实现,可以知道实际上爱心的边界范围,但是单行中确是-30,30,这里是因为它的x和yj乘以了一个比较小的数进行的缩放,从而放大了它的取值范围,原理和我们上面调整arange中的间隔数字大小是一样的。

(全文完)


欢迎转载,转载请注明出处! 欢迎关注公众微信号:叶子陪你玩编程 分享自己的python学习之路

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶子陪你玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 三元表达式理解
  • 列表生成式理解
  • 原理分析
  • 求解边界范围
  • 绘制散点图
    • 理解
    • 打印爱心字符图形
    • 解开疑惑
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档