新浪微博

博客列表

“缸中之脑”
发表于:2014-05-19 19:31:06 | 分类:像命令行一样玩python
浏览( ) | 评论( )

“一个人(可以假设是你自己)被邪恶科学家施行了手术,他的脑被从身体上切了下来,放进一个盛有维持脑存活营养液的缸中。脑的神经末梢连接在计算机上,这台计算机按照程序向脑传送信息,以使他保持一切完全正常的幻觉。对于他来说,似乎人、物体、天空还都存在,自身的运动、身体感觉都可以输入。这个脑还可以被输入或截取记忆(截取掉大脑手术的记忆,然后输入他可能经历的各种环境、日常生活)。他甚至可以被输入代码,‘感觉’到他自己正在这里阅读一段有趣而荒唐的文字。那么问题来了——“你如何担保你自己不是在这种困境之中?”上边这个问题被称为 “缸中之脑”,是希拉里·普特南(Hilary Putnam)1981年在他的《理性,真理和历史》(Reason, Truth, and History)一书中阐述的假想。随着脑电波芯片、收集生物能发电等技术逐渐从科幻作品变成了现实,很难说有一天是否真的会出现,也许我们现在就像黑客帝国里的场景一样,泡在营养液里呢?据说有一种对 “缸中之脑”

FizzBuzzWhizz
发表于:2014-05-04 19:19:48 | 分类:像命令行一样玩python
浏览( ) | 评论( )

今天演示一道题,直接贴答案,算是对前面内容的总结性应用:FizzBuzzWhizz你是一名体育老师,在某次课距离下课还有五分钟时,你决定搞一个游戏。此时有100名学生在上课。游戏的规则是:1. 你首先说出三个不同的特殊数,要求必须是个位数,比如3、5、7。2. 让所有学生拍成一队,然后按顺序报数。3. 学生报数时,如果所报数字是第一个特殊数(3)的倍数,那么不能说该数字,而要说Fizz;如果所报数字是第二个特殊数(5)的倍数,那么要说Buzz;如果所报数字是第三个特殊数(7)的倍数,那么要说Whizz。4. 学生报数时,如果所报数字同时是两个特殊数的倍数情况下,也要特殊处理,比如第一个特殊数和第二个特殊数的倍数,那么不能说该数字,而是要说FizzBuzz, 以此类推。如果同时是三个特殊数的倍数,那么要说FizzBuzzWhizz。5. 学生报数时,如果所报数字包含了第一个特殊数,那么也不能说该数字,而是要说相应的单词,比如本例中第一个特殊数是3,那么要报13的同学应该说Fizz。如果数字中包含了第一个特殊数,那么忽略规则3和规则4,比如要报35的同学只报Fizz,不报BuzzWhizz。 解法:一般

关于“To be, or not to be”的一个小话题(下)
发表于:2014-04-29 14:14:27 | 分类:像命令行一样玩python
浏览( ) | 评论( )

 昨天,关于“To be, or not to be”的一个小话题(上) ,也就是“选择”这个结构因为时间的关系刚开始说就中止了,今天继续。昨天说的利用list的filter语法(['b' for x in [1] if 1==2])来实现选择分支的方式有个先天缺陷就是臃肿——毕竟其中for x in [1] if的部分是重复的。如果能像c语言的问号表达式一样,才称得上是漂亮的解决方案。不过这里我们先把这个美丽的设想放下,从另一个角度说起。不像大多数支持结构化程序设计思想的语言,python里没有switch-case结构。如果你对此耿耿于怀的话,相信下面这段手册中关于if语句的语法结构定义一定不陌生: if_stmt ::= "if" expression ":" suite    

关于“To be, or not to be”的一个小话题(上)
发表于:2014-04-28 11:20:44 | 分类:像命令行一样玩python
浏览( ) | 评论( )

 To be, or not to be: that is the question:    Whether 'tis nobler in the mind to sufferThe slings and arrows of outrageous fortune,Or to take arms against a sea of troubles,And by opposing end them? To die: to sleep;No more; and by a sleep to say we endThe heart-ache and the thousand natural shocksThat flesh is heir to, 'tis a consummationDevoutly to be wish'd. To die, to sleep;To sleep: perchance to dream: ay, there's the rub;For in that sleep of death what dreams may comeWhen we

