自己使用总结Python程序代码片段 用于记录自己写的,或学习期间看到的不错的,小程序,持续更新...... **************************************************************** 【例001】计算:1-2+3-4..+199-200值 复制代码 代码如下: #encoding=utf-8 #计算 1-2+3-4..+199-200值 #1+3+5+7+...199 #-2-4-6...-200 sum1 = 0 sum2 = 0 for i in range(1,200,2): #计算1+3+5+7...199 sum1 +=i print sum1 for i in range(-200,0,2): #计算-2+(-4)+(-6)...+(-200) sum2 +=i print sum2 print "The total of 1-2+3-4..+199-200 is: ", sum1+sum2 【例002】将两个文件中相同的部分,写到一个文件中 复制代码 代码如下: #encoding=utf-8 #Python 2.7.4 #Purpose: 将文件1.txt,2.txt中相同的内容放到3.txt中; f1 = open("1.txt","r+") f2 = open("2.txt","r+") f3 = open("3.txt","w+") all1 = f1.readlines() #先拿文件1中所有行取出 all2 = f2.readlines() #再拿文件2中所有行取出 f1.close() f2.close() for l1 in all1: for l2 in all2: if l1.strip()==l2.strip(): #比较行中内容是否一样 f3.write(l2) else: continue else: pass print "#"*40 f3.close() 【例003】反向读取文件 假如要读取的test.txt文件内容如下: 复制代码 代码如下: Python Perl Java Shell 实现代码: 复制代码 代码如下: file1 = file('test.txt','r') list1 = [] #用一个空列表用于存放每行的内容 while True: line = file1.readline() list1.append(line.strip()) if len(line) == 0: break for l in list1[::-1]: #反向遍历,然后依次读取出来 print l file1.close() 输出结果: 复制代码 代码如下: Shell Java Perl Python 【例004】 往文件中所有添加指定的前缀 比如文中: print是一个函数 文本文件强制二进制编码 就变成了下面的 复制代码 代码如下: 01.Python 3.0: #print是一个函数 02.Python 3.0: #文本文件强制二进制编码 #coding = gbk #中文编码 f_r = open('test.txt') #打开要处理文件 f_w = open('file.txt','w') #创建要添加文件 i = 0 #加前缀标志位 while True: i += 1 line = f_r.readline() if not line: break f_w.write('%02d'%(i) + '.Python 3.0: #' + line)#字符串格式化及拼接技巧 f_r.close() #关闭打开的文件句柄 f_w.close() 【例005】 复制代码 代码如下: #coding = gbk ''''' 下面code.txt文件中内容,将 01 CN Chinese 02 IN India 03 HK HongKang 04 JP Japan 05 DE Germany 06 US United States of America 要文件的内容,每一行文件,写到一个文件,且文件名前面两个字段,如 文件名为:01_CN_Chinese.txt 文中内容:01 CN Chinese 知识要点: 1. ''.join 和 split函数 2. 字符的联合 3. with语句,open文件 4. 遍历数组 5. 切片操作 ''' postfix = '.txt' #设置后缀 with open('test.txt') as myfile: #with语句打开文件为myfile while True: #while循环拿文件读出来 lines = myfile.readlines() #拿所有的行一次性读取到列表中 if not lines: break #没有则中断 for line in lines: #遍历列表 file_out = str('_'.join(line.split()[:])) + postfix #得到01_CN_Chinese.txt文件名 open(file_out,'w').write(line) #write(line),将没行的文件写入新文件中 【例006】 复制代码 代码如下: #coding = gbk ''''' #最终实现下面的过程 foos = [1.0, 2.0, 3.0, 4.0, 5.0] bars = [100, 200, 300, 400, 500] 1.0 [200, 300, 400, 500] 2.0 [100, 300, 400, 500] 3.0 [100, 200, 400, 500] 4.0 [100, 200, 300, 500] 5.0 [100, 200, 300, 400] #知识点 1. map函数的理解 2. 关键是切片函数的应用 ''' foos = [1.0, 2.0, 3.0, 4.0, 5.0] bars = [100, 200, 300, 400, 500] def func(foo): index = foos.index(foo) #foo在foos中的索引,拿她取出来 print foo,bars[:][0:index] + bars[:][index+1:] #该索引同样在bars中相同位置,在切片的时候拿它取出,并拼接这个切片 #大功告成! print map(func,foos) 【例007】求 6! + 5! + 4! + 3! + 2! + 1! 复制代码 代码如下: def factorial(n): return reduce(lambda x,y: x* y, range(1,n+1))#求6! print reduce(lambda x,y: x + y, [factorial(i) for i in range(1,6)]) #求6! + 5! + 4! + 3! + 2! + 1! 【例008】 根据输入打印文件 复制代码 代码如下: import sys helpinfo= '''''\ This program prints files to the standard output. Any number of files can be specified. Options include: --[version|VERSION|V|v]: Prints the version number --[help |HELP |H|h]: Display the help ''' def readfile(filename): try: f = open(filename) while True: line = f.readline() if not line: break print line, except: print 'some error here' if len(sys.argv) < 2: print 'No action is needed!' sys.exit() if sys.argv[1].startswith('--'): option = sys.argv[1][2:] if option in ['version','v','V','VERSION']: print 'Version 1.0' elif option in ['h','H','help','HELP']: print helpinfo else: print 'Unknown option.' sys.exit() else: for filename in sys.argv[1:]: readfile(filename) 【例009】函数中args的用法 复制代码 代码如下: def powersum(power,*args): '''''Print each argument's power''' total = 0 for item in args: total += pow(item,power) return total print powersum(2,3,4) # (3**2) + (4**2) print powersum(2,10) # 10**2 print powersum(2) # 0**2 【例010】匿名函数作为返回值 复制代码 代码如下: def repeater(n): print n return lambda s: s*n twice = repeater(2) print twice('Hello') print twice(5) 【例011】备份程序 复制代码 代码如下: #!/usr/bin/env python import os,time source = ['/home/test/C','/home/test/shell'] #源文件目录 target_dir = '/home/test/python' #目标文件目录 today = target_dir + time.strftime('%Y%m%d') # now = time.strftime('%H%M%S') if not os.path.exists(today): #判断目录是否存在 os.mkdir(today) #不存在的话则新建 print 'Successfully created directory', today target = today + os.sep + now + '.zip' #target文件格式 zip_cmd = "zip -qr '%s' %s" % (target, ' '.join(source)) #-q:安静模式 -r递归模式 #等价于 zip -qr /home/test/python20141202/142151.zip /home/test/C /home/test/shell if os.system(zip_cmd) == 0: #判断命令是否成功执行,成功执行,返回0 print 'Successful back to:', target else: #失败的话,打印信息 print 'Backup FAILED.' 加comment的版本 复制代码 代码如下: #!/usr/bin/env python import os,time source = ['/home/test/C','/home/test/shell'] target_dir = '/home/test/python' today = target_dir + time.strftime('%Y%m%d') now = time.strftime('%H%M%S') comment = raw_input('Enter comments here-->') #要输入的comment if len(comment) == 0: #如果没有comment target = today + os.sep + now + '.zip' #按照上面的操作执行 else: target = today + os.sep + now + '_' + comment.replace(' ','_') + '.zip' #如果有comment, if not os.path.exists(today): os.mkdir(today) print 'The backup directory created!', today zip_command = "zip -qr '%s' %s" % (target, ' '.join(source)) if os.system(zip_command) == 0: print 'Scuccessful backup to', target else: print 'The backup FAILED' 输出结果 : 复制代码 代码如下: # python backup_ver4.py Enter comments here-->add new example The backup directory created! /home/test/python20141202 Scuccessful backup to /home/test/python20141202/145130_add_new_example.zip 【例012】将二进制数转为10进制数 复制代码 代码如下: def func(B): I = 0 while B: I = I * 2 + (ord(B[0])-ord('0')) B = B[1:] return I b = raw_input('Enter binary here:') print func(b) 【例013】将列表中排除重复项并将重复的项找出 复制代码 代码如下: def find_duplicate(lst): tmp = [] #临时变量,存放排除后的列表 for item in lst: if not item in tmp: #将不在tmp变量找出 tmp.append(item) else: print 'The duplicate item is:', item print 'After remove the duplicate item:', return tmp if __name__=='__main__': test = input("Enter List here:") #input技巧 print find_duplicate(test) >>> Enter List here:[2,1,4,2] The duplicate item is: 2 After remove the duplicate item: [2, 1, 4] 【例014】用Python中列表中append(),pop()函数实现简单的堆栈方法:后进先出 复制代码 代码如下: l = [] l.append(1) l.append(2) l.append(3) print l print l.pop() print l.pop() print l.pop() 【例015】对列表中的单词按首字母排序 复制代码 代码如下: >>> words = ['apple','bat','bar','book','atom'] >>> tmp = {} #建个空字典 >>> for word in words: letter = word[0] #作为字典中的键 if letter not in tmp: #判断首字母是否存在于字典 tmp[letter] = [word] #注意要添加[],很关键 else: tmp[letter].append(word) #如果键已经存在,值列表添加 >>> tmp {'a': ['apple', 'atom'], 'b': ['bat', 'bar', 'book']} 【例016】对文件进行整理(除空格、TAB键、除#!&?等键),假如文本文件全为人名,并让首字母大写 复制代码 代码如下: john black Jerry! &alice TOm# south carolina### mr smith? 代码及输出结果如下: 复制代码 代码如下: import re def clean(strings): result = [] for value in strings: value = value.strip() value = re.sub('[#!&?]','',value) value = value.title() result.append(value) return result with open('data.txt','a+') as myfile: lines = myfile.readlines() for line in clean(lines): print line >>> John Black Jerry Alice Tom South Carolina Mr Smith 【例017】用while循环来判断某个数是否是质数 复制代码 代码如下: y = input('Enter a integer Here:') x = y / 2 while x > 1: if y % x == 0: print y, 'has factor', x break x -= 1 else: print y, 'is prime' 【例018】用while实现搜索某个字符串的功能 复制代码 代码如下: names = ['Tom','Alice','Wendy','Jerry','Bob','Smith'] while names: if names[0] == 'Jerry': print 'Hi,', names[0] break names = names[1:] else: print 'Not Found!' 【例019】对嵌套的序列进行处理 复制代码 代码如下: >>> T = ((1,2),(3,4),(5,6)) >>> for (a,b) in T: ... print a+100, b+200 ... 101 202 103 204 105 206 【例020】用for循环实现查找 复制代码 代码如下: source = ['sting',(3,4),100,0.1,[1,2]] tests = [(3,4),3.14] for t in tests: #先是遍历小循环 for s in source: #再遍历外层循环 if s == t: print t, 'Found it! ' break else: #else语句的位置非常关键, print t, 'Not Found!' 等价于下面这种方式 复制代码 代码如下: source = ['sting',(3,4),100,0.1,[1,2]] tests = [(3,4),100,3.14] for t in tests: if t in source: print t, 'Found it.' else: print t, 'Not found.' 【例021】用for循环来收集两个序列中相同的部分 复制代码 代码如下: seq1 = 'spam' seq2 = 'suck' res = [] for s1 in seq1: if s1 in seq2: res.append(s1) print res 【例022】隔个取出字符串 复制代码 代码如下: S = 'abcdefghijklmn' for i in range(0,len(S),2): print S[i], #或者 print S[::2] 【例023】两个列表,列表中每个元素加100,然后与L1中对应元素相乘,形成列表,再对列表求和 复制代码 代码如下: L1 = [1,2,3,4] L2 = [5,6,7,8] #L2每个元素加一百,105,106,107 #(5+100)*1 + (6+100)*2 + (100+7)*3 + (100+8)*4 # 合计: 1070 L3 = [x+100 for x in L2] L4 = [] for (x,y) in zip(L1,L3): L4.append(x*y) print sum(L4) #或者用下面精简方式,只是刚看到有点头痛! print sum([x*y for x,y in [T for T in zip(L1,[x+100 for x in L2])]]) 【例024】对列表进行,合并,去重,取交集等操作 复制代码 代码如下: def func(seq1, seq2=None, opra=None): res = [] if opra == '-': for item1 in seq1: if item1 not in seq2: res.append(item1) elif opra == '&': for item1 in seq1: if item1 in seq2: res.append(item1) elif opra == '|': tmp = seq1[:] for item1 in seq2: if item1 not in seq1: tmp.append(item1) return tmp elif opra == '^': for i in seq1: if i not in seq2: res.append(i) for i in seq2: if i not in seq1: res.append(i) return res else: print 'Need list as input!' return res L1 = [1,2,3,4] L2 = [3,4,5,6] print '[L1 - L2]:',func(L1,L2,'-') print '[L1 & L2]:',func(L1,L2,'&') print '[L1 | L2]:',func(L1,L2,'|') print '[L1 ^ L2]:',func(L1,L2,'^') def list_remove(seq): res = [] for i in seq: if i not in res: res.append(i) return res L1 = [3,1,2,3,8] print list_remove(L1) def find_duplicate(seq): res = [] for i in range(len(seq)): if seq.count(seq[i]) >= 2: print 'Found %s'% seq[i], 'The index is:', i res.append(seq[i]) return res L1 = [3,1,2,3,8] print find_duplicate(L1) 结果如下: 复制代码 代码如下: >>> [L1 - L2]: [1, 2] [L1 & L2]: [3, 4] [L1 | L2]: [1, 2, 3, 4, 5, 6] [L1 ^ L2]: [1, 2, 5, 6] [3, 1, 2, 8] Found 3 The index is: 0 Found 3 The index is: 3 [3, 3] 【例025】通过函数改变全局变量的三种方式 复制代码 代码如下: var = 99 def local(): var = 0 def glob1(): global var var += 1 def glob2(): var = 0 import Learn Learn.var += 1 def glob3(): var = 0 import sys glob = sys.modules['Learn'] glob.var += 1 def test(): print var local();glob1();glob2();glob3() print var 【例026】求range(10)中每个元素的立方 复制代码 代码如下: def func(): res = [] for i in range(10): res.append(lambda x, i=i: i ** x) #i=i这是关键,否则i默认记忆最后一个值:9 return res >>> res = func() >>> for i in range(10): res[i](3) 0 1 8 27 64 125 216 343 512 729 【例027】求最小值 复制代码 代码如下: def min1(*args): mini = args[0] for arg in args[1:]: if arg < mini: mini = arg return mini def min2(first,*rest): mini = first for arg in rest: if arg < first: mini = arg return mini def min3(*args): res = list(args) res.sort() return res[0] print min1('c','a','b') print min2(3,1,4) print min3(1,'a',78,'c') def func(test, *args): res = args[0] for arg in args[1:]: if test(arg, res): res = arg return res def lessthan(x, y): return x < y def morethan(x, y): return x > y print func(lessthan, 4,3,1,2,9) print func(morethan, 4,3,1,2,9) 【例028】求多个集合的交集及合集 复制代码 代码如下: def intersect(*args): res = [] for x in args[0]: for other in args[1:]: if x not in other: break else: res.append(x) return set(res) #去除重复的部分 print intersect('SPAM','SCAM','SLAM') def union(*args): res = [] for seq in args: for item in seq: if not item in res: res.append(item) return res print union('SA','SB','SC') def intersect(*args): res = [] for x in args[0]: for other in args[1:]: if x not in other: break else: res.append(x) #为了交互['S','S','A','A','M','M'] tmp = [] [tmp.append(i) for i in res if i not in tmp] return tmp print intersect('SCAM','SPAM','SLAM') 【例029】字典的拷贝及添加 复制代码 代码如下: def copyDict(old): new = {} for key in old: new[key] = old[key] return new def addDict(d1,d2): new = {} for key in d1.keys(): new[key] = d1[key] for key in d2: new[key] = d2[key] return new 【例030】求质数 复制代码 代码如下: def isPrime(y): if y < 1: print y, 'not prime' else: x = y // 2 while x>1: if y % x == 0: print y, 'has factor', x break x -= 1 else: print y, 'is prime!' 【例031】比较多个值的大小 复制代码 代码如下: def min_max(func,*args): res = args[0] for arg in args[1:]: if func(arg,res): res = arg return res def min_func(x,y): return x < y def max_func(x,y): return x > y if __name__=='__main__': print "The min value is:", min_max(min_func,4,3,2,1,7,6,9) print "The max value is:", min_max(max_func,4,3,2,1,7,6,9) # 输出结果: >>> The min value is: 1 The max value is: 9 【例032】写一个小函数实现内置函数dir的功能 复制代码 代码如下: #Filename: mydir.py tag = 1 def listing(module): if tag: print '-'*30 print 'name:', module.__name__,'file:', module.__file__ print '-'*30 count = 0 for attr in module.__dict__.keys(): if attr[0:2] == '__': print '%02d) %s' % (count, attr) else: print getattr(module,attr) count = count + 1 if tag: print '-'*30 print module.__name__, 'has %d names.' % count print '-'*30 if __name__=='__main__': import mydir listing(mydir) 【例033】求分数平均值 复制代码 代码如下: '''''Filename: grades.txt 求该文件中第二列的平均值 Jerry 78 Alice 45 Wendy 96 Tom 56 Bob 85 ''' temp = [] for line in open('grades.txt'): a = line.strip().split() if a: temp.append(a[1]) #['78', '45', '96', '56', '85'] total = 0 for i in temp: total += int(i) print 'The total grade is:', total, 'The average is:', total/len(tmp) 【例034】一个实际类的例子 复制代码 代码如下: class GenericDisplay: def gatherAttrs(self): attrs = '\n' for key in self.__dict__: attrs += '\t%s=%s\n' % (key, self.__dict__[key]) return attrs def __str__(self): return '<%s: %s>' % (self.__class__.__name__, self.gatherAttrs()) class Person(GenericDisplay): def __init__(self, name, age): self.name = name self.age = age def lastName(self): return self.name.split()[-1] def birthDay(self): self.age += 1 class Employee(Person): def __init__(self, name, age, job=None, pay=0): Person.__init__(self, name, age) self.job = job self.pay = pay def birthDay(self): self.age += 2 def giveRaise(self, percent): self.pay *= (1.0 + percent) if __name__ == '__main__': bob = Person('Bob Smith', 40) print bob print bob.lastName() bob.birthDay() print bob sue = Employee('Sue Jones', 44, job='dev', pay=100000) print sue print sue.lastName sue.birthDay() sue.giveRaise(.10) print sue 【例035】根据给定的年月日以数字方式打印出日期(February 27th, 2015) 复制代码 代码如下: # coding = UTF-8 #根据给定的年月日以数字形式打印出日期 months = [ 'January' , 'February', 'March' , 'April' , 'May' , 'June' , 'July' , 'August' , 'September', 'October' , 'November' , 'December' ] #以1~31的数字作为结尾的列表 endings = ['st','nd','rd'] + 17 * ['th'] + \ ['st','nd','rd'] + 07 * ['th'] + \ ['st'] year = raw_input('Year: ') month = raw_input('Month(1-12): ') day = raw_input('Day(1-31): ') month_number = int(month) day_number = int(day) #月份和天数减1来获得正确的索引 month_name = months[month_number - 1] ordinal = day + endings[day_number - 1] print month_name + ' ' + ordinal + ', ' + year #输出结果 >>> Year: 2015 Month(1-12): 2 Day(1-31): 27 February 27th, 2015 【例036】在居中的盒子里打印一条语句 复制代码 代码如下: sentence = raw_input("Sentence: ") screen_width = 80 text_width = len(sentence) box_width = text_width + 6 left_margin = (screen_width - box_width) // 2 print print ' '*left_margin + '+' + '-'*(box_width-4) + '+' print ' '*left_margin + '| ' + ' '*(text_width) +' |' print ' '*left_margin + '| ' + sentence +' |' print ' '*left_margin + '| ' + ' '*(text_width) +' |' print ' '*left_margin + '+' + '-'*(box_width-4) + '+' print #输出结果 >>> Sentence: Welcome To Beijing! +---------------------+ | | | Welcome To Beijing! | | | +---------------------+ 【例037】简单小数据库验证 复制代码 代码如下: database = [ ['Bob', '1234'], ['Tom', '2345'], ['Foo', '1478'] ] usr = raw_input('Enter username: ') pwd = raw_input('Enter password: ') if [usr, pwd] in database: print 'Access Granted!' else: print 'Access Deny!' 【例038】使用给定的宽度打印格式化后的价格列表 复制代码 代码如下: width = input('Please enter width: ') price_width = 10 item_width = width - price_width header_format = '%-*s%*s' format = '%-*s%*.2f' print '=' * width print header_format % (item_width, 'Item', price_width, 'Price') print '-' * width print format % (item_width, 'Apples', price_width, 0.4) print format % (item_width, 'Sweets', price_width, 0.5) print format % (item_width, 'Pepper', price_width, 12.94) print format % (item_width, 'Tender', price_width, 42) print '-' * width 输出格式: 复制代码 代码如下: >>> Please enter width: 30 ============================== Item Price ------------------------------ Apples 0.40 Sweets 0.50 Pepper 12.94 Tender 42.00 ------------------------------ 【例039】遍历两个对应列表 复制代码 代码如下: names = ['Alice', 'Bob' , 'Cherry', 'David'] numbers = ['0000' , '1111', '2222' , '3333' ] for index,name in enumerate(names): print '%-7s=> %s' % (name, numbers[index]) #输出结果 >>> Alice => 0000 Bob => 1111 Cherry => 2222 David => 3333 当然也可以采用如下通常的做法: 复制代码 代码如下: names = ['Alice','Bob', 'John', 'Fred'] ages = [27, 23, 31, 29] for i in range(len(ages)): print names[i],' is ', ages[i], ' years old!' #输出结果: >>> Alice is 27 years old! Bob is 23 years old! John is 31 years old! Fred is 29 years old! 【例040】对存储在小字典中数据进行查询 复制代码 代码如下: peoples = { 'Alice':{ 'phone' : '0948', 'address' : 'aaaa' }, 'Wendy':{ 'phone' : '4562', 'address' : 'bbbb' }, 'David':{ 'phone' : '4562', 'address' : 'bbbb' } } #字典使用人名作为键。每个人用另外一个字典来表示,其键'phone'和'addr'分别表示他们的电话号码和地址 labels = { 'phone' : 'phone number', 'address' : 'address' } #针对电话号码和地址使用描述性标签,会在打印输出时用到。 key = '' name = raw_input('Name: ') if name in peoples: request = raw_input('Enter (p) or (a): ') if request == 'p': key = 'phone' elif request == 'a': key = 'address' else: print 'Please input p(phone) an a(address)!' print "%s's %s is %s" % (name, labels[key],peoples[name][key]) else: print 'Not Found!' 或者使用字典的get()方法,更好些。完整代码如下: 复制代码 代码如下: #字典使用人名作为键。每个人用另外一个字典来表示,其键'phone'和'addr'分别表示他们的电话号码和地址 peoples = { 'Alice':{ 'phone' : '0948', 'address' : 'aaaa' }, 'Wendy':{ 'phone' : '4562', 'address' : 'bbbb' }, 'David':{ 'phone' : '4562', 'address' : 'bbbb' } } #针对电话号码和地址使用描述性标签,会在打印输出时用到。 labels = { 'phone' : 'phone number', 'addr' : 'address' } name = raw_input('Name: ') #查找电话号码还是地址? request = raw_input('Phone number (p) or address (a)? ') #查找正确的键 key = request #如果请求即不是p也不是a if request == 'p': key = 'phone' if request == 'a': key = 'addr' #使用get()函数提供默认值 person = peoples.get(name,{}) label = labels.get(key, key) result = person.get(key, 'not available') print "%s's %s is %s." % (name, label, result) 【例041】字典格式化字符串例子 复制代码 代码如下: template='''''

