随笔分类 - Python
Python编程点滴
摘要:据说著名的斐波那契数列的起源,是某人(Fibonacci(Bonacci的儿子(都是外号啦)))在爬楼梯的时候突发奇想:N阶的楼梯,一次爬两级,或者一次爬一级,有多少种爬法咧?真是有想法!先哲的智慧让人感叹。废话少说,关于斐波那契数列的介绍,可以参见百度百科:http://baike.baidu.com/view/816.htm通常Fibonacci数列的解法,是递归函数。但是很明显,对于这个问题,递推是明显优于递归的。这里分别给出两种解法,并比较两者的性能:1. 递推解法:1 def recursionFibonacci(num):2 fibonacciList = []3 for i i
阅读全文
摘要:杨辉三角,估计在国内上过奥数班的小朋友们都学习过。关于杨辉三角的介绍,可以参看百度百科:http://baike.baidu.com/view/7804.htm这里给出Python的实现方法,主要是看到C语言的写法,叽叽歪歪,叽叽歪歪,实在忍不了,动手写了一个: 1 NUM = 5 2 3 def printLine(lineList): 4 lineList = [str(tmpNum) for tmpNum in lineList] 5 print("%s%s" % (" " * (NUM - len(lineList)), " "
阅读全文
摘要:上高中的时候借同学的文曲星玩,对hanoi(汉诺塔)游戏爱不释手。但是没有找到规律,总是蒙出来的。后来大学学递归的时候,觉得是听得最认真的一课。连那个胖胖的小C老师,也那么滴可爱和鲜活起来……最近在教递归函数,也拿过来做例子。先废话一下,不知道什么汉诺塔的同学,请参考以下故事:汉诺塔(又称河内塔)问题是印度的一个古老的传说.传说中,开天辟地的神勃拉玛在一个庙里留下了三根金刚石的棒,第一根上面套着64个圆形的金片,最大的一个在底下,其余一个比一个小,依次叠上去,寺院的僧侣依照一个古老的预言,不知疲倦地把它们一个个地从这根棒搬到另一根棒上,规定可利用中间的一根棒作为帮助,但每次只能搬一个,而且大的
阅读全文
摘要:上周看到刘谦在表演“读心术”。表演方式如下:1. 让嘉宾心里默想一个数字,在0-63之间。2. 依次给嘉宾看六张牌,每张牌上有若干个数字(我猜想是32个)。3. 让嘉宾回答,心理默想的数字有没有在扑克牌上。4. 六张牌看完,刘谦写出一个数字,然后让嘉宾说出心里默想的数。5. 吻合,掌声雷动。我看了之后,挺晕的……看来术业有专攻……这么简单的二进制问题,也能拿来做魔术表演。于是写了个程序来模拟刘谦的魔术,变给老婆看…… 1 import sys 2 3 NUM = 6 4 LINE_NUM = 70 5 6 maxMargin = 1 << NUM 7 numList = range
阅读全文
摘要:抽象工厂模式和工厂模式有什么差别呢?问这个问题的人一定没有看过这两种模式的UML图。如果看过图,就非常明白了。唯一的一个区别是:1. 工厂模式用来产生某一种对象(基于同一个基类)2. 抽象工厂模式用来产生某一群对象(每一个对象通常追溯到完全不相干的基类)从实现上来说,工厂类里只有一个CreateObject()方法,抽象工厂类里有多个CreateObject方法(CreateObjectA(), CreateObjectB, CreateObjectC等等,而ObjectA, ObjectB, ObjectC来自于不同的基类)
阅读全文
摘要:观察者模式是一个行为型模式。该模式定义了对象之间一种一对多的依赖关系,当一个对象的状态发生改变时(该对象的成员方法被调用),所有依赖于它的对象都会收到通知,并且自动刷新。该模式广泛应用于MVC框之中,当Model发生变化时,依赖于Model的Views会自动随之更新。Observer模式包含三个部分。1. Subject,事件的发布者,Model2. Observer,事件的订阅者,View3. Client客户端一个比较常见的Observer例子是“猫叫老鼠跑”问题,被广泛用于C#面试之中。这个题目是这样的,需要一个猫对象,多个老鼠对象,一个女主人对象。老鼠对象和女主人对象订阅“猫叫”这个行
阅读全文
摘要:关于笔者对简单工厂模式的分析,可以参考:http://www.cnblogs.com/maodouzi/archive/2010/12/29/1920918.html简单工厂模式的最大缺点,在于:添加一个新的功能类时,简单工厂类需要相应地添加其构造过程。虽然运用某些语言本身的反射和自省机制,可以省却一些改变。但当创建过程越发复杂之后,比如在新类创建之前,需要很多准备工作,而且不同的类,准备过程各个不同。此时,就没有办法再借助反射机制来偷懒,毕竟,反射机制只能根据类名或者方法名,返回相应的类和方法,其它的事,他也干不了。这时候,工厂模式就应运而生。工厂模式和简单工厂模式的区别就在于工厂类。简单工
阅读全文
摘要:简单工厂模式的作用是为了把对象的建立和使用分隔开。具体描述如下:简单工厂模式的代码可以分为三块:1. 第一块是在后台工作的一组类的定义,用于向调用者(客户端)提供服务。2. 第二块是简单工厂类,用于创建第一块中提到的类的对象。3. 第三块是客户端,客户端通过第二块中提到的简单工厂类来创建第一块中提到的类的对象,然后在使用这些类的对象来干活。把代码分开是为了解耦合,最终是为了可扩展。什么是可扩展呢?简单地说,当我需要一个新的类,我首先需要在第一块里加上这个一个类的定义(具体操作是添加一个文件,里面包含我要定义的新类)。然后,我需要在第二块中增加这个类的创建过程。随后,我就可以在客户端消费这个类了
阅读全文
摘要:1. Queue Queue实现了一个线程安全的队列。其中get和put是两个最常用的方法。 get和put方法均有两个参数block和timeout。 先说get,当block为True,若timeout为None(默认),则Queue中没有item即阻塞,直到Queue中有item可取;若timeout为一个数,则阻塞timeout时间,若时间到了仍然没有item,就raise exce...
阅读全文
摘要:去英特尔面试,被无声无息了。据说是headcount取消了,呜呜。发出上机题,供广大程序兄弟参考。题目(上机,一个小时时间):输入一串数字,如:3 3 1 2 3 4 5 6 7 8 9第一个数字表示行数,第二个表示列数,后面的表示矩阵里的值。生成的矩阵如下:1 2 34 5 67 8 9然后按顺时针方向螺旋输出,在上面的例子中,顺序是:1 2 3 6 9 8 7 4 5要求输入输出如下:Inpu...
阅读全文
摘要:我的试验环境:Debian 5.0, Linux Kernel 2.6.30试验代码:import timeimport os, sysdef handleChild(chNum): time.sleep(20) print "Hi, I'm child ", chNum os._exit(0)if __name__ == '__main__': for i in range(5): ...
阅读全文
摘要:原题:有两个序列a,b,大小都为n,序列元素的值任意整形数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小限时十分钟以内尝试解答,coding和debug共用了约1个小时,呵呵,去不了华为了。获取最小差的函数,还可以优化,现在的时间复杂度是n×n,估计可以优化到n×lg(n)网上有一种解答方法,认为最小值是负数,排序之后,截成两段,...
阅读全文
摘要:昨天和飞天舞者讨论静态类型语言和动态类型语言优劣比较的时候,说到Python没有重载机制的问题。后来想想挺有意思的,把思考的经过记录下来,欢迎拍砖。重载(overload)和覆盖(override),在C++,Java,C#等静态类型语言类型语言中,这两个概念同时存在。前者是为了让同一个函数名(方法名)匹配不同的参数(个数不同,类型不同);后者是为了实现多态,在相同名称的函数(方法)和参数,在不同...
阅读全文
摘要:Python里有一个专门处理该类问题的IP类库,来看看:
阅读全文

浙公网安备 33010602011771号