谁说使用Python你就写不出混乱的代码?
浏览:4541次 出处信息
谁说使用Python你就写不出混乱的代码?
下面这段Python代码是用来生成一些彭罗斯铺砖图案的。不错,这是段可运行的Python代码:
_ =\\ """if! 1:"e,V=100 0,(0j-1)**-.2; v,S=.5/ V.real, [(0,0,4 *e,4*e* V)];w=1 -v"def! E(T,A, B,C):P ,Q,R=B*w+ A*v,B*w+C *v,A*w+B*v;retur n[(1,Q,C,A),(1,P ,Q,B),(0,Q,P,A)]*T+[(0,C ,R,B),(1,R,C,A)]*(1-T)"f or!i!in!_[:11]:S =sum([E (*x)for !x!in!S],[])"imp ort!cair o!as!O; s=O.Ima geSurfac e(1,e,e) ;c=O.Con text(s); M,L,G=c. move_to ,c.line_to,c.s et_sour ce_rgb a"def!z(f,a) :f(-a. imag,a. real-e-e)"for!T,A,B,C!in[i !for!i! in!S!if!i[""";exec(reduce(lambda x,i:x.replace(chr (i),"\\n "[34-i:]), range( 35),_+"""0]]:z(M,A );z(L,B);z (L,C); c.close_pa th()"G (.4,.3 ,1);c. paint( );G(.7 ,.7,1) ;c.fil l()"fo r!i!in !range (9):"! g=1-i/ 8;d=i/ 4*g;G(d,d,d, 1-g*.8 )"!def !y(f,a):z(f,a+(1+2j)*( 1j**(i /2.))*g)"!for!T,A,B,C!in!S:y(M,C);y(L,A);y(M ,A);y(L,B)"!c.st roke()"s.write_t o_png(\'pen rose.png\') """ ))
当这段代码运行时,它会产生一个1000×1000的png格式的彭罗斯铺砖图案,里面包含有大概2212个具有3D浮雕效果的彭罗斯铺砖图。下图是这个图片的一部分:
这个脚本需要Pycairo代码库。它只能运行在Python <= 2.7 版本上;Phthon 3并不支持。最初它是一个很正常的脚本,但经过我的努力,出现了神奇的视觉效果。
彭罗斯铺砖法是个很神奇的东西,它的图案呈不规则周期状分布――你移动角度后都找不到再次重合的图案。它由罗杰・彭罗斯(Sir Roger Penrose)经过无数次的五边形铺拼试验而成。
相对于C和Perl,Python很少被认为是一种容易产生混乱的代码的语言。似乎从来没有人挑战过这种观点,网上也很少找到混乱的Python代码的例子:你可以在Phthon官方问答区里和像这里 和 这里 的一些页面中发现一些。这还有一个在PyCon 2011大会上的谈话。
我相信这是第一个能输出高分辨率图片的混乱的Python代码。如果你还知道一些其它的,请在评论中分享出来!
建议继续学习:
- 配置Nginx+uwsgi更方便地部署python应用 (阅读:105397)
- 如何成为Python高手 (阅读:53404)
- python实现自动登录discuz论坛 (阅读:31589)
- python编程细节──遍历dict的两种方法比较 (阅读:18996)
- 每个程序员都应该学习使用Python或Ruby (阅读:16268)
- 使用python爬虫抓站的一些技巧总结:进阶篇 (阅读:12113)
- 30分钟3300%性能提升――python+memcached网页优化小记 (阅读:12128)
- 我的PHP,Python和Ruby之路 (阅读:11841)
- Python处理MP3的歌词和图片 (阅读:8324)
- 关于使用python开发web应用的几个库总结 (阅读:7440)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:好的程序员做不出好的软件设计
后一篇:机械键盘的一些知识 >>
文章信息
- 作者:Aqee 来源: 外刊IT评论
- 标签: Python
- 发布时间:2011-09-12 22:05:47
建议继续学习
近3天十大热文
- [54] IOS安全–浅谈关于IOS加固的几种方法
- [53] Oracle MTS模式下 进程地址与会话信
- [53] Go Reflect 性能
- [52] 如何拿下简短的域名
- [51] android 开发入门
- [49] 读书笔记-壹百度:百度十年千倍的29条法则
- [48] 图书馆的世界纪录
- [46] 【社会化设计】自我(self)部分――欢迎区
- [38] 程序员技术练级攻略
- [31] 视觉调整-设计师 vs. 逻辑