Python老王視頻習題答案

基礎篇2:
一切變量都是數據對象的引用
sys.getrefcount('test') 查看引用計數
變量命名不能以數字開頭
編碼:ascii、unicode、utf-8
1.閱讀str對象的help文檔,並解決以下的問題。
1.1.有以下字符串。html

python是動態語言 python

要求以下[請分別寫出腳本]:
a=' python是動態語言 '
(1.)去掉該字符串下前面全部的空格。git

print a.lstrip()

(2.)去掉該字符串下後面全部的空格。shell

print a.rstrip()
View Code

(3.)去掉該字符串2邊的空格。數據庫

print a.strip()
View Code


1.2有以下字符串編程

"abc"json

(1)請將其所有大寫。api

b='abc
b.upper
View Code

(2)請將其所有小寫。數組

 b='ABC'
 b.lower()
View Code

2 怎麼查看變量的類型是什麼?數據結構

type(a)

 

基礎篇5習題

1 :

info = 'abc'
info[2] = 'd'

結果是什麼,爲何會報錯呢?
TypeError: 'str' object does not support item assignment
字符串不可變

2 若是要把上面的字符串info裏面的c替換成d,要怎麼操做呢?

info='abc'
list(info)
a[2]='d'
info=''.join(a)
View Code

3 下面2個變量

a = '1'
b = 2

print a + b 的結果是什麼,爲何會出現這個結果,若是但願結果是3,要怎麼操做?
不一樣類型不能相加

int(a)+ b

 

基礎篇6習題:
1 字符串:
a = 'abcd'
用2個方法取出字母d

a[3]

a = 'jay'
b = 'python'
用字符串拼接的方法輸出:
my name is jay,i love python.
print 'my name is %s,i love %s.' % (a,b)
"".join([a,b])

 


 

基礎篇7習題:
1:
a = 'pyer'
b = 'apple'
用字典和format方法實現:
my name is pyer, i love apple.

2:打開文件info.txt,而且寫入500這個數字。

a=open('info.txt','w')
a.write(500)
a.close()
View Code

 

基礎篇8習題:
一.已經字符串 s = "i,am,lilei",請用兩種辦法取出之間的「am」字符。

s[2:4]
s.split(',')[1]
View Code

二.在python中,如何修改字符串?
轉成list來修改
用replace修改
三.bool("2012" == 2012) 的結果是什麼。

false


四.已知一個文件 test.txt,內容以下:
____________
2012來了。
2012不是世界末日。
2012歡樂多。
_____________

1.請輸出其內容。

print open('text.txt').read()

2.請計算該文本的原始長度。

date=open('text.txt').read()
len(date.decode('GBK'))

3.請去除該文本的換行。
4.請替換其中的字符"2012"爲"2013"。

print date.replace('2012','2013')

5.請取出最中間的長度爲5的子串。

6.請取出最後2個字符。

date[-1:-3:-1]

7.請從字符串的最初開始,截斷該字符串,使其長度爲11.

8.請將{4}中的字符串保存爲test1.py文本.

五.請用代碼的形式描述python的引用機制。
引用從3開始,引用一次加1,去引用減1
六.已知以下代碼

________

a = "中文編程"
b = a
c = a
b2 = a.replace("中","中")
________
1.請給出str對象"中文編程"的引用計數
4
2.請給出str對象"python編程"的引用計數
0
七.已知以下變量
________
a = "字符串拼接1"
b = "字符串拼接2"
________

1.請用四種以上的方式將a與b拼接成字符串c。並指出每一種方法的優劣。
a+b
佔位符號
"".join([a,b])
c="{1}{0}".format (a,b)
2.請將a與b拼接成字符串c,並用逗號分隔。

",".join([a,b])

3.請計算出新拼接出來的字符串長度,並取出其中的第七個字符。

c[7]

八.請閱讀string模塊,而且,根據string模塊的內置方法輸出以下幾題的答案。

1.包含0-9的數字。
2.全部小寫字母。
3.全部標點符號。
4.全部大寫字母和小寫字母。
5.請使用你認爲最好的辦法將{1}-{4}點中的字符串拼接成一個字符串。

九.已知字符串
________

a = "i,am,a,boy,in,china"
________

