美文网首页视觉艺术
如何理解python一行代码实现一个爱心字符画?

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

作者: 叶子陪你玩 | 来源:发表于2020-04-24 15:19 被阅读0次

    前言

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

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

    三元表达式理解

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

    image

    列表生成式理解

    image

    原理分析

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

    image

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

    image

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

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

    求解边界范围

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

    image image

    绘制散点图

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

    image image image

    理解

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

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

    image image

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

    image

    打印爱心字符图形

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

    image

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

    image

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

    image

    解开疑惑

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

    (全文完)


    长按二维码,加关注!叶子陪你玩

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

    相关文章

      网友评论

        本文标题:如何理解python一行代码实现一个爱心字符画?

        本文链接:https://www.haomeiwen.com/subject/iazpmhtx.html