前言
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学习之路
网友评论