1.假設boy和china是隨時可能變換的,例boy可能改爲girl或者gay,而china可能會改爲別的國家,你會如何將上面的字符串,變爲可配置的。
2.請使用2種辦法取出其間的字符"boy"和"china"。
3.請找出第一個"i"出現的位置。
4.請找出"china"中的"i"字符在字符串a中的位置。
5.請計算該字符串一共有幾個逗號。

十.請將模塊string的幫助文檔保存爲一個文件。


 

列表習題:

一 下面列表:
a = [1,2,3,4,5,333,11,44]
輸出下面的結果:
[4,5,333]
a[3:6]
二 有下面2個列表
a = [1,2,3]
b = [4,5,6]
用2個方法輸出下面結果:
[1,2,3,4,5,6]
a.extend(b)
a+b
三 有下面2個列表:
a = [1,99,33,44,55,22]
輸出結果:
1:[1,2,99,33,44,55,22,(11,33,54)]

a.insert.()append

2: [1,2,99,33,101,44,55,22]
extend

四:用列表推導式生成100內的大於20的偶數

[x for x in range(20,100) if x%2==0]

 

列表應用習題:
xrange和range的具體區別:
xrange的用法:
xrange(開始,結束,步長) xrange 它生成一個xrange對象
當咱們須要操做一個很是大的數據,並且內存比較吃緊的時候,咱們能夠用xrange來操做省內存
xrange通常用在循環裏面,好比咱們只須要操做部分數據的話,而不是返回所有元素來完成操做,推薦用xrange,效率更高

一: 已知:元組 a = (1,2,3) 利用list方法,輸出下面的結果:
(1,2,4)

b=list(a) b[2]=4 a=tuple(b)

二: 利用列表推導完成下面習題:
1 輸出結果:[1 love python,2 love python,3 love python,.... 10 love python]

["%s is love python" % x for x in range(1,10)]

2 輸出結果:[(0,0),(0,2),(2,0),(2,2)]

[(x,y) for x in range(3) for y in range(3) if x%2==0 if y%2==0]


三:
a = [1,2,3]
b = a[:]
del a
b的值是什麼。爲何呢?
[1,2,3]


 

元組和集合習題:
集合不能有切片操做
set 方法建立集合
基本操做:add、update、remove、
一 元組;a = (1,2,3)
1 有2種方法輸出實現下面的結果:
(5,2,3)
2 判斷2是否在元組裏
二 集合a = set(['a','b','c'])作下面的操做:
1 添加字符串'jay'到集合a裏。
a.add('jay')
2 集合b = set(['b','e','f','g']) 用2種方法求集合a 和集合b的並集。
& --交集
| --並集
- --差集


 

字典習題:
字典類型:{'key':'value'}
key必須爲不可變的數據類型:數字,字符串,元組,列表不能作爲key
字典是無序的,經過鍵名來讀取內容,是可嵌套的
>>> binfo
{'a': [1, 2, 3], 'b': [4, 5, 6]}
>>> binfo['a'][1]=5
>>> binfo
{'a': [1, 5, 3], 'b': [4, 5, 6]}
已知字典:ainfo = {'ab':'liming','ac':20}
完成下面的操做
1 使用2個方法,輸出的結果:
ainfo = {'ab':'liming','ac':20,'sex':'man','age':20}
ainfo['sex']='man'
2 輸出結果:['ab','ac']

ainfo.keys()

3 輸出結果:['liming',20]

ainfo.values()

4 經過2個方法返回鍵名ab對應的值。

ainfo.get('ab')
info.keys()[1]

5 經過2個方法刪除鍵名ac對應的值。

del info['age']
info.pop('name')

 

基礎篇13-數據結構習題:
列表a = [11,22,24,29,30,32]
1 把28插入到列表的末端

a.append(28)

2 在元素29後面插入元素57

a.insert(4,57)

3 把元素11修改爲6

a[0]=6

3 刪除元素32

a.remove(32)

4 對列表從小到大排序

b=list(set(a))

##習題2:
列表b = [1,2,3,4,5]
1 用2種方法輸出下面的結果:
[1,2,3,4,5,6,7,8]

b+[6,7,8]
b.extend([6,7,8])

2 用列表的2種方法返回結果:[5,4]

