今天7月8号,恰逢儿子生日,我来画个爱心向他表达一下爱意吧:

>>> print('\n'.join([''.join([('ILoveYangCheng'[(x-y)%len('ILoveYangCheng')] if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0 else' ') for x in range(-30,30)]) for y in range(13,-12,-1)]))oveYangCh           gChengILo               gILoveYangChengIL   YangChengILoveYan           ngILoveYangChengILoveYangChengILoveYangCh         ngILoveYangChengILoveYangChengILoveYangChen        ngILoveYangChengILoveYangChengILoveYangChengI       gILoveYangChengILoveYangChengILoveYangChengIL       ILoveYangChengILoveYangChengILoveYangChengILo       LoveYangChengILoveYangChengILoveYangChengILov       oveYangChengILoveYangChengILoveYangChengILove       veYangChengILoveYangChengILoveYangChengILoveY       YangChengILoveYangChengILoveYangChengILoveY        ngChengILoveYangChengILoveYangChengILoveY         gChengILoveYangChengILoveYangChengILoveYa         engILoveYangChengILoveYangChengILoveY           gILoveYangChengILoveYangChengILoveY            LoveYangChengILoveYangChengILoveY             eYangChengILoveYangChengILove               ngChengILoveYangChengILov                 hengILoveYangChengILo                   ILoveYangChengI                      eYangChen                         gCh                            h                             >>> 

网上流传了很多类似这种“一行代码画爱心”的文章,但大多数都没作深入研究,有的甚至是收费栏目中还有改错代码的,比如 %‘字串实际长度’ 都直接‘%8’。下面,我来对此代码作点解析,告诉小白们爱心到底是怎么画出来的?

探究一:去掉字符串,全部用'.'代替

>>> print('\n'.join([''.join([('.' if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0 else' ') for x in range(-30,30)]) for y in range(13,-12,-1)])).........           .........               .................   .................           .........................................         ...........................................        .............................................       .............................................       .............................................       .............................................       .............................................       .............................................       ...........................................        .........................................         .........................................         .....................................           ...................................            .................................             .............................               .........................                 .....................                   ...............                      .........                         ...                            .                             >>> 

探究二:其实就是心形线的函数式在起作用,换成直线看效果

>>> print('\n'.join([''.join([('.' if y==x+1 else' ') for x in range(-30,30)]) for y in range(15,-15,-1)])).               .                .                 .                  .                   .                    .                     .                      .                       .                        .                         .                          .                           .                            .                             .                              .                               .                                .                                 .                                  .                                   .                                    .                                     .                                      .                                       .                                        .                                         .                                          .                                           .                                            >>> # 直线方程 y = x + 1

直线方程 y = x+1 斜率1的倾角看上去不是45度,是因为x,y的长度比不是1:1。

方程式换成不等式 y > = x + 1 图像就成为一个区域,换个抛物线试试效果:

>>> print('\n'.join([''.join([('.' if y>=0.035*x**2-12 else' ') for x in range(-30,30)]) for y in range(15,-15,-1)])).......................................................  .......................................................  .....................................................   .....................................................   ...................................................    ...................................................    .................................................     ...............................................      ...............................................      .............................................       .............................................       ...........................................        .........................................         .......................................          .......................................          .....................................           ...................................            .................................             .................................             ...............................              .............................               ...........................                .......................                  .....................                   ...................                    ...............                      ...........                        .                             >>> 抛物线内部区域: y >= 0.035 x² - 12

探究三:换个心形方程式

网上随便搜索了一张心形方程式的图片:

方程x,y的取值范围有点小,可以先放大10倍: 0.01*x*x+(0.1*y-pow(0.01*x*x,1/3))**2-1=0

由于纵横比不为1,再适当调整各个系数的大小;还有我们的坐标系是整数点,想和直线方程一样显示边界点不太现实,所以只能以 f(x,y)<=0的形式显示图形区域。若<=换成>=,则相当于图章的阳刻和阴刻的区别。

