Fork me on GitHub

《Python核心编程》部分代码习题实践(持续更新)

第三章

3-10 交换异常处理方式

代码:

#makeTextFile.py

#!/usr/bin/env python

'makeTextFile.py'
import os
ls = os.linesep

#get File name

while True:
    fname = raw_input("Enter file name: ")
    try:
        fobj = open(fname,'w')
    except IOError, e:
        print "File open Failed"
    else:
        break;

#get file contents lines

all = []
print "\nEnter lines('.' by itself to quit).\n"

#loop until user terminate input

while True:
    entry = raw_input('> ')
    if entry == '.':
        break
    else:
        all.append(entry)

#write lines to file with proper line-ending
#fobj = open(fname,'w')
fobj.writelines(['%s%s' % (x,ls) for x in all])
#fobj.write('\n',join(all))
fobj.close()
print "DONE"


######################################

#readTextFile.py

#!/usr/bin/env python

'readTextFile.py'
import os

#get filename
fname = raw_input('Enter filename: ')
print

#attempt to open file for reading

if os.path.exists(fname):
    fobj = open(fname,'r')
    for eachLine in fobj:
        print eachLine,

fobj.close()
View Code

 

3-11 移除逗号,用strip方法

代码:

#!/usr/bin/env python

'readTextFile.py'
import os

#get filename
fname = raw_input('Enter filename: ')
print

#attempt to open file for reading

if os.path.exists(fname):
    fobj = open(fname,'r')
    for eachLine in fobj:
        print eachLine.strip()   #string.strip()

fobj.close()
View Code

 

第五章习题:

"chapter 5 's example"
import random

def countLevel(grade):
    "countLevel: input a grade,output its level"
    if grade > 100 or grade < 0:
        return 'Grade invalid!'
    elif 90 <= grade <= 100:
        return 'A'
    elif 80 <= grade < 90:
        return 'B'
    elif 70 <= grade < 80:
        return 'C'
    elif 60 <= grade < 70:
        return 'D'
    else:
        return 'E'

def countAvg(gradelist):
    sumi = 0
    for i in gradelist:
        sumi += i
    return float(sumi)/len(gradelist)

def matchStr(ka,kb):
    len1 = len(ka)
    len2 = len(kb)
    if len1 != len2:
        return False
    i = 0
    while i < len1:
        if ka[i] != kb[i]:
            return False
        i += 1
    return True


def moneydiv(money):
    "There are 4 kinds of coins,input a num,output the minimum coins used to spell it"
    m1 = m5 = m10 = m25 = 0
    if money >= 25:
        m25 = money/25
        money -= m25*25
    if money >= 10:
        m10 = money/10
        money -= m10*10
    if money >= 5:
        m5 = money/5
        money -= m5*5
    if money >= 1:
        m1 = money
    return [m1,m5,m10,m25]

def EvalInt3(expression):
    "input a expression,output it's consequence,only for int"
    length = len(expression)
    a = ""
    b = ""
    op = ""
    first = True
    tag = 0
    for i in range(0,length):
        if expression[i] != '+' and expression[i] != '-' and expression[i] != '*' and expression[i] != '/' and expression[i] != '%':
            if first:
                a += expression[i]
            else:
                b += expression[i]
        else:
            if expression[i] == '*' and expression[i-1] == '*':
                tag = 6
                first = False
            else:
                if expression[i] == '+':
                    tag = 1
                elif expression[i] == '-':
                    tag = 2
                elif expression[i] == '*':
                    tag = 3
                elif expression[i] == '/':
                    tag = 4
                elif expression[i] == '%':
                    tag = 5
                first = False
    a = int(a)
    b = int(b)
    if tag == 1:
        return a+b
    elif tag == 2:
        return a-b
    elif tag == 3:
        return a*b
    elif tag == 4:
        return a/b
    elif tag == 5:
        return a%b
    elif tag == 6:
        return a**b

def SquareArea(a):
    return a*a

def CubeVolume(a):
    return a*a*a

def CircleArea(r):
    return 3.14159*r*r

def SphereVolume(r):
    return 4.0/3.0*3.14159*r*r*r

def TempCtoF(c):
    return str(9.0/5.0*c + 32) + 'F'

def TempFtoC(f):
    return str((f-32)*(5.0/9.0)) + 'C'

def interest(ist):
    dayist = ist/365.0/100.0
    return ((1+dayist)**365 - 1.0)*100

def GCD(a,b):
    "count gcd of two number"
    if b:
        return GCD(b,a%b)
    else:
        return a


def RandomGO(N,n):
    a = []
    for i in range(0,N):
        k = random.randrange(0,n)
        a.append(k)
    b = []
    for i in range(0,N):
        ind = random.randrange(0,N)
        b.append(a[ind])
    sorted(b)
    return b
    
    

def displayNumType(num):
    print num,'is',
    if isinstance(num,(int,long,float,complex)):
        print 'a number of type:',type(num).__name__
    else:
        print 'not a number at all!!'