b[-4:-6:-1]
[b[4],b[3]]

3 判斷2是否在列表裏
2 in b
##習題3:
b = [23,45,22,44,25,66,78]
用列表解析完成下面習題:
1 生成全部奇數組成的列表

[x for x in b if x%2==1]

2 輸出結果: ['the content 23','the content 45']

['The content %d' % x for x in b[0:2]]

3 輸出結果: [25, 47, 24, 46, 27, 68, 80]

[x+2 for x in b]

##習題4:
用range方法和列表推導的方法生成列表:
[11,22,33]

range(11,44,11)
[m*11 for m in range(1:4)]

##習題5:
已知元組:a = (1,4,5,6,7)
1 判斷元素4是否在元組裏
4 in a
2 把元素5修改爲8
b=list(a) b[2]=8 a=tuple(b)
##習題6:
已知集合:setinfo = set('acbdfem')和集合finfo = set('sabcdef')完成下面操做:
1 添加字符串對象'abc'到集合setinfo

setinfo.add('abc')

2 刪除集合setinfo裏面的成員m

setinfo.remove('m')

3 求2個集合的交集和並集

setinfo & finfo
setinfo | finfo

##習題7:
用字典的方式完成下面一個小型的學生管理系統。
1 學生有下面幾個屬性:姓名,年齡,考試分數包括:語文,數學,英語得分。
好比定義2個同窗:
姓名:李明,年齡25,考試分數:語文80,數學75,英語85
姓名:張強,年齡23,考試分數:語文75,數學82,英語78
2 給學生添加一門python課程成績,李明60分,張強:80分

tongxue1['score']['python']=60
tongxue2['score']['python']=80

3 把張強的數學成績由82分改爲89分

tongxue2['score']['shuxue']=89

4 刪除李明的年齡數據

tongxue1.pop('age')

5 對張強同窗的課程分數按照從低到高排序輸出。

b=tongxue1['score'].values()
b.sort()

6 外部刪除學生所在的城市屬性,不存在返回字符串 beijing

tongxue1.pop('chengshi',['beijing'])

 

基礎篇18習題:
1. 已知字符串 a = "aAsmr3idd4bgs7Dlsf9eAF",要求以下
1.1 請將a字符串的大寫改成小寫,小寫改成大寫。

print a.swapcase()

1.2 請將a字符串的數字取出,並輸出成一個新的字符串。

"".join([x for x in a if x.isdigit()])

1.3 請統計a字符串出現的每一個字母的出現次數(忽略大小寫,a與A是同一個字母),並輸出成一個字典。 例 {'a':4,'b':2}

[(x,a.count(x)) for x in set(a.lower())]

1.4 請去除a字符串屢次出現的字母,僅留最早出現的一個。例 'abcabb',通過去除後,輸出 'abc'

a_list = list(a) #轉換成list
set_list = list(set(a_list)) #去重之後再轉換回list
set_list.sort(key=a_list.index) #對去重之後的list進行原先的排序
print ''.join(set_list)#拼接成字符串

1.5 請將a字符串反轉並輸出。例:'abc'的反轉是'cba'

print a[::-1]

1.6 去除a字符串內的數字後,請將該字符串裏的單詞從新排序(a-z),而且從新輸出一個排序後的字符 串。(保留大小寫,a與A的順序關係爲:A在a前面。例:AaBb)
a = "aAsmr3idd4bgs7Dlsf9eAF"

l = sorted(a)

a_upper_list = []
a_lower_list = []

for x in l:
    if x.isupper():
        a_upper_list.append(x)
    elif x.islower():
        a_lower_list.append(x)
    else:
        pass

for y in a_upper_list:
    y_lower = y.lower()
    if y_lower in a_lower_list:
        a_lower_list.insert(a_lower_list.index(y_lower),y)

print ''.join(a_lower_list)

1.7 請判斷 'boy'裏出現的每個字母,是否都出如今a字符串裏。若是出現,則輸出True,不然,則輸 出False.
a = "aAsmr3idd4bgs7Dlsf9eAF"
search = 'boy'

u = set(a)
u.update(list(search))
print len(set(a)) == len(u)
a = "aAsmr3idd4bgs7Dlsf9eAF"
print set('boy').issubset(set(a))

