自己使用总结Python程序代码片段


Posted in Python onJune 02, 2015

用于记录自己写的,或学习期间看到的不错的,小程序,持续更新......
****************************************************************
【例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='''''<html> 

<head><title></title></head> 

<h1>%(title)s</h1> 

<p1>%(text)s</p1> 

<body></body> 

</html>'''  

  

data = {'title':'My Home Page','text':'Welcome to my home page!'}  

print template % data  

  

#输出结果:  

>>>   

<html>  

<head><title></title></head>  

<h1>My Home Page</h1>  

<p1>Welcome to my home page!</p1>  

<body></body>  

</html> 

【例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')  

 
Python 相关文章推荐
在Python中操作时间之mktime()方法的使用教程
May 22 Python
在Python中marshal对象序列化的相关知识
Jul 01 Python
详解python的数字类型变量与其方法
Nov 20 Python
Python中Django发送带图片和附件的邮件
Mar 31 Python
Tensorflow卷积神经网络实例
May 24 Python
Python中 map()函数的用法详解
Jul 10 Python
Python实现随机取一个矩阵数组的某几行
Nov 26 Python
python 通过视频url获取视频的宽高方式
Dec 10 Python
Python3搭建http服务器的实现代码
Feb 11 Python
Python图像处理库PIL的ImageDraw模块介绍详解
Feb 26 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
Dec 07 Python
python实现简单的聊天小程序
Jul 07 Python
python执行子进程实现进程间通信的方法
Jun 02 #Python
Python多进程并发(multiprocessing)用法实例详解
Jun 02 #Python
使用pdb模块调试Python程序实例
Jun 02 #Python
python使用xmlrpclib模块实现对百度google的ping功能
Jun 02 #Python
python基于xmlrpc实现二进制文件传输的方法
Jun 02 #Python
Python中的自省(反射)详解
Jun 02 #Python
Python中pip安装非PyPI官网第三方库的方法
Jun 02 #Python
You might like
php miniBB中文乱码问题解决方法
2008/11/25 PHP
PHP自定义函数收代码
2010/08/01 PHP
PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
2012/04/09 PHP
php入门之连接mysql数据库的一个类
2012/04/21 PHP
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
基于jquery实现的鼠标滑过按钮改变背景图片
2011/07/15 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
js实时获取系统当前时间实例代码
2013/06/28 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
深入剖析JavaScript编程中的对象概念
2015/10/21 Javascript
JS Array.slice 截取数组的实现方法
2016/01/02 Javascript
js实现一键复制功能
2017/03/16 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
2017/08/08 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
vue基于viewer实现的图片查看器功能
2019/04/12 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
2019/09/14 Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
2020/02/11 Javascript
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
python sqlobject(mysql)中文乱码解决方法
2008/11/14 Python
Python判断变量是否已经定义的方法
2014/08/18 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
python批量修改xml属性的实现方式
2020/03/05 Python
Python爬取某平台短视频的方法
2021/02/08 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
美国知名珠宝首饰品牌:Gemvara
2017/10/06 全球购物
环境科学专业个人求职信
2013/09/26 职场文书
进步之星获奖感言
2014/02/22 职场文书
车间核算员岗位职责
2014/07/01 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
学习十八届四中全会精神思想汇报
2014/10/23 职场文书
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android