>>> print('\n'.join([''.join([('HannYang'[(x+y+78)%8] if 0.003*x*x+(0.075*y-pow(0.0015*x*x,1/3))**2-0.6<=0 else' ') for x in range(-30,30)]) for y in range(15,-12,-1)]))annYang         annYang                  gHannYangH     ngHannYang                 angHannYangH   YangHannYang                YangHannYangH nnYangHannYan                nnYangHannYangHannYangHannYan               annYangHannYangHannYangHannYa               HannYangHannYangHannYangHannY               HannYangHannYangHannYangHan                gHannYangHannYangHannYangHa                ngHannYangHannYangHannYangH                ngHannYangHannYangHannYan                 angHannYangHannYangHannYa                 angHannYangHannYangHann                  angHannYangHannYangHa                   YangHannYangHannYangH                   YangHannYangHannYan                    YangHannYangHannY                     YangHannYangHan                      YangHannYangH                       YangHannYan                        YangHannY                         angHa                           ang                            a                             Y                             >>> #字符串的索引号表达式也可以修改:str[(表达式)&len(str)]
print('\n'.join([''.join([('HannYang'[x%8-2] if 0.003*x*x+(0.075*y-pow(0.0015*x*x,1/3))**2-0.6>=0 else' ') for x in range(-30,30)]) for y in range(16,-12,-1)]))
HannYangHannYangHannYangHannYangHannYangHannYangHannYangHann
HannYangHannYangHannYangHannYangHannYangHannYangHannYangHann
HannYangHannYangHan       nnYangHan       nnYangHannYangHann
HannYangHannYangHa          YangH          nYangHannYangHann
HannYangHannYangH            ang            YangHannYangHann
HannYangHannYangH             n             YangHannYangHann
HannYangHannYang                             angHannYangHann
HannYangHannYang                             angHannYangHann
HannYangHannYang                             angHannYangHann
HannYangHannYangH                           YangHannYangHann
HannYangHannYangH                           YangHannYangHann
HannYangHannYangH                           YangHannYangHann
HannYangHannYangHa                         nYangHannYangHann
HannYangHannYangHa                         nYangHannYangHann
HannYangHannYangHan                       nnYangHannYangHann
HannYangHannYangHann                     annYangHannYangHann
HannYangHannYangHann                     annYangHannYangHann
HannYangHannYangHannY                   HannYangHannYangHann
HannYangHannYangHannYa                 gHannYangHannYangHann
HannYangHannYangHannYan               ngHannYangHannYangHann
HannYangHannYangHannYang             angHannYangHannYangHann
HannYangHannYangHannYangH           YangHannYangHannYangHann
HannYangHannYangHannYangHa         nYangHannYangHannYangHann
HannYangHannYangHannYangHann     annYangHannYangHannYangHann
HannYangHannYangHannYangHannY   HannYangHannYangHannYangHann
HannYangHannYangHannYangHannYa gHannYangHannYangHannYangHann
HannYangHannYangHannYangHannYa gHannYangHannYangHannYangHann
HannYangHannYangHannYangHannYangHannYangHannYangHannYangHann
>>> 

探究四:字符串换成中文汉字
需要把 else 后的填充空格换成2个半角空格或1个全角空格

>>> print('\n'.join([''.join([('我爱杨程'[(x-y)%4-3] if((x*0.08)**2+(y*0.1)**2-1)**3-(x*0.08)**2*(y*0.1)**3<=0 else ' ') for x in range(-20,20)]) for y in range(13,-12,-1)]))我爱杨程我爱       爱杨程我爱杨          程我爱杨程我爱杨程我   我爱杨程我爱杨程我爱        程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程       程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱      我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨      我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我     爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱     杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨     程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程     爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程      杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我      程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱      爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱       程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱        我爱杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨        杨程我爱杨程我爱杨程我爱杨程我爱杨程我爱杨         我爱杨程我爱杨程我爱杨程我爱杨程我爱杨          程我爱杨程我爱杨程我爱杨程我爱            爱杨程我爱杨程我爱杨程我爱             我爱杨程我爱杨程我               程我爱杨程                 爱杨程                  程                   >>> 

如此,掌握了原理,就去网上找各种方程式来创作你自己的图形吧!大胆去向心爱的人表白吧!!