1.8 要求如1.7,此時的單詞判斷,由'boy'改成四個,分別是 'boy','girl','bird','dirty',請判斷如上這4個字符串裏的每一個字母,是否都出如今a字符串裏。

a = "aAsmr3idd4bgs7Dlsf9eAF"
search = ['boy','girl','bird','dirty']

b = set(a)
for i in search:
b.update(list(i))

print len(b) == len(set(a))

##另外一個解答:

a = "aAsmr3idd4bgs7Dlsf9eAF"
lst=['boy','girl','bird','dirty']
s=''.join(lst)
print set(s).issubset(set(a))

1.9 輸出a字符串出現頻率最高的字母

l = ([(x,a.count(x)) for x in set(a)])
l.sort(key = lambda k:k[1],reverse=True)
print l[0][0]

2.在python命令行裏,輸入import this 之後出現的文檔,統計該文檔中,"be" "is" "than" 的出現次數。

import os
m = os.popen('python -m this').read()
m = m.replace('\n','')
l = m.split(' ')
print [(x,l.count(x)) for x in ['be','is','than']]

3.一文件的字節數爲 102324123499123,請計算該文件按照kb與mb計算獲得的大小。

size = 102324123499123

print '%s kb'%(size >> 10)
print '%s mb'% (size >> 20)

4.已知 a = [1,2,3,6,8,9,10,14,17],請將該list轉換爲字符串,例如 '123689101417'.

a = [1,2,3,6,8,9,10,14,17]

print str(a)[1:-1].replace(', ','')

 

python 語句1.1:
print重定向>>

f=open('aa.txt','w')
print >>f,'hahahahaha'
f.close()

 


進階承上啓下:
一:安裝使用virtualenv,成功之後截個圖。

二:把基礎篇所學的:字符串,列表,元組,字典,集合。
從下面幾個方面進行比較和總結:
1 是否支持邊界檢查
2 索引方法特色
3 哪些支持迭代協議
4 元素訪問的特色,是順序的仍是無序的
列表元組有序,字典無序
5 哪些是可變和哪些是不可變的
元組不可變、字符串不可變 int不可變
6 哪些支持多層嵌套


三:經過基礎篇的學習,說出你最喜歡python的哪一點,爲何?



函數第一節:
習題:
1.定義一個方法 func,該func能夠引入任意多的整型參數,結果返回其中最大與最小的值。

def num(*num):
#遍歷參數列表,判斷參數類型是否爲整形
    for i in num:
        if not isinstance(i,int):
            return '參數錯誤,參數必須爲整數'
    return max(num),min(num)

2.定義一個方法func,該func能夠引入任意多的字符串參數,結果返回(長度)最長的字符串。

def fun2(*num2):
b=[]
for i in num2:
    if isinstance(i,str):
        b.append(i)
    else:print "xx"
    print "max string is %s" % max(b, key=lambda x:len(x))

3.定義一個方法get_doc(module),module參數爲該腳本中導入或定義的模塊對象,該函數返回module的幫助文檔。

def get_doc(modu):
print modu.__doc__

4.定義一個方法get_text(f),f參數爲任意一個文件的磁盤路徑,該函數返回f文件的內容。
>>> def get_text(f):
... a=open(f)
... return a.read()

5.定義一個方法get_dir(folder),folder參數爲任意一個文件夾,該函數返回folder文件夾的文件列表。提示(能夠了解python的glob模塊)

import glob
def get_dir(d):
    for i in glob.glob(d+'\*'):
        return i

 

函數第二節:
習題:
1 定義一個方法get_num(num),num參數是列表類型,判斷列表裏面的元素爲數字類型。其餘類型則報錯,而且返回一個偶數列表:(注:列表裏面的元素爲偶數)。

def get_num(num):
    b=[]
    for i in num:
        if isinstance(i,int):
            b.append(i)
    return [x for x in b if x%2==0]

print get_num([1,3,5,6,7,4,3,2])

2 定義一個方法get_page(url),url參數是須要獲取網頁內容的網址,返回網頁的內容。提示(能夠了解python的urllib模塊)。

def get_page(url):
     if not (url.startswitch('http://')) or url.startswitch('https://'):
          return u'url地址不對'
    date=urllib2.urlopen(url)
    return date.read()