%(title)s

%(text)s ''' data = {'title':'My Home Page','text':'Welcome to my home page!'} print template % data #输出结果: >>>

My Home Page

Welcome to my home page! 【例042】需找100以内的最大平方数 复制代码 代码如下: from math import sqrt #从100开始往下找,找到即停止,最大为: 81 for n in range(99, 0, -1): root = sqrt(n) if root == int(root): print n break 【例043】用while/True, break控制输入 复制代码 代码如下: while True: #一直进行下去,除非break word = raw_input('Please Enter a word: ') if not word: break #输入为空的话,中断循环 print 'The word was: ' + word 【例044】将两个列表中首字母相同的提取出来 复制代码 代码如下: #将两个列表中首字母相同的罗列在一起 girls = ['alice', 'bernice', 'clarice'] boys = ['chris', 'arnold', 'bob'] #列表推导: print [b+'+'+g for b in boys for g in girls if b[0] == g[0]] #输出结果: >>> ['chris+clarice', 'arnold+alice', 'bob+bernice'] 【例045】斐波那契数列求指定数字的列表 复制代码 代码如下: def fibs(x): fibs = [0, 1] # 初始值 for i in range(x): # fibs[-2]+fibs[-1]:最新一个值是前面两个值之和 # 并用append方法将其添加在后面 fibs.append(fibs[-2]+fibs[-1]) print fibs if __name__=='__main__': num = input('How many Fibonacci numbers do you want? ') fibs(num) 或者用普通方法实现: 复制代码 代码如下: >>> def fib(max): n, a, b = 0, 0, 1 tmp_list = [] while n < max: tmp_list.append(a) a, b = b, a+b n += 1 return tmp_list >>> fib(8) [0, 1, 1, 2, 3, 5, 8, 13] 【例046】写一个自定义列表类,让它支持尽可能多的支持操作符号 复制代码 代码如下: class MyList: def __init__(self, start): self.wrapped = [] # Make sure it's a list here for x in start: self.wrapped.append(x) def __add__(self, other): return MyList(self.wrapped + other) def __mul__(self, time): return MyList(self.wrapped * time) def __getitem__(self, offset): return self.wrapped[offset] def __len__(self): return len(self.wrapped) def __getslice__(self, low, high): return MyList(self.wrapped[low:high]) def append(self, node): self.wrapped.append(node) def __getattr__(self, name): # Other members: sort/reverse/etc return getattr(self.wrapped, name) def __repr__(self): return repr(self.wrapped) if __name__ == '__main__': x = MyList('spam') print x print x[2] print x[1:] print x + ['eggs'] print x * 3 x.append('a') x.sort() for c in x: print c, # 输出结果如下: >>> ['s', 'p', 'a', 'm'] a ['p', 'a', 'm'] ['s', 'p', 'a', 'm', 'eggs'] ['s', 'p', 'a', 'm', 's', 'p', 'a', 'm', 's', 'p', 'a', 'm'] a a m p s 【例047】用urllib模块来批量下载图片 复制代码 代码如下: import re import urllib def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImg(html): reg = r'src="(.*?\.jpg)" width' imgre = re.compile(reg) imgList = re.findall(imgre, html) x = 0 for imgurl in imgList: urllib.urlretrieve(imgurl, '%s.img' % x) # urlretrieve()下载图片 x += 1 html = getHtml("http://www.w3cschool.cc/") print getImg(html) 【例048】用PyQt4实现简单的按钮事件(Hello,World!) 复制代码 代码如下: # -*- coding: utf-8 -*- import sys from PyQt4 import QtCore, QtGui # 自定义的窗口类 class TestWindow(QtGui.QWidget): # 窗口初始化 def __init__(self, parent = None): super(TestWindow, self).__init__(parent) self.setWindowTitle(u'胡桃夹子') # 创建按钮 self.pushButton = QtGui.QPushButton(u'测试按钮') # 创建文本框 self.textEdit = QtGui.QTextEdit() # 创建垂直布局 layout = QtGui.QVBoxLayout() # 将控件添加到布局中 layout.addWidget(self.textEdit) layout.addWidget(self.pushButton) # 设置窗口布局 self.setLayout(layout) # 设置按钮单击动作 self.pushButton.clicked.connect(self.sayHello) # 按钮动作处理 def sayHello(self): self.textEdit.setText('Hello World!') # 程序主入口 if __name__=='__main__': app = QtGui.QApplication(sys.argv) mainWindow = TestWindow() mainWindow.show() sys.exit(app.exec_()) 【例049】用python解析文本的一个例子 假如配置文件如下, 要确保配置文件行为tablename后面的level中值给读取出来 复制代码 代码如下: #FileName: data.conf (tablename "A__employee__id.sql") (userid "000001") (number "100001") (level "P1") (tablename "B__employee__id.sql") (userid "100001") (number "100000") (level "P2") (tablename "C_other_table.sql") (userid "000001") (number "100001") (level "P2") (tablename "C__employee__table.sql") (userid "000001") (number "100001") (level "P3") 代码如下: 复制代码 代码如下: def parse_File(filename): tmp = [] fh = open(filename) line = fh.readline() flag = 0 while line: if "tablename" in line and "__employee__" in line: count = 0 flag = 1 if flag == 1: count += 1 if count == 4 and "level" in line: value = line.split(r'"')[1] tmp.append(value) line = fh.readline() return tmp if __name__ == '__main__': print parse_File('data.conf')