Python 探究“一行代码画爱心”的秘密,去向心爱的人表白吧相关推荐

  1. 用python一行代码画爱心

    用python一行代码画出爱心 print('\n'.join([''.join([('LoveSongxiaolong'[(x-y)%8]if((x*0.05)**2+(y*0.1)**2-1)** ...

  2. python用一行代码画个迷宫_用 Python 制作一个迷宫游戏

    相信大家都玩过迷宫的游戏,对于简单的迷宫,我们可以一眼就看出通路,但是对于复杂的迷宫,可能要仔细寻找好久,甚至耗费数天,然后可能还要分别从入口和出口两头寻找才能找的到通路,甚至也可能找不到通路. 虽然 ...

  3. python用一行代码画个迷宫_[代码全屏查看]-用turtle不断的画回字迷宫

    [2].[文件] 画个回字(最原始方法).py ~ 3KB    下载(4) #coding=UTF8 from turtle import * import turtle, time # 绘制正方形 ...

  4. python画爱心原理_程序员式优雅表白,教你用python代码画爱心

    还能用python代码画爱心?还有这种操作?这是什么原理? 不相信python代码可以画爱心?先来一张效果图来看看效果吧!PyCharm pro Mac-PyCharm pro for Mac( Py ...

  5. python程序 爱意_程序员式优雅表白,教你用python代码画爱心

    还能用python代码画爱心?还有这种操作?这是什么原理? 不相信python代码可以画爱心?先来一张效果图来看看效果吧!PyCharm pro Mac-PyCharm pro for Mac( Py ...

  6. python代码画皮卡丘_程序员式优雅表白,教你用python代码画爱心

    还能用python代码画爱心?还有这种操作?这是什么原理? 不相信python代码可以画爱心?先来一张效果图来看看效果吧! PyCharm pro Mac-PyCharm pro for Mac( P ...

  7. python爱心代码_「含蓄优雅表白神器」程序员式用python代码画爱心(附详细教程)...

    还能用python代码画爱心?还有这种操作?这是什么原理? 不相信python代码可以画爱心?先来一张效果图来看看效果吧! 用python代码画爱心的思路是怎样的? 1.怎么画心形曲线 2.怎么填满心 ...

  8. 如何用python画爱心表白_程序员式优雅表白,教你用python代码画爱心

    还能用python代码画爱心?还有这种操作?这是什么原理? 不相信python代码可以画爱心?先来一张效果图来看看效果吧! 用python代码画爱心的思路是怎样的? 1.怎么画心形曲线 2.怎么填满心 ...

  9. python画爱心原理_七夕倒计时,程序员式优雅表白,教你用python代码画爱心

    还能用python代码画爱心?还有这种操作?这是什么原理? 不相信python代码可以画爱心?先来一张效果图来看看效果吧! 用python代码画爱心的思路是怎样的? 1.怎么画心形曲线 2.怎么填满心 ...

最新文章

  1. AndroidStudio中更新到最新版本后仍然提示:This version of the Android Support plugin for IntelliJ IDEA (or Android
  2. 【Python】用于在 Python 中处理 PDF 文件的 PyPDF2 库
  3. c++ string 长度限制_String 有多长?
  4. 【转摘留用】页面静态化..
  5. 如何通过url访问的方式获取HANA report的元数据metadata
  6. fastai学习——第一个bug
  7. 4种Spring Boot 实现通用 Auth 认证方式
  8. C++之继承探究(八):动态绑定
  9. scala编程第16章学习笔记(3)——List类的高阶方法
  10. 【RobotStudio学习笔记】(八)速度设置
  11. 三星手机怎么把html,三星手机怎么连接电脑 只要四步轻松搞定【图文】
  12. wince6.0 OK6410 启动NandFlash路径下的程序快捷键
  13. Jquery表单清空
  14. 大学报到前最后的技术——VMware探究
  15. 使用观察者模式进行短信通知、预警日志记录
  16. 腾讯统一播放器 API 文档2.0
  17. 【重识云原生】第六章容器基础6.4.7.2节——CronJob
  18. aspcms修改数据报错问题
  19. 如何用chrome浏览器 开发插件 自动答题 自动抢票 自动选课
  20. 简洁的HTML5和CSS3免费企业网站模板源码下载

热门文章

  1. java tlab_「原创」JVM系列05|TLAB上分配
  2. 5分钟学会神器frp内网穿透
  3. 共享万物互联新生态 2017第二届eSIM技术与创新峰会圆满落幕
  4. V语言环境部署教程-linux
  5. 模拟黑洞图像_解密真正的黑洞模样!终于不再是模拟照片,这次是玩真的!
  6. 华硕 键盘 快捷键-切换 无法输入中文符号
  7. ViCANdo新版本发布(PART1) | 点云库(PCL)集成
  8. K8S 报错Failed to inspect image “calico/pod2daemon-flexvol:v3.8.2“
  9. 编写一个程序,实现设置上月、本月电表读数,显示上月、本月电表读数,计算并显示本月用电数。
  10. SSM博雅学校教务管理系统 计算机毕设源码86203