print get_page('http://www.baidu.com')

3 定義一個方法 func,該func引入任意多的列表參數,返回全部列表中最大的那個元素。

def func(num):
    return max(num)
print func([1,3,5,6,7,7,3])

4 定義一個方法get_dir(f),f參數爲任意一個磁盤路徑,該函數返回路徑下的全部文件夾組成的列表,若是沒有文件夾則返回"Not dir"。

def get_dir(f):
    if os.path.exists(f):
        return glob.glob(f+'\*')
    else:
        print "Not dir"

print get_dir("f:\\")

註明:吸收上次做業遇到的問題,要求寫的函數邏輯清楚,而且考慮一些特殊的狀況處理,能作斷言的儘可能用斷言。


 

函數第三節:
習題:
1 定義一個方法get_fundoc(func),func參數爲任意一個函數對象,返回該函數對象的描述文檔,若是該函數沒有描述文檔,則返回"not found"

2 定義一個方法get_cjsum(),求1-100範圍內的全部整數的平方和。返回結果爲整數類型。

3 定義一個方法list_info(list), 參數list爲列表對象,怎麼保證在函數裏對列表list進行一些相關的操做,不會影響到原來列表的元素值,好比:

a = [1,2,3]

def list_info(list):
'''要對list進行相關操做,不能直接只寫一句return[1,2,5],這樣就沒意義了'''

print list_info(a):返回結果:[1,2,5]

print a 輸出結果:[1,2,3]


 

函數第四節:
1 用lambda和filter完成下面功能:輸出一個列表,列表裏面包括:1-100內的全部偶數。(提示:能夠用filter,lambda)

filter(lambda x:x%2==0,range(1,100))

2 用位置匹配,關鍵字匹配,收集匹配(元組收集,字典收集)分別寫4個函數,完成功能;
傳遞3個列表參數:
[1,2,3],[1,5,65],[33,445,22]
返回這3個列表中元素最大的那個,結果是:445

def fun1(list1,list2,list3):
    c=list1+list2+list3
    return max(c)

def fun2(list1=[],list2=[],list3=[]):
    c=list1+list2+list3
    return max(c)

a=[]
def fun3(*kargs):
    for i in kargs:
        a.extend(i)
    print max(a)

def fun4(**kwargs):
    print kwargs.values()
    for key in kwargs:
        b.extend(kwargs[key])
    print max(b)

3 遞歸函數解釋,用本身的話說明這個遞歸函數的工做流程。

def func1(i):
    if i<100:
        return i + func1(i+1)
    return i
print func1(0)