View Code

 

第六-七章习题:

6-12

#!/usr/bin/env python

def findchr(string, char):
    i = 0
    for ch in string:
        if ch == char:
            return i
        i += 1
    return -1

def rfindchr(string, char):
    i = len(string)-1
    while i >= 0:
        if(string[i] == char):
            return i
        i -= 1
    return -1

def subchr(string, origchar, newchar):
    i = 0
    newstring = ""
    for ch in string:
        if ch == origchar:
            newstring += newchar
            continue
        newstring += ch
    return newstring

print rfindchr('whatbeg','3')
print rfindchr('wahtbeg','b')
print rfindchr('whahhhaaad','a')
print subchr('whatbeg','w','t')
View Code
#!/usr/bin/env python

"Chapter 6"

def num_to_str():
    num_str = raw_input('Enter a number: ')

    i = 0

    num_dic = {'0':'zero','1':'one','2':'two','3':'three','4':'four','5':'five','6':'six','7':'seven','8':'eight','9':'nine'}
    res = []

    while i < len(num_str):
        res.append(num_dic[num_str[i]])
        i += 1

    i = 0
    stri = ''

    while i < len(res)-1:
        stri += res[i] + '-'
        i += 1
    
    stri += res[i]

    print stri

"Chapter 7"

def Exchange_Key_Values(dict1):
    dict2 = {}
    for key in dict1:
        dict2[dict1[key]] = key

    return dict2
View Code

 

第八章:

# -*- coding: cp936 -*-

print '输入起始值: '
num_str1 = raw_input()
num1 = int(num_str1)
print '输入结束值: '
num_str2 = raw_input()
num2 = int(num_str2)

print 'DEC     BIN     OCT    HEX    ASCII'
print '----------------------------------------'

for i in range(num1,num2+1):
    print str(i) + '    ' + bin(i) + '    ' + oct(i) + '    ' + hex(i) + '    ' + chr(i)
View Code

 

第九章:

#9-4
f = open('1.txt','r')

while True:
    for i in range(12):
        print f.readline()
    a = raw_input('Press any key to continue, "q" to quit: ')
    if a == 'q':
        break;
    else:
        continue
View Code

 

#复制文件
print 'Enter the two file name: '
no1 = raw_input('From: ')
no2 = raw_input('To: ')

f1 = open(no1,'r')
f2 = open(no2,'w')

for eachLine in f1.readlines():
    f2.write(eachLine)

f1.close()
f2.close()

print 'Done!'

 

#9-18 搜索某个ASCII码对应的字符在文件中出现的次数
name = raw_input('Enter the file name: ')
char_num = raw_input('And the char_num: ')
char_num_int = int(char_num)
char = chr(char_num_int)

f = open(name,'r')

cnt = 0

for eachLine in f.readlines():
    for i in eachLine:
        if char == i:
            cnt += 1

f.close()

print 'Done! COUNT is ' + str(cnt)

 

第11章:

爬取网页代码第一行和最后一行:

#!/usr/bin/env python

from urllib import urlretrieve

def firstNonBlank(lines):
    for eachLine in lines:
        if not eachLine.strip():
            continue
        else:
            return eachLine

def firstLast(webpage):
    f = open(webpage)
    lines = f.readlines()
    f.close()
    print firstNonBlank(lines)
    lines.reverse()
    print firstNonBlank(lines)

def download(url = 'http://www.codeforces.com',process = firstLast):
    try:
        retval = urlretrieve(url)[0]
    except IOError:
        retval = None
    if retval:
        process(retval)

if __name__ == '__main__':
    download('http://acm.uestc.edu.cn/#/')

 

测试函数:

#!/usr/bin/env python

def testit(func,*nkwargs,**kwargs):
    try:
        retval = func(*nkwargs,**kwargs)
        result = (True, retval)
    except Exception, diag:
        result = (False, str(diag))
    return result

def test():
    funcs = (int, long, float)
    vals = (1234,12.34,'1234','12.34')
    for eachFunc in funcs:
        print '_'*20
        for eachVal in vals:
            retval = testit(eachFunc,eachVal)
            if retval[0]:
                print '%s(%s) = ' % (eachFunc.__name__,'eachVal'),retval[1]
            else:
                print '%s(%s) = FAILED: ' % (eachFunc.__name__,'eachVal'),retval[1]
                

if __name__ == '__main__':
    test()

 

简单GUI例子

from functools import partial
import Tkinter

root = Tkinter.Tk()
MyButton = partial(Tkinter.Button,root,fg = 'white',bg = 'blue')
b1 = MyButton(text = 'Button 1')
b2 = MyButton(text = 'Button 2')

qb = MyButton(text = 'QUIT',bg = 'red',command=root.quit)

b1.pack()
b2.pack()

qb.pack(fill = Tkinter.X,expand = True)
root.title('PFAs!')
root.mainloop()

 

posted @ 2014-04-13 11:13 whatbeg 阅读(...) 评论(...) 编辑 收藏