“我思故我在”——赋值是个大问题
发表于:2014-04-21 15:15:03 | 分类:像命令行一样玩python
浏览( ) | 评论( )

上中学的时候学到笛卡尔是唯心论者,还知道他有一句名言“我思故我在”,但当时并不知道“我思故我在”不是一句唯心的理论——其本意是“我无法否认自己的存在,因为当我否认、怀疑时,我就已经存在”。换句话说,思考要以思考者的存在为前提,因此“能够思考”就已经确立了“我”的存在。在python语言里,创建一个名为a的变量非常容易,既不需要规定a的类型,也不用限定a的命名空间,只要简单的写“a=表达式”就可以了。但是这个很方便的特性到了“一行python实现功能”这个命题下,还是不够方便——python不像c可以把赋值过程当成一个表达式,也就是说,如果写“(a=10,a)[1]",不会返回10,而是会爆出一个”invalid syntax“错误。python变量,现在既要你”思“,更要你”在“,这便如何是好捏?首先想到

从结构化程序设计方法下手
发表于:2014-04-14 16:44:16 | 分类:像命令行一样玩python
浏览( ) | 评论( )

前文所述的一些程序实例,虽然确实可以完成某一特定功能,但是还不能做到系统、全面的保证任意一段程序都可以用一行python实现。为了达到理论上的完备这一目标,博主决定按照“结构化程序设计方法”进行系统的整理。“结构化程序设计方法”,据度娘的解释是这样滴——  结构化程序设计(structured programming)是进行以模块功能和处理过程设计为主的详细设计的基本原则。其概念最早由迪克斯特拉(E.W.Dijikstra)在1965年提出的,是软件发展的一个重要的里程碑。它的主要观点是采用自顶向下、逐步求精的过程的功能程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。是以模块化设计为中心,将待开发的软件系统划分为若干个相互独立的模块,这样使完成每一个模块的工作变单纯而明确,为设计一些较大的软件打下了良好的基础。我们把其中软件工程的思想忽略,专注于程序设计过程的实现,就可以注意到结构化程序设计方法“使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造&r

map、reduce、lambda能做神马?
发表于:2014-04-08 10:22:36 | 分类:像命令行一样玩python
浏览( ) | 评论( )

据wiki(http://zh.wikipedia.org/wiki/MapReduce)记载“MapReduce是Google提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。概念“Map(映射)”和“Reduce(化简)”,及他们的主要思想,都是从函数式编程语言借来的,还有从矢量编程语言借来的特性。当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(化简)函数,用来保证所有映射的键值对中的每一个共享相同的键组。”(google的报告在这里http://research.google.com/archive/mapreduce.html)。这段话说的有点抽象,我们可以简略的理解为map是对一组数据做相同的操作,比如对一个一维数组的每一项加一;而reduce是把一组数据用相同的规则合并,比如把求一维数组的各项和就是每一项的值都加起来。说到map、reduce就不得不提lambda,这个是用来定义匿名函数的,比如“lambda x,y:x+y”就定义了

新手切记:python域名是org结尾
发表于:2014-04-02 18:30:32 | 分类:像命令行一样玩python
浏览( ) | 评论( )

上边这个就是传说中的python语言的标志,官网是 https://www.python.org/,现在可以轻松的打开并下载,不过在历史上曾经有一段时间由于其域名后缀不为众所周知,导致被众所周知的原因影响,结果就是~打不开。这段往事可以当作寓言,用来提醒拿域名不当回事的朋友——看看python,就是因为没把.com这个坑占上,让一成人网站用了去,好多新童鞋打开之后都不好意思了。你看那谁和那谁,俩人红着脸都不好意思得有半个多钟头了……万幸后来那个和pythong.org就差3个字母的网站关张了,那会儿我在泡一个QQ群,为这事还在群里呼吁小小庆祝了一下。话说那个群的入门规矩很有特色——答题。只有一种题型,形式基本上一样:用一行代码完成xxxx功能,只是难度不同,从1星一直到5星。用一行代码做事,听上去与python语言所宣扬的优雅毫不相关。但请想像一下,在控制台环境下先打开编辑软件写一上一段,然后再进入命令行运行,没准运行后还要删掉文件以保证环境的清洁……不仅麻烦,有些时候还不容你这么干。所以在命令行