函數週末習題:
#coding=utf-8
'''
1.定義一個func(name),該函數效果以下。
assert func("lilei") = "Lilei"
assert func("hanmeimei") = "Hanmeimei"
assert func("Hanmeimei") = "Hanmeimei"
'''
"""

def func(name):
return name.capitalize()

2.定義一個func(name,callback=None),效果以下。
assert func("lilei") == "Lilei"
assert func("LILEI",callback=string.lower) == "lilei"
assert func("lilei",callback=string.upper) == "LILEI"

def func2(name,callback=None):
    if callback=='string.lower':
        return name.lower()
    elif callback=="string.upper":
        return name.upper()
    else:
        return name.capitalize()

3.定義一個func(*kargs),效果以下。
l = func(1,2,3,4,5)
for i in l:
print i,
#輸出 1 2 3 4 5
l = func(5,3,4,5,6)
for i in l:
print i
#輸出 5 3 4 5 6
"""
def func3(*kargs):
return kargs
"""
4.定義一個func(*kargs),該函數效果以下。

assert func(222,1111,'xixi','hahahah') == "xixi"
assert func(7,'name','dasere') == 'name'
assert func(1,2,3,4) == None

def shortstr(*kargs):
    lis = filter(lambda x:isinstance(x,str),kargs)
    len_lis = [len(x) for x in lis]
    if len_lis:
            min_index = min(len_lis)
        return lis[len_lis.index(min_index)]
    return None

 

5.定義一個func(name=None,**kargs),該函數效果以下。
assert func(「lilei」) == "lilei"
assert func("lilei",years=4) == "lilei,years:4"
assert func("lilei",years=10,body_weight=20) == "lilei,years:4,body_weight:20"

def func4(name=None,**kwargs):
    data=[]
    for x,y in kwargs.items():
        data.extend([',',str(x),":",str(y)])
        
    info="".join(data)
    return(name,info)

 

面向對像第一節,習題:
一:定義一個學生類。有下面的類屬性:
1 姓名
2 年齡
3 成績(語文,數學,英語)[每課成績的類型爲整數]
類方法:
1 獲取學生的姓名:get_name() 返回類型:str
2 獲取學生的年齡:get_age() 返回類型:int
3 返回3門科目中最高的分數。get_course() 返回類型:int
寫好類之後,能夠定義2個同窗測試下:
zm = student('zhangming',20,[69,88,100])
返回結果:
zhangming
20
100
lq = student('liqiang',23,[82,60,99])
返回結果:
liqiang
23
99

class Student(object):
    def __init__(self,name,age,*num):
        self.name=name
        self.age=age
        self.num=num
        
    def get_name(self):
        return self.name
    
    def get_age(self):
        return self.age
    
    def get_score(self):
        b=self.num
        print max(b)
        return max(b)

二:定義一個字典類:dictclass。完成下面的功能:
dict = dictclass({你須要操做的字典對象})
1 刪除某個key
del_dict(key)
2 判斷某個鍵是否在字典裏,若是在返回鍵對應的值,不存在則返回"not found"
get_dict(key)
3 返回鍵組成的列表:返回類型;(list)
get_key()
4 合併字典,而且返回合併後字典的values組成的列表。返回類型:(list)
update_dict({要合併的字典})

class dictClass(object):
    def __init__(self,num):
        self.num=num
        print num
        
    def del_dict(self,key):
        self.key=key
        del self.num[self.key]
    
    def get_dict(self,key):
        self.key=key
        if self.num.has_key(self.key):
            return self.num[self.key]
        else:
            return "Not found"
        
    def get_key(self):
        return self.num.keys()
    
    def update_dict(self,dict):
        self.dict=dict
        self.num.update(dict)
        
     
a=dictClass({'qq':22,'yy':44})
print a.get_key()
print a.get_dict('qq')
print a.get_dict('77')

 

面向對像第二節,習題:
定義一個列表的操做類:Listinfo
包括的方法:
1 列表元素添加: add_key(keyname) [keyname:字符串或者整數類型]
2 列表元素取值:get_key(num) [num:整數類型]
3 列表合併:update_list(list) [list:列表類型]
4 刪除而且返回最後一個元素:del_key()
list_info = Listinfo([44,222,111,333,454,'sss','333'])

class ListInfo(object):
    def __init__(self,list_a):
        self.list_a=list_a
        
    def add_key(self,keyname):
        if not isinstance(keyname,int) or not isinstance(keyname.str):
            return "Input must str and int "
        self.list_a.append(keyname)
        return self.list_a
    
    def get_key(self,num):
        if not isinstance(num,int) or not num<0:
            return "num error"
        return self.list_a[num]
    
    def update_list(self,list_b):
        if not isinstance(list_b,list):
            return 'must be a list'
        return self.list_a.extend(list_b)
    
    def def_key(self):
        return self.list_a.pop()
    
list_info = ListInfo([44,222,111,333,454,'sss','333'])
print list_info.def_key()

 



定義一個集合的操做類:Setinfo
包括的方法:
1 集合元素添加: add_setinfo(keyname) [keyname:字符串或者整數類型]
2 集合的交集:get_intersection(unioninfo) [unioninfo :集合類型]
3 集合的並集: get_union(unioninfo)[unioninfo :集合類型]
4 集合的差集:del_difference(unioninfo) [unioninfo :集合類型]
set_info = Setinfo(你要操做的集合)

class Setinfo(object):
    def __init__(self,set_list):
        self.set_list=set_list
        
    def add_setinf(self,keyname):
        if not isinstance(keyname,str) or not isinstance(keyname,int):
            return "Errot"
        return self.set_list.add(keyname)
    
    def get_intersection(self,unioninfo):
        if not isinstance(unioninfo,set):
            return 'Error'
        return self.set_list & unioninfo
    
    def del_difference(self,unioninfo):
        if not isinstance(unioninfo,set):
            return "Eroor"
        return self.set_list - unioninfo

 

面向對像第三節,習題:
題目一: 寫一個網頁數據操做類。完成下面的功能:
提示:須要用到urllib模塊
get_httpcode()獲取網頁的狀態碼,返回結果例如:200,301,404等 類型爲int
get_htmlcontent() 獲取網頁的內容。返回類型:str
get_linknum()計算網頁的連接數目。

import re
import urllib
class get_url(object):
    def __init__(self,url):
        self.url=url
        print self.url
        if not self.url.startswith("http:") or self.url.startswith('https:'):
            print 'input url error'
            exit(-1)
        self.new=urllib.urlopen(self.url)
        
    def get_httpcode(self):
        httpcode=self.new.getcode()
        if httpcode ==200:
            return 'Return code is 200,OK'
        elif httpcode==301:
            return "301"
        elif httpcode==404:
            return 'not found'
        else:return 'dont know code'
        
    def get_htmlcontent(self):
        return self.new.read()
    
    def get_linknum(self):
        data=self.new.read()
        cc=re.findall('href="(http:.*?)"',data)
        return len(cc)
    
    
baidu=get_url('http://ww.baidu.com')
print baidu.get_linknum()
View Code

題目二:

class SchoolMember:
    '''Represents any school member.'''
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print '(Initialized SchoolMember: %s)' % self.name

    def tell(self):
        '''Tell my details.'''
        print 'Name:"%s" Age:"%s"' % (self.name, self.age),

class Teacher(SchoolMember):
    '''Represents a teacher.'''
    def __init__(self, name, age, salary):
        SchoolMember.__init__(self, name, age)
        self.salary = salary
        print '(Initialized Teacher: %s)' % self.name

    def tell(self):
        print 'Salary: "%d"' % self.salary

class Student(SchoolMember):
    '''Represents a student.'''
    def __init__(self, name, age, marks):
        SchoolMember.__init__(self, name, age)
        self.marks = marks
        print '(Initialized Student: %s)' % self.name

    def tell(self):
         print 'Marks: "%d"' % self.marks
t = Teacher('Mrs. Shrividya', 40, 30000)
s = Student('Swaroop', 22, 75)

members = [t, s]
for member in members:
    member.tell()
View Code

體會下這段代碼,把結果的執行流程用本身的話寫下。


 

模塊第一節:
導入模塊兩種方式:
import 模塊名
from 模塊名 import 方法
from 模塊名 import all

包的建立
方法一:
一、建立一個文件夾,包後再新建一個__init__.py文件,再次能夠建立本身的方法
二、引用
import 文件夾.方法 as 方法
print 方法.方法()
方法二:
一、建立一個文件夾,包後再新建一個__init__.py文件,再次能夠建立本身的方法
二、from 文件夾 import 方法函數

import 路徑
import sys
sys.path.append('/tmp/aa.py')

 

模塊第二節:
經常使用模塊介紹:
urllib
urllib2
datetime time
os
pickle
bsddb -數據庫
logging



習題:
習題一:
1.1 用time模塊獲取當前的時間戳.

import time
time.strftime("%Y%m%d %H:%M:%S")

1.2 用datetime獲取當前的日期,例如:2013-03-29

from datetime import date
print date.today()

1.3 用datetime返回一個月前的日期:好比今天是2013-3-29 一個月前的話:2013-02-27


習題二:
1 用os模塊的方法完成ping www.baidu.com 操做。

import subprocess
subprocess.call('ping www.baidu.com',shell=True)

2 定義一個函數kouzhang(dirpwd),用os模塊的相關方法,返回一個列表,列表包括:dirpwd路徑下全部文件不重複的擴展名,若是有2個".py"的擴展名,則返回一個".py"。

import os
def kouzhang(dirpwd)
c=[]
dirpwd=raw_input('please input your dir:')
if not os.path.isdir(dirpwd):
    return "Please input a dir"
for i in os.listdir(dirpwd):
    if not os.path.isdir(dirpwd+i):
        c.append(i.split('.')[-1])
        return list(set(c))
View Code

習題三:
定義一個函數xulie(dirname,info) 參數:dirname:路徑名,info:須要序列化的數據,功能:將info數據序列化存儲到dirname路徑下隨機的文件裏。
pickle json

import pickle,random
def xulie(dirname,info):  
    if not os.path.exists(dirname):  
        return 'Not found!'  
    a = pickle.dumps(info)  
    filename = ''  
    for i in range(10):  
        filename=filename+random.choice('abcedfghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ1234567890')  
    filepath = os.path.join(dirname,filename)  
    f = open(filepath,'a+')  
    f.write(a)  
    f.close()  
a=[1,2,3,4,5,6,7]  
xulie('C:\Users\Administrator\Desktop',a)  
View Code

 

異常1.1
習題:
1 定義一個函數func(filename) filename:文件的路徑,函數功能:打開文件,而且返回文件內容,最後關閉,用異常來處理可能發生的錯誤。

#coding:utf-8
def open_file(filename):
    try:
        f=open(filename)
        return f.read()
    except IOError:
        return "Open file Error"
    finally:
        if 'data' in locals():
            f.close()
        
print open_file('ip.txt')
View Code

2 定義一個函數func(urllist) urllist:爲URL的列表,例如:['http://xx.com','http://www.xx.com','http://www.xxx.com'...]
函數功能:要求依次打開url,打印url對應的內容,若是有的url打不開,則把url記錄到日誌文件裏,而且跳過繼續訪問下個url。

def get_url(url_list):
    for url in url_list:
        try:   
            print url
            date=urllib.urlopen(url)
                #return date.read()
            print date.read()
        except: 
            file_txt=open('error.txt','a+')
            file_txt.write(str(date.getcode())+'Error\n')
            return 'Error'
     
print get_url(['http://www.baidu.com','http://www.qq.com','http://www.xxx.com','www.qq.com'])            
View Code

3 定義一個函數func(domainlist) domainlist:爲域名列表,例如:['xx.com','www.xx.com','www.xxx.com'...]
函數功能:要求依次ping 域名,若是ping 域名返回結果爲:request time out,則把域名記錄到日誌文件裏,而且跳過繼續ping下個域名。(提示用os模塊的相關方法)



異常處理1.3習題:

一 編寫with操做類Fileinfo(),定義__enter__和__exit__方法。完成功能:

1.1 在__enter__方法裏打開Fileinfo(filename),而且返回filename對應的內容。若是文件不存在等狀況,須要捕獲異常。

1.2 在__enter__方法裏記錄文件打開的當前日期和文件名。而且把記錄的信息保持爲log.txt。內容格式:"2014-4-5 xxx.txt"


二:用異常方法,處理下面需求:

info = ['http://xxx.com','http:///xxx.com','http://xxxx.cm'....]任意多的網址

2.1 定義一個方法get_page(listindex) listindex爲下標的索引,類型爲整數。 函數調用:任意輸入一個整數,返回列表下標對應URL的內容,用try except 分別捕獲列表下標越界和url 404 not found 的狀況。

2.2 用logging模塊把404的url,記錄到當前目錄下的urlog.txt。urlog.txt的格式爲:2013-04-05 15:50:03,625 ERROR http://wwwx.com 404 not foud、


三:定義一個方法get_urlcontent(url)。返回url對應內容。

要求:

1本身定義一個異常類,捕獲URL格式不正確的狀況,而且用logging模塊記錄錯誤信息。

2 用內置的異常對象捕獲url 404 not found的狀況。而且print 'url is not found'


 

模塊:
習題一:
1.1 用time模塊獲取當前的時間戳.

time.asctime()

1.2 用datetime獲取當前的日期,例如:2013-03-29
1.3 用datetime返回一個月前的日期:好比今天是2013-3-29 一個月前的話:2013-02-27

習題二:
1 用os模塊的方法完成ping www.baidu.com 操做。
2 定義一個函數kouzhang(dirpwd),用os模塊的相關方法,返回一個列表,列表包括:dirpwd路徑下全部文件不重複的擴展名,若是有2個".py"的擴展名,則返回一個".py"。

習題三:定義一個函數xulie(dirname,info) 參數:dirname:路徑名,info:須要序列化的數據,功能:將info數據序列化存儲到dirname路徑下隨機的文件裏。

相關文章
相關標籤/搜索