程序员的冷笑话 python版本
在伯乐在线上看到了个冷笑话,感觉很有意思。
void tellStory()
{
printf("从前有座山\n");
printf("山上有座庙\n");
printf("庙里有个老和尚和一个小和尚\n");
printf("有一天\n");
printf("小和尚对老和尚说\n");
printf("\"给我讲个故事吧\"\n");
printf("于是, 老和尚说: \n");
tellStory();
}
原代码是C写的,试着转换成了python:
#!/bin/env
# encoding: utf-8 def tellStory(cnt):
print "从前有座山\n"
print "山上有座庙\n"
print "庙里有个老和尚和一个小和尚\n"
print "有一天\n"
print "小和尚对老和尚说\n"
print "\"给我讲个故事吧\"\n"
print "于是, 老和尚说: \n"
print "-----------\n在%s年前\n" % cnt
cnt += 2
tellStory(cnt) if __name__ == '__main__':
tellStory(1)
不过由于python编译器对递归最大嵌套层数的限制,这个版本执行的并不理想,于是几经google有了以下版本:
#!/bin/env
# encoding: utf-8 from sys import maxint def tellStory(cnt):
rtn_str = ''
rtn_str += "从前有座山\n"
rtn_str += "山上有座庙\n"
rtn_str += "庙里有个老和尚和一个小和尚\n"
rtn_str += "有一天\n"
rtn_str += "小和尚对老和尚说\n"
rtn_str += "\"给我讲个故事吧\"\n"
rtn_str += "于是, 老和尚说: \n"
rtn_str += "-----------\n在%s年前\n" % cnt
yield rtn_str if __name__ == '__main__':
for i in xrange(1, maxint, 2):
for e in tellStory(i):
print e
使用yield+xrange代替print+range,避免出现中间变量过大导致的MemoryError。
这个版本会无限执行下去,直到达到py的最大整数"9223372036854775807"或系统内存不足。
总结:
1、Python中++运算符作用与其他语言有很大不同:
>>> i = 1
>>> ++i
1
>>> i++
File "<stdin>", line 1
i++
^
SyntaxError: invalid syntax
>>>
要实现自加或自减运算,最好使用+=或-=。
2、Python中range方法会直接生成一个list供遍历或其他操作,而xrange的工作方式类似使用了yield的生成器,每次调用时计算一个值返回。因此在遍历时,xrange的性能要优于range,特别是数据量巨大的情况下。
程序员的冷笑话 python版本的更多相关文章
- C程序员眼里的Python
注释 Phython的注释和C语言非常不同,第一种 #开头的注释,类似于C的//开头,而"""对 包围注释,类似于C的/* */,以及xml类的<!-- -- ...
- [python]通过微信公众号“Python程序员”,编写python代码
今天发现微信公众号中,居然可以编写python代码,很是惊喜,觉得蛮有趣的. 步骤如下: 1.关注微信公众号“Python程序员” 2.关注成功后,点击右下角的“潘多拉”->"Pyth ...
- 资深程序员:学Python我推荐你用这几款编辑器
Python使用什么编辑比较好,Python编辑器推荐 各位 Pythoner 好啊!在这个烦躁的时代,相聚就是缘分,很高兴各位 Pythoner 能相聚于此,希望接下来的路,我们一起走下去,使用 P ...
- java程序员快速掌握python系列——概述
这一系列主要是总结学习python过程中的方方面面(已经学完,时间大概是一周左右).当然限于个人水平java也就是够用,python短时间内也不可能深入到哪里去.所以这次的分享的目的是能够快速使用py ...
- 给Lisp程序员的Python简介
给Lisp程序员的Python简介 作者:Peter Norvig,译者:jineslong<zzljlu@gmail.com> 这是一篇为Lisp程序员写的Python简介(一些Pyth ...
- Python/Java程序员面试必备常用问题解析与答案
转自AI算法联盟,理解python技术问题,以及一些常见的java面试中经常遇到的问题,这些面试问题分为四类: 是什么(what) 如何做(how) 说区别/谈优势(difference) 实践操作( ...
- 30个有关Python的小技巧,给程序员的 30 个基本 Python 贴士与技巧
30个有关Python的小技巧 2013/07/04 · Python, 开发 · 4 评论 · Python 分享到: 66 本文由 伯乐在线 - Kevin Sun 翻译.未经许可,禁止转载!英文 ...
- Python超级程序员使用的开发工具
我以个人的身份采访了几个顶尖的Python程序员,问了他们以下5个简单的问题: 当前你的主要开发任务是什么? 你在项目中使用的电脑是怎样的? 你使用什么IDE开发? 你将来的计划是什么? 有什么给Py ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(三)
声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群5 ...
随机推荐
- HDU 3292 【佩尔方程求解 && 矩阵快速幂】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=3292 No more tricks, Mr Nanguo Time Limit: 3000/1000 M ...
- mybatis框架的核心配置Mapper.xml
映射管理器resultMap:映射管理器,是Mybatis中最强大的工具,使用其可以进行实体类之间的关系,并管理结果和实体类间的映射关系 需要配置的属性:<resultMap id=" ...
- win7环境中使用notepad++配置python IDE
1, 下载notepad++,并安装 http://notepad-plus-plus.org/download/v6.5.5.html 2, 下载python的win版本,并安装 https://w ...
- <CPP学习 第二天> 字符串的输入 及 String类
今天简单的学习了字符串的输入以及C++的String类. 1.面向行的输入: getline(); getline()函数读取整行,通过回车键输入的换行符来确定输入结尾.要调用这种方法,可以使用cin ...
- chromium之message_pump_win之二
接下来分析 MessagePumpForUI上一篇分析MessagePumpWin,可以参考chromium之message_pump_win之一 根据对MessagePumpWin的分析,Messa ...
- WSO2 API Manager 替换mysql作为数据库,解决AuthorizationUtils Could not set authorizations for the root问题
按照wso2官网(https://docs.wso2.com/display/ADMIN44x/Changing+to+MySQL)配置AM的数据库,想从H2换成Mysql5.7,费了将近一天的时间, ...
- java 计算器算法脚本
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; public String Count(Strin ...
- 利用SoapUI 测试web service的一些问题总结
总结两个利用SoapUI 测试web service的一些问题: 1.请求一个soap service 请求的时候:按照下面的配置输入请求地址后, 2.根据实际service接口的需要,传入相应的参数 ...
- Ajax的open()方法
Ajax的open()方法有3个参数:1.method:2.url:3.boolean: 参数1有get和post两个取值 参数2表示什么就不用说了 重点说下第3个参数:boolean的取值 当该bo ...
- 在WIN7下安装运行mongodb
1).下载MongoDB http://downloads.mongodb.org/win32/mongodb-win32-i386-2.4.5.zip 下载Windows 32-bit版本并解压缩, ...