Python程序設(shè)計(jì)方案習(xí)題與答案_第1頁
Python程序設(shè)計(jì)方案習(xí)題與答案_第2頁
Python程序設(shè)計(jì)方案習(xí)題與答案_第3頁
Python程序設(shè)計(jì)方案習(xí)題與答案_第4頁
Python程序設(shè)計(jì)方案習(xí)題與答案_第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

?Python程序設(shè)計(jì)》習(xí)題與參照答案

第1章基本知識

1.1簡樸闡明如何選取對的Python版本。

答:

在選取Python時(shí)候,一定要先考慮清晰自己學(xué)習(xí)Python目是什么,打算做哪方面開發(fā),

有哪些擴(kuò)展庫可用,這些擴(kuò)展庫最高支持哪個(gè)版本Python,是Python2.x還是Python3.x,最

高支持到Python276還是Python2.7.9。這些問題都擬定后來,再做出自己選取,這樣才干

事半功倍?,而不至于把大量時(shí)間揮霍在Pylhon重復(fù)安裝和卸載上。同步還應(yīng)當(dāng)注意,當(dāng)更新

Python版本推出之后,不要急于更新,而是應(yīng)當(dāng)?shù)葦M定自己所必要使用擴(kuò)展庫也推出了較新

版本之后再進(jìn)行更新。

盡管如此,Pylhon3也竟是大勢所趨,如果您暫時(shí)還沒想到要做什么行業(yè)領(lǐng)域應(yīng)用開發(fā),

或者僅僅是為了嘗試一種新、好玩語言,那么請亳不躊躇地選取Python3.x系列最高版本

(當(dāng)前是Python3.4.3)。

1.2為什么說Python采用是基于值內(nèi)存管理模式?

答:

Pylhon采用是基于值內(nèi)存管理方式,如果為不同變量賦值相似值,則在內(nèi)存中只有一份該值,

各種變量指向同一塊內(nèi)存地址,例如下面代碼。

?>x=3

?>id(x)

10417624

?>y=3

?>id(y)

10417624

?>y=5

?>id(y)

10417600

?>id(x)

10417624

?1.3在Python中導(dǎo)入模塊中對象有哪幾種方式?

?答:慣用有三種方式,分別為

?import模塊名[as別名]

?from模塊名import對象名[as別名]

?frommathimport*

1.4使用pip命令安裝numpyxscipy模塊。

答:在命令提示符環(huán)境卜執(zhí)行卜面命令:

pipinstallnumpy

pipinstallscipy

1.5編寫程序,顧客輸入一種三位以上整數(shù),輸出其百位以上數(shù)字。例如顧客輸入1234,

則程序輸出12。(提示:使用整除運(yùn)算。)

答:

1)Python3.4.2代碼:

x=input(*Pleaseinputanintegerofmorethan3digits:1)

try:

x=int(x)

x=x//100

ifx==0:

print('Youmustinputanintegerofmorethan3digits.')

else:

print(x)

exceptBaseException:

print('Youmustinputaninteger.')

2)Python2.7.8代碼:

importtypes

x=inputfPleaseinputanintegerofmorethan3digits:1)

iftypc(x)!=typcs.IntTypc:

print'Youmustinputaninteger.,

eliflen(str(x))!=4:

print'Youmustinputanintegerofmorethan3digits.,

else:

printx//100

第2章Python數(shù)據(jù)構(gòu)造

2.1為什么應(yīng)盡量從列表尾部進(jìn)行元素增長與刪除操作?

答:

當(dāng)列表增長或刪除元素時(shí),列表對象自動(dòng)進(jìn)行內(nèi)存擴(kuò)展或收縮,從而保證元素之間沒有

縫隙,但這涉及到列表元素移動(dòng),效率較低,應(yīng)盡量從列表尾部進(jìn)行元索增長與刪除操作以提

高解決速度。

2.2編寫程序,生成包括1000個(gè)0到100之間隨機(jī)整數(shù),并記錄每個(gè)元素浮現(xiàn)次數(shù)。

(提示:使用集合。)

答:

1)Python3.4.2代碼

importrandom

x=[random.randint(0,100)foriinrange。000)]

d=set(x)

forvind:

print(v,x.count(v))

2)Pylhon2.7.8代碼

importrandom

x=[random.randint(0,100)foriinrange(IOOO)]

d=set(x)

forvind:

printv,x.count(v)

2.3編寫程序,顧客輸入一種列表和2個(gè)整數(shù)作為下標(biāo),然后輸出列表中介于2個(gè)下標(biāo)之

間元素構(gòu)成子列表。例如顧客輸入[1,234,5,6]和2,5,程序輸出[345,6]。

答:

1)Pylhon3.4.2代碼

x=inputCTIeaseinputalist:')

x=eval(x)

start,end=cval(input('Plcascinputthestartpositionandtheendposition:'))

print(x[start:end])

2)Pylhon2.7.8代碼

x=input(*Pleaseinputalist:')

start,end=input('Plcascinputthestartpositionandtheendposition:*)

printx[start:end]

2.4設(shè)計(jì)一種字典,并編寫程序,顧客輸入內(nèi)容作為鍵,然后輸出字典中相應(yīng)值,如果顧客

輸入鍵不存在,則輸出“您輸入鍵不存在!”

答:

1)Python3.4.2代碼

d={l:'a,,2:'b',3:'c',4:'d')

v=input(*Plcascinputakey:')

v-eval(v)

print(d.get(v;您輸入鍵不存在))

2)Python2.7.8代碼

d={l:'a;2:*b;3:fc',4:'d'}

v=inpu(('Pleaseinputakey:')

print(d.get(v,'您輸入鍵不存在,))

2.5編寫程序,生成包括20個(gè)隨機(jī)數(shù)列表,然后將前10個(gè)元素升序排列,后10個(gè)元素降

序排列,并輸出成果。

答:

1)Python3.4.2代碼

importrandom

x=[random.randint(0,100)foriinrange(20)]

print(x)

y=xf0:10]

y.sort()

x[0:l0]=y

y=x[10:20]

y.sort(reverse=True)

x[10:20]=y

print(x)

2)Python2.7.8代碼

importrandom

x=Irandom.randint((),100)foriinrange(20)J

printx

y=x[0:10]

y.sort()

x[0:101=y

y=xl10:20]

y.sort(reverse=True)

x[10:20]=y

printx

2.6在Python中,字典和集合都是用一對大括號作為定界符,字典每個(gè)元素有兩某些

構(gòu)成,即鍵和值,其中鍵不容許重復(fù)。

2.7假設(shè)有列表a=「name','age','sex,]和b=['Dong',38,'Male'],請使用一種語句將這兩個(gè)

列表內(nèi)容轉(zhuǎn)換為字典,并且以列表a中元素為鍵,以列表b中元素為值,這個(gè)語句可以寫為c

=dict(zip(a,b))o

2.8假設(shè)有一種列表a,現(xiàn)規(guī)定從列表a中卷3個(gè)元素取1個(gè),并旦將取到元素構(gòu)成新列表b,

可以使用語句b=a[::3]o

2.9使用列表推導(dǎo)式生成包括10個(gè)數(shù)字5列表,語句可以寫為[5foriinranged0)]o

2.10不可以(可以、不可以)使用del命令來刪除元組中某些元素。

第3章選取構(gòu)造與循環(huán)構(gòu)造

3.1分析邏輯運(yùn)算符“or”短路求值特性。

答:

假設(shè)有表達(dá)式“表達(dá)式1or表達(dá)式2",如果表達(dá)式1值等價(jià)于True,那么無論表達(dá)式

2值是什么,整個(gè)表達(dá)式值總是等價(jià)于True。因而,不需要再計(jì)算表達(dá)式2值。

3.2編寫程序,運(yùn)營后顧客輸入4位整數(shù)作為年份,判斷其與否為閏年。如果年份能被

400整除,則為閏年;如果年份能被4整除但不能被100整除也為閏年。

答:

1)Python3.4.2代碼

x=input('Plcascinputanintegerof4digitsmeaningtheyear:')

x=eval(x)

ifx%400==0or(x%4==0andnotx%100==0):

print('Yes')

else:

print('No')

2)Python2.7.8代碼

x=input(*Pleaseinputanintegerof4digitsmeaningtheyear:1)

ifx%400==0or(x%4==0andnotx%100==0):

print'Yes,

else:

print'No'

3.3編寫程序,生成一種包括50個(gè)隨機(jī)整數(shù)列表,然后刪除其中所有奇數(shù)。(提示:從后

向前刪。)

答:

1)Python3.4.2代碼

importrandom

x=[random.randint(0,1(X))foriinrange(5())]

print(x)

i=len(x)-l

whilei>=0:

ifx[il%2==l:

delx[i]

i-=l

print(x)

2)Python2.7.8代碼

把上面代碼中第三行和最后一行改為printx即可。

34編寫程序,生成一種包括20個(gè)隨機(jī)整數(shù)列表,然后對其中偶數(shù)下標(biāo)元素進(jìn)行降序排

列,奇數(shù)下標(biāo)元素不變。[提示:使用切片。)

答:

1)Python3.4.2代碼

importrandom

x=[random.randint(0.100)foriinrange(20)]

print(x)

y=x[::2]

y.sort(reverse=True)

x[::2]=y

print(x)

2)Python2.7.8代碼

把上面代碼中第三行和最后一行改為printx即可。

35編寫程序,顧客從鍵盤輸入不大于1000整數(shù),對其進(jìn)行因式分解。例如,10=2X5,

60=2X2X3X5。

父口??

1)Python3.4.2代碼

x=input('Pleaseinputanintegerlessthan1000:')

x=eval('x')

t=x

i=2

result=[]

whileTrue:

ift==l:

break

ift%i==O:

result.appcnd(i)

t=(/i

else:

i+=l

Printx,'=','*'.join(map(str,result))

2)Python27g代碼

x=input('Pleaseinputanintegerlessthan1000:')

t=x

i=2

result=[]

whileTrue:

ift==l:

break

ift%i==O:

result.append(i)

t=t/i

else:

i+=l

printx,'=','*'.join(map(slr,result))

3.6編寫程序,至少使用2種不同辦法計(jì)算100以內(nèi)所有奇數(shù)和。

答:Python3.4.2代碼如下,如果使用Python2.7.8只需要把其中print。函數(shù)改為print語句即

可。

x=[iforiinrange(UOO)ifi%2==1]

print(sum(x))

print(sum(range(1,100)1::2]))

3.7編寫程序,實(shí)y

現(xiàn)分段函數(shù)計(jì)算,

如下表所示。

X

x<00

0<=x<5X

5<=x<103x-5

10<=x<200.5x-2

20<=x0

答:Python3.4.2代碼如下,如果使用Python2.7.8只需要把其中print。函數(shù)改為print語句即

可。

x=input('Pleaseinputx:')

x=cval(x)

ifx<0orx>=20:

print(O)

elif()<=x<5:

print(x)

clif5<=x<10:

print(3*x-5)

elif10<=x<20:

print(O.5*x-2)

第4章字符串與正則表達(dá)式

4.1假設(shè)有一段英文,其中有單獨(dú)字母“I”誤寫為“i”,請編寫程序進(jìn)行糾正。

答:這里給出Python3.4.2代碼,如果使用Python278話只需要修改其中print。函數(shù)為

print語句即可。

1)不使用正則表達(dá)式

x="iamateacherjamman,andiam38yearsold.Iamnotabusinessman."

x=x.replace('i\'I')

x=x.replaceCiI')

print(x)

2)使用正則表達(dá)式

x="iamateacherjainman,andiam38yearsold.Iamnotabusinessman."

importre

pattern=pile(r'(?:[A\w]|\b)i(?:[A\wj),)

whileTrue:

result=pattern.search(x)

ifresult:

ifresult.start(O)!=0:

x=x[:result.start(O)+l]+'r+x[result.end(O)-l:]

else:

x=x[:result.start(0)]+'I'4-x[result.end(0)-1:]

else:

break

print(x)

4.2假設(shè)有一段英文,其中有單詞中間字母“i”誤寫為“I”,請編寫程序進(jìn)行糾正,

答:這里給出Python3.4.2代碼,如果使用Python2.7.8話只需要修改其中print。函數(shù)為print

語句即可。

importre

x="Iamateacher,!amman,andIam38yearsold.Iamnotabusinessman."

print(x)

pattern=pile(r'(?:[\w])I(?:[\w])')

whileTrue:

result=pattern.search(x)

ifresult:

ifresult.start(O)!=0:

x=x[:rcsult.start(O)+l]+*i'+x[d(O)-l:]

else:

x=x[:result.start(O)J+'i'+x[result.end(O)-1:]

else:

break

print(x)

4.3有一段英文文本,其中有單詞持續(xù)重復(fù)了2次,編寫程序檢查重復(fù)單詞并只保存一

種o例如文本內(nèi)容為“Thisisisadesk.",程序輸出為“Thisisadesk.”

答:這里給出Python3.4.2代碼,如果使用Python2.7.8話只需要修改其中print。函數(shù)為

print語句即可。

1)辦法一

importre

x='Thisisaadesk.'

pattern=pile(r'\b(\w4-)(\s+\l){1,}\b')

matchResult=pattern.search(x)

x=pattern.sub(matchResult.group(1),x)

print(x)

2)辦法二

x='Thisisaadesk.'

pattern=re.conipile(r'(?P<f>\b\w+\b)\s(?P=f)')

matchResult=pattern.search(x)

x=x.replace(matchResult.group(0),matchResult.group(I))

4.4簡樸解釋Python字符串駐留機(jī)制。

答:

Python支持字符串駐留機(jī)制,即:對于短字符串,將其賦福給各種不同對象時(shí),內(nèi)存中只有一

種副本,各種對象共享該副本。這一點(diǎn)不合川于長字符串,即氏字符串不遵守駐留機(jī)制,下面

代碼演示了短字符串和長字符串在這方面區(qū)別。

>?a='1234'

>?b='l234'

?>id(a)==id(b)

True

?>a='i234'*50

>?b='1234'*50

?>id(a)==id(b)

False

4.5編寫程序,顧客輸入一段英文,然后輸出這段英文中所有長度為3個(gè)字母單詞。

答:這里給出Python3.4.2代碼,如果使用Python2.7.8話只需要修改其中print。函數(shù)為print

語句即可。

importrc

x=input(*Pleaseinputastring:')

pattern=pile(r'\b[a-zA-Z]{3}\b')

print(pattern.findall(x))

第5章函數(shù)設(shè)計(jì)與使用

5.1運(yùn)營5.3.1小節(jié)最后示例代碼,查當(dāng)作果并分析因素。

答:因素是對于函數(shù)默認(rèn)值參數(shù)只會(huì)被解決一次,下次再調(diào)用函數(shù)并且不為默認(rèn)值參數(shù)

賦值時(shí)會(huì)繼續(xù)使用上一次成果,對于列表這樣構(gòu)造,如果調(diào)用函數(shù)時(shí)為默認(rèn)值參數(shù)列表插入

或刪除了元素,將會(huì)得到保存,從而影響下一次調(diào)用。

5.2編寫函數(shù),判斷一種整數(shù)與否為素?cái)?shù),并編寫主程序調(diào)用該函數(shù)。

答:這里給出Python3.4.2代碼,如果使用Python2.7.8話只需要修改其中print。函數(shù)為print

語句即可。

importmath

defIsPrime(v):

n=int(math.sqrt(v)+l)

foriinrange(2,n):

ifv%i==0:

return'No'

else:

return'Yes'

print(IsPrime(37))

print(IsPrime(60))

print(IsPrime(l13))

5.3編寫函數(shù),接受一種字符串,分別記錄大寫字母、小寫字母、數(shù)字、其她字符個(gè)數(shù),

并以元組形式返回成果。

答:這里給出Python3.4.2代碼,如果使用Python2.7.8話只需要修改其中print。函數(shù)為print

語句即可。

defdemo(v):

capital=little=digit=o:hcr=0

foriinv:

if'A'<=i<='Z':

capital+=l

elif'a'<=i<-z':

little+=l

elif'0'<=i<='9':

digit+=l

else:

other+=1

return(capital,little,digit,other)

x='capital=little=digit=other=0'

print(demo(x))

5.4在Python程序中,局部變量會(huì)隱藏同名全局變量嗎?請編寫代碼進(jìn)行驗(yàn)證。

答案:會(huì)。

?>defdemo():

a=3

printa

?>a=5

?>demo()

3

?>a

5

5.5編寫函數(shù),可以接受任意各種整數(shù)并輸出其中最大值和所有整數(shù)之和。

答:這里給出Python3.4.2代碼,如果使用Python2.7.8話只需要修改其中print。函數(shù)為print

語句即可,

defdemo(*v):

print(v)

prinl(max(v))

print(sum(v))

demo(1,2,3)

demo(l,2,3,4)

demo(l,2,3,4,5)

5.6編寫函數(shù),模仿內(nèi)置函數(shù)sum()。

答:這里給出Python3.4.2代碼,如果使用Python2.7.8話只需要修改其中print。函數(shù)為print

語句即可。

defSum(v):

s=0

foriinv:

s+=i

returns

x=[1,2,3,4,5]

print(Sum(x))

x二(123,4,5)

print(Sum(x))

5.7編寫函數(shù),模仿內(nèi)置函數(shù)sorted。。

答:這里給出Python3.4.2代碼,如果使用Python2.7.8話只需要修改其中print。函數(shù)為print

語句即可o

defSor(ed(v):

t=v[::]

r=[]

whilet:

tt=min(t)

r.append(tt)

t.remove(tt)

returnr

x=[1,3,5,24,0,9,7]

print(x)

prini(Sorted(x))

第6章面向?qū)ο蟪绦蛟O(shè)計(jì)

6.1繼承6.5節(jié)例2中Person類生成Student類,填寫新函數(shù)用來設(shè)立學(xué)生專業(yè),然后生

成該類對象并顯示信息。

答:Python3.4.2代碼為

importtypes

classPerson(object):#基類必要繼承于object,否則在派生類中將無法使用super。函數(shù)

def—init_(self,name=",age=20,sex='man'):

self.setName(narne)

self,setAge(age)

self.setSex(sex)

defselName(self,name):

ifnotisinstance(name,str):

print('namemustbestring.')

return

self.—name=name

defsetAge(self,age):

ifnotisinstance():

print('agemustbeinteger.')

return

self.—age=age

defsetSex(self,sex):

ifsex!='man'andsex!='woman':

print('scxmustbe"man"or"woman"')

return

self.—sex=sex

defshow(self):

print(self.—name)

print(self._age)

print(self._sex)

classStudent(Person):

def_init_(self,name=',age=30,sex='man',major=Computer'):

#調(diào)用基類構(gòu)造辦法初始化基類私有數(shù)據(jù)成員

supcr(Studcnt,self).—init_(name,age,sex)

seif.setMajor(major)#初始化派生類數(shù)據(jù)成員

defsetMajor(self,m可or):

ifnotisinstance(major,str):

print('majormustbeastring.*)

return

self._major=major

defshow(self):

super(Student,self).show()

prinl(self._major)

if—name-==*_main—

zhangsan=Person('ZhangSan',19,'man')

zhangsan.show()

lisi=Studcnt('LiSi',32,'man;'Math')

lisi.show()

6.2設(shè)計(jì)一種三維向量類,并實(shí)現(xiàn)向量加法、減法以及向量與標(biāo)量乘法和除法運(yùn)算。

答:Python3.4.2代碼如下

classVcctcr3:

def_init_(self,x=0,y=0,z=0):

self.X=x

self.Y=y

self.Z=z

def_add_(self,n):

r=Vecter3()

r.X=self.X+n.X

r.Y=self.Y+n.Y

r.Z=self.Z+n.Z

returnr

def—sub_(self,n):

r=Vecter3()

r.X=self.X-n.X

r.Y=self.Y-n.Y

r.Z=self.Z-n.Z

returnr

def_mul_(self,n):

r=Vecter3()

r.X=self.X*n

r.Y=self.Y*n

r.Z=self.Z*n

returnr

def_truediv_(self,n):

r=Vecter3()

r.X=self.X/n

r.Y=self.Y/n

r.Z=self.Z/n

returnr

def_floordiv_(self,n):

r=Vecter3()

r.X=self.X//n

r.Y=self.Y//n

r.Z=self.Z//n

returnr

defshow(self):

print((self.X,self.Y,self.Z))

vI=Vecter3(1,2,3)

v2=Vecter3(4,5,6)

v3=v1+v2

v3.show()

v4=v1-v2

v4.show()

v5=vl*3

v5.show()

v6=v1/2

v6.show()

6.3面向?qū)ο蟪绦蛟O(shè)計(jì)三要素分別為封裝、繼承和多態(tài)。

6.4簡樸解釋Python中如下劃線開頭變量名特點(diǎn)。

答:

?在Python中,如下劃線開頭變量名有特殊含義,特別是在類定義中。用下劃線作為

變量前綴和后綴來表達(dá)類特殊成員:

?_xxx:這樣對象叫做保護(hù)變量,不能用'frommoduleimport*'導(dǎo)入,只有類對象和子

類對象能訪問這些變量;

XXX—:系統(tǒng)定義特殊成員名字:

_xxx:類中私有成員,只有類對象自己能訪問,子類對象也不能訪問到這個(gè)成員,但在對象外

部可以通過“對象名?一類名_xxx”這樣特殊方式來訪問。Python中沒有純粹C++意義上私

有成員。

6.5與運(yùn)算符“**”相應(yīng)特殊辦法名為_pow_(),與運(yùn)算符“〃”相應(yīng)特殊辦法名為

_floordiv_()o

第7章文獻(xiàn)操作

7.1假設(shè)有一種英文文本文獻(xiàn),編寫程序讀取其內(nèi)容,并將其中大寫字母變?yōu)樾懽帜?

小寫字母變?yōu)榇髮懽帜浮?/p>

答:

f=opcn(r'd:\l.txf,'r')

s=f.readlines()

f.close()

r=[i.swapcaseOforiins]

f=open(r'd:\2.lxr,'w')

f.writelincs(r)

f.close()

7.2編寫程序,將包括學(xué)生成績字典保存為二進(jìn)制文觥,然后再讀取內(nèi)容并顯示,

答:Python3.4.2代碼

importpickle

d=1張三,:98,'李四':90,'王五FOO)

print(d)

f=opcn('scorc.dat','wb')

pickle.dump(l,f)

pickle.dump(d,f)

f.close

f=opcnCscore.dat',W)

pickle.load(f)

d=pickle.load(f)

f.close()

print(d)

7.3使用shutil模塊中move。辦法進(jìn)行文獻(xiàn)移動(dòng)。

答:

importshutil

?>shutil.movc(r'd:\l.txt',r'e:\l.txt')

'e:\\l.txf

7.4簡樸解釋文本文獻(xiàn)與二進(jìn)制文獻(xiàn)區(qū)別。

答:

(1)文本文獻(xiàn)

文本文獻(xiàn)存儲(chǔ)是常規(guī)字符串,由若干文本行構(gòu)成,普通每行以換行符5結(jié)尾。常規(guī)字符

串是指記事本或其她文本編輯器能正常顯示、編輯并且人類可以直接閱讀和理解字符串,如

英文字母、中文、數(shù)字字符串。文本文獻(xiàn)可以使用字解決軟件如gedit、記事本進(jìn)行編責(zé)。

(2)二進(jìn)制文獻(xiàn)

二進(jìn)制文獻(xiàn)把對象內(nèi)容以字節(jié)串(bytes)進(jìn)行存儲(chǔ),無法用記事本或其她普通字解決軟件

直接進(jìn)行編輯,普通也無法被人類直接閱讀和理解,需要使用專門軟件進(jìn)行解碼后讀取、顯

示、修改或執(zhí)行。常用如圖形圖像文獻(xiàn)、音視頻文獻(xiàn)、可執(zhí)行文獻(xiàn)、資源文獻(xiàn)、各種數(shù)據(jù)

庫文獻(xiàn)、各類office文檔等都屬于二進(jìn)制文獻(xiàn)。

7.5編寫代碼,將當(dāng)前工作目錄修改為“c:\”,井驗(yàn)證,最后將當(dāng)前工作目錄恢狂為本來目

錄。

答:

?>importos

?>os.getcwd()

,C:\\Python341

?>os.chdir(r'c:W)

?>os.getcwd()

'c:\V

?>os.chdir(r'c:\Python34'?

?>os.getcwd()

'c:\\Python34'

7.6編寫程序,顧客輸入一種Fl錄和一種文獻(xiàn)名,搜索該目錄及其子目錄中與否存在該文

獻(xiàn)。

答:

1)Python3.4.2代碼

importsys

importos

directory=sys.argv[I]

filename=sys.argv[2]

paths=os.walk(directory)

forroot,dirs,filesinpaths:

iffilenameinfiles:

print('Ycs')

break

else:

print('No')

2)Py【hon2.7.8代碼

importsys

importos

directory=sys.argv[I]

filename=sys.argv[2]

paths=os.walk(directory)

forroot,dirs,filesinpaths:

iffilenameinfiles:

print'Yes'

break

else:

print'No'

第8章異常解決構(gòu)造與程序調(diào)試

8.1Python異常解決構(gòu)造有哪幾種形式?

答:

比較慣用形式有:

1)原則異常解決構(gòu)造

try:

try塊#被監(jiān)控語句,也許會(huì)引起異常

exceptException!,reason]:

except塊#解決異常代碼

如果需要捕獲所有異常時(shí).可以使用BaseException,代碼格式如下:

try:

exceptBaseException,e:

except塊#解決所有錯(cuò)誤

上面構(gòu)造可以捕獲所有異常,盡管這樣做很安全,但是普通并不建議這樣做。對于異常

解決構(gòu)造,普通建議是盡量顯式捕獲也許會(huì)浮現(xiàn)異常并且有針對性地編寫代碼進(jìn)行解決,由

于在實(shí)際應(yīng)用開發(fā)中,很難使用同一段代碼去解決所有類型異常。固然,為了避免漏掉沒有

得到解決異常干擾程序正常執(zhí)行\(zhòng)在捕獲了所有也許想到異常之后,您也可以使用異常解決

構(gòu)造最后一種excep【來捕獲BaseExc叩lion。

2)此外一種慣用異常解決構(gòu)造是iry...except...else...語句。

3)在實(shí)際開發(fā)中,同一段代碼也許會(huì)拋出各種異常,需要針對不同異常類型進(jìn)行相應(yīng)解決。

為了支持各種異常捕獲和解決,Python提供了帶有各種except異常解決構(gòu)造,此類似于多分

支選取構(gòu)造,一旦某個(gè)except捕獲了異常,則背面剩余except子句將不會(huì)再執(zhí)行。語法為:

try:

try塊#被監(jiān)控語句

exceptException1:

excepi塊I#解決異常I語句

exceptException?:

except塊2#解決異常2語句

4)將要捕獲異常寫在一種元組中,可以使用一種except語句捕獲各種異常,并且共用

同一段異常解決代碼,固然,除非擬定要捕獲各種異??梢允褂猛欢未a來解決,并不建議

這樣做。

5)最后一種慣用異常解決構(gòu)造是try…except...finally...構(gòu)造。在該構(gòu)造中,finally子句中內(nèi)存

無論與否發(fā)生異常都會(huì)執(zhí)行,慣用來做某些清理工作以釋放iry子句中申請資源。語法如

下:

try:

finally:

......#無論如何都會(huì)執(zhí)行代碼

8.2異常和錯(cuò)誤有什么區(qū)別?

答:

異常是指由于程序執(zhí)行過程中出錯(cuò)而在正??刂屏饕酝獠捎眯袨椤?yán)格來說,語法錯(cuò)誤

和邏輯錯(cuò)誤不屬于異常,但有些語法錯(cuò)誤往往會(huì)導(dǎo)致異營,例如由于大小寫拼寫錯(cuò)誤而訪問

不存在對象,或者試圖訪問不存在文獻(xiàn),等等。

8.3使用pdb模塊進(jìn)行Python程序調(diào)試重要有哪幾種用法?

答:重要有三種方式.

1)在交互模式下使用pdb模塊提供功能可以直接調(diào)試語句塊、表達(dá)式、函數(shù)等各種腳

本。

2)在程序中嵌入斷點(diǎn)來實(shí)現(xiàn)調(diào)試功能

在程序中一方面導(dǎo)入pdb模塊,然后使用pdb.set」race()在需要位置設(shè)立斷點(diǎn)。如果程

序中存在通過該辦法調(diào)用顯式插入斷點(diǎn),那么在命令提示符環(huán)境下執(zhí)行該程序或雙擊執(zhí)行程

序時(shí)將自動(dòng)打開pdb調(diào)試環(huán)境,雖然該程序當(dāng)前不處在遍試狀態(tài)。

3)使用命令行調(diào)試程序

在命令行提示符下執(zhí)行“python-mpdb腳本文獻(xiàn)名”,則直接進(jìn)入調(diào)試環(huán)境:當(dāng)調(diào)試

結(jié)束或程序正常結(jié)束后來.pdb將重啟該程序。

8.4Python內(nèi)建異常類基類是BaseException。

8.5斷言語句語法為assert.

8.6Python上下文管理語句是with。

第9章GUI編程

9.1設(shè)計(jì)一種窗體,并放置一種按鈕,單擊按鈕后彈出顏色對話框,關(guān)閉顏色對話框后提

示選中顏色。

答:Python2.7.8代碼如下,

importwx

classwxGUI(wx.App):

defOnlnit(scif):

frame=wx.Frame(parent=None,title-wxGUI',size=(160,140))

panel=wx.Panel(frame,-1)

buttonOK=wx.Buttor(panel.-1.'OK',pos=(0,0))

self.Bind(wx.EVT_BUTTON,self.OnButlonOK,buttonOK)

frame.Show()

returnTrue

defOnButtonOK(self,event):

colorDIg=wx.ColourDialog(None)

colorDlg.ShowModal()

color=colorDlg.GetColourData().Colour

wx.MessagcBox(str(cclor))

app=wxGUI()

app.MainLoopO

9.2設(shè)計(jì)一種窗體,并放置一種按鈕,按鈕默認(rèn)文本為“開始”,單擊按鈕后文本變?yōu)?/p>

“結(jié)束”,再次單擊后變?yōu)椤伴_始”,循環(huán)切換。

答:Python2.7.8代碼如下,

importwx

classwxGUI(wx.App):

defOnlnit(self):

frame=wx.Frame(parent=None,title-wxGUr,size=(160J40))

panel=wx.Pancl(frame,-1)

self.bultonOK=wx.Bu(ton(panel,-I,'Start*,pos=(0,0))

self.Bind(wx.EVT_BLTTON,self.OnButtonOK,self.bultonOK)

frame.Show()

returnTrue

defOnBut(onOK(self,event):

text=sclf.buttonOK.GctLabclTcxt()

iftext=='Start':

self.buttonOK.SetLabelTextCEnd')

cliftext=='End':

self.but(onOK.SetL£belText('Start')

app=wxGUI()

app.MainLoopO

9.3設(shè)計(jì)一種窗體,模仿QQ登錄界面,當(dāng)顧客輸入號碼123456和密碼654321時(shí)提示對

的,否則提示錯(cuò)誤。

答:Python2.7.8代碼如下,

importwx

classwxGUI(wx.App):

defOnlnit(sclf):

frame=wx.Frame(parent=None,title='Login',size=(250,l50),pos=(350,350))

panel=wx.Panel(frame,-1)

label1=wx.StaticTextipanel,-1,'UserName:\pos=(0J0),style=wx.ALIGN_RIGHT)

labe!2=wx.Sta(icText(panel,-1,'Password:',pos=(0,30),slyle=wx.ALIGN_RIGHT)

self.textName=wx.TextCtrl(panel,-1,pos=(70J0),size=(160,20))

self.textPwd=wx.TextCtrl(panel,-Lpos=(70,30),size=(160,20),style=wx.TE_PASSWORD)

buttonOK=wx.Buttor(paneL-1,'OK',pos=(30,60))

self.Bind(wx.EVT_BLTTON,self.OnButtonOK,buttonOK)

buttonCancel=wx.Bu:ton(panel,-1,'Cancel',pos=(120,60))

self.Bind(wx.EVT_BLTTON,sclf.OnButtonCanccl,buttonCancel)

buttonOK.Se(Defaul(()

frame.Show()

returnTrue

defOnButtonOK(sclf,event):

usrName=self.textName.GetValue()

usrPvvd=self.textPwd.GetValue。

ifusrName=='173456'andnsrPwd=="6543?1

wx.MessageBox('Right')

else:

wx.MessageBox('Wrong')

defOnButtonCanccl(sclf,event):

pass

app=wxGUI()

app.MainLoopO

第10章網(wǎng)絡(luò)程序設(shè)計(jì)

10.1簡樸解釋TCP和UDP合同區(qū)別。

答:

TCP合同是面向連接、具備質(zhì)量保證可靠傳播合同,但開銷較大;UDP合同是盡最大

能力傳播無連接合同,開銷小,慣用于視頻在線點(diǎn)播(VideoOnDemand,VOD)之類應(yīng)用。

TCP合同和UDP合同并沒有優(yōu)劣之分,僅僅是合用場合有所不同。

10.2同窗之間合伙編寫UDP通信程序,分別編寫發(fā)送端和接受端代碼,發(fā)送端發(fā)送一種

字符串“HellowoHd!”。假設(shè)接受端在計(jì)算機(jī)5000端口進(jìn)行接受,并顯示接受內(nèi)容。

答:一方面使用ipconfig/all命令查看本機(jī)IP地址,然后分別編寫下面代碼,并將其中IP地

址替代為相應(yīng)IP地址。

接受端代碼:

importsocket

s=socket.socket(socket.AF_INET,sockel.SOCK_DGRAM)

s.bind(("",5000))#空字符串表達(dá)本機(jī)任何可用IP地址

data,addr=s.recvfrom(1024)#緩沖區(qū)大小為1024字節(jié)

print*receivedmessage:%s,%data#顯示接受到內(nèi)容

s.close()

發(fā)送端代碼:

importsocket

s=sockct.sockci(sockct.AF_lNET,sockct.SOCK_DGRAM)

s.sendlo("Hello,world!",C48",5000))#假設(shè)48是接受端主機(jī)IP地址

s.close()

10.3簡樸簡介socket模塊中用于TCP編程慣用辦法。

?TCP普通用于規(guī)定可靠數(shù)據(jù)傳播場合。編寫TCP程序時(shí)經(jīng)常需要用到socket模塊

辦法重要有:

?connect(address):連接遠(yuǎn)程計(jì)算機(jī)

?send(bytes[,flags]):發(fā)送數(shù)據(jù)

?recv(bufsize[,flags]):接受數(shù)據(jù)

?bind(address):綁定地址

?listen(backlog):開始監(jiān)聽,等待客戶端連接

accept。:響應(yīng)客戶端祈求

10.4編寫代碼讀取搜狐網(wǎng)頁首頁內(nèi)容。

答:

importurllib.request

?>dir(urllib.request)

?>fp=urllib.request.urlopen(")

?>dir(fp)

?>print(fp.read(100))

?>fp.close()

10.5在自己機(jī)器上配備IIS以支持Python腳本運(yùn)營,然后使用Python編寫腳本,運(yùn)營后

在網(wǎng)頁上顯示wHelloworld!wo

答:核心代碼為

print

print'Status:200OK'

print*Contcnt-typc:tcxt/htmi'

print

print,<HTML><HEAD><TITLE>PythonSampleCGI</TITLE></HEAD>'

print'<BODY>'

print*<Hl>Thisisaheader</Hl>>

print'<p>Helloworld!'

print'<br>'

print'</BODY>'

第11章大數(shù)據(jù)解決

11.1簡樸簡介常用大數(shù)據(jù)解決框架。

?答:重要有三種,

?MapReduce:分布式計(jì)算框架,可以將單個(gè)大型計(jì)算作業(yè)分派給多臺(tái)計(jì)算機(jī)執(zhí)行,可

以在短時(shí)間內(nèi)完畢大量工作,特別適合數(shù)值型和標(biāo)稱型數(shù)據(jù),但需要對行業(yè)領(lǐng)域具備一

定理解后重寫算法來完畢特定業(yè)務(wù)解決規(guī)定。MapReduce名字由函數(shù)式編程中慣用

map和reduce兩個(gè)單詞構(gòu)成。MapReduce在大量節(jié)點(diǎn)構(gòu)成集群上運(yùn)營,工作流程是:單

個(gè)作業(yè)被提成諸多小份,輸入數(shù)據(jù)也被切片并分發(fā)到每個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)只在本地?cái)?shù)據(jù)

上做運(yùn)算,相應(yīng)運(yùn)算代碼稱為nipper,這個(gè)過程即m叩階段;每個(gè)m叩per輸出通過某

種方式組合,依照需要也許再進(jìn)行重新排序,排序后成果再被切提成小份并分發(fā)到各個(gè)

節(jié)點(diǎn)進(jìn)行下一步解決這個(gè)過程被稱為reduce階段,相應(yīng)代碼稱為reducer。不同類型作

業(yè)也許需要不同數(shù)量reducer,并且,在任何時(shí)候,每個(gè)mapper或reducer之間都不進(jìn)行

通信,每個(gè)節(jié)點(diǎn)只負(fù)責(zé)解決自己事務(wù),并且只在分派到本地?cái)?shù)據(jù)集上進(jìn)行運(yùn)算。

Hadoop:Hadoop是MapReduce框架一種免費(fèi)開源實(shí)現(xiàn),采用Java語言編寫,支持在大

量機(jī)器上分布式解決數(shù)據(jù),除了分布式計(jì)算之外,Hadoop還自帶分布式文獻(xiàn)系統(tǒng),可以在上

面運(yùn)營各種不同語言編寫分布式程序。Hadoop在可伸縮性、健壯性、計(jì)算性能和成本上具

備無可代替優(yōu)勢,事實(shí)上已成為當(dāng)前互聯(lián)網(wǎng)公司主流大數(shù)據(jù)分析平臺(tái)。

Spark:Spark是一種針對超大數(shù)據(jù)集合低延遲集群分布式計(jì)算系統(tǒng),比MapReduce快

40倍左右。Spark是Hadoop升級版本,兼容HadoopAPI,可以讀寫HadoopHDFSHBASE順

序文獻(xiàn)等,與之不同是將成果保存在內(nèi)存中。Hadoop作為第一代產(chǎn)品使用了HDFS,第二代

加入了Cache來保存中間計(jì)算成果,第三代則是Spark倡導(dǎo)流技術(shù)Streaming(,

11.2運(yùn)營本章中代碼并理解MapReduce編程思路。

答:略

第12章Windows系統(tǒng)編程

12.1兗閱有關(guān)資料,解釋注冊表幾大根鍵用途。

答:略

12.2選取一種編寫好Python程序,將其轉(zhuǎn)換為exe可執(zhí)行文獻(xiàn)。

答:略,請參照書中有關(guān)簡介。

12.3編寫代碼,使用至少3中不同辦法啟動(dòng)Windows自帶計(jì)算器程序。

答:

第一種辦法:

?>importos

?>os.systemCcalc.exe')

第二種辦法:

?>importos

?>os.popen('calc.exe')

第三種辦法:

?>importos

?>os.startfile('calc.exe')

第四種辦法:

?>importwin32api

?>win32api.ShellExecute(0,'open1,^alc.exe',",1)

第五種辦法:

?>importwin32process

?>handle=win32process.CieateProcess(r'c:\windows\system32\calc.exe',,\None,None,。,

win32process.CREATE_NO_WINDOW,None,None,win32process.STARTUPINFO())

124編寫代碼,檢測您所使用操作系統(tǒng)版本。

答:略,請參照12.5節(jié),

第13章多線程編程

13.1簡樸論述創(chuàng)立線程辦法。

答:

Thread類支持使用兩種辦法來創(chuàng)立線程,一種是為構(gòu)造函數(shù)傳遞一種可調(diào)用對象,另一

種是繼承Thread類并在派生類中重寫_init_()和run()辦法。創(chuàng)立了線程對象后來,可以調(diào)

用其start。辦法來啟動(dòng),該辦法自動(dòng)調(diào)用該類對象run()辦法,此時(shí)該線程處在alive狀態(tài).直

至線程nm()辦法運(yùn)營結(jié)束。

13.2簡樸論述Thread對象辦法。

答:

(1)join([timeout]:阻塞當(dāng)前線程,等待被調(diào)線程結(jié)束或超時(shí)后再繼續(xù)執(zhí)行當(dāng)前線程

后續(xù)代碼,參數(shù)timeout用來指定最長等待時(shí)間,單位為秒。

(2)isAlive。:測試線程與否處在運(yùn)營狀態(tài)

(3)start():自動(dòng)調(diào)用run。辦法,啟動(dòng)線程,執(zhí)行線程代碼。

(4)run():線程代碼,用來實(shí)現(xiàn)線程功能與業(yè)務(wù)邏輯,可以在子類中重寫該辦法來自定

義線程行為。

13.3簡樸論述線程對象daemon屬性作用和影響。

答:

在腳本運(yùn)營過程中有一種主線程,若在主線程中創(chuàng)立了子線程,當(dāng)主線程結(jié)束時(shí)依照子

線程daemon屬性值不同也許會(huì)發(fā)生下面兩種狀況之一:1)當(dāng)某子線程daemon屬性為

False時(shí),主線程結(jié)束時(shí)會(huì)檢測該子線程與否結(jié)束,如果該子線程尚未完畢,則主線程會(huì)等待

它完畢后再退出;2)當(dāng)某子線程daemon屬性為True時(shí),主線程運(yùn)營結(jié)束時(shí)不對該子線程

進(jìn)行檢查而直接退出,同步所有daemon值為True子線程將隨主線程?起結(jié)束,而無論與否

運(yùn)營完畢,daemon屬性值默以為False,如果需要修改,則必要在調(diào)用start。辦法啟動(dòng)線程之

邁進(jìn)行修改。

13.4解釋至少3種線程同步辦法。

⑴答:

(2)使用Condition對象可以在某些事件觸發(fā)后才解決數(shù)據(jù),可以用于不同線程之間通

信或告知,以實(shí)現(xiàn)更高檔另J同步。Condition對象除了具備acquire。和release。辦法之外,尚

有wait。、notify。、notify_all()等辦法。下面通過典型生產(chǎn)者/消費(fèi)者問題來演示Condition

對象用法。

Queue模塊(在Python3中為queue模塊)實(shí)現(xiàn)了多生產(chǎn)者/多消費(fèi)者隊(duì)列,特別適合需要在

各種線程之間進(jìn)行信息互換場合,該模塊Queue對象實(shí)現(xiàn)/多線程編程所需要所有鎖語

義。

Event對象是一種簡樸線程通信技術(shù),一種線程設(shè)立Eveni對象,另一種線程等待Evenl對

象。Event對象set。辦法可以設(shè)立Event對象內(nèi)部信號標(biāo)志為真;clear。辦法可以清除Event

對象內(nèi)部信號標(biāo)志,將其設(shè)立為假;isSet。辦法用來判斷其內(nèi)部信號標(biāo)志狀態(tài);wait。辦法只

有在其內(nèi)部信號狀態(tài)為真時(shí)將不久地執(zhí)行并返I可,若Evem對象內(nèi)部信號標(biāo)志為假,wail()辦

法將始終等待至超時(shí)或內(nèi)部信號狀態(tài)為真。

第14章數(shù)據(jù)庫編程

14.1簡樸簡介SQLite數(shù)據(jù)庫。

答:

SQLile是內(nèi)嵌在Python中輕量級、基于磁盤文獻(xiàn)數(shù)據(jù)庫管理系統(tǒng),不需要服務(wù)器進(jìn)程,

支持使用SQL語句來訪向數(shù)據(jù)庫。該數(shù)據(jù)庫使用C語言開發(fā),支持大多數(shù)SQL91原則、支

持原子、一致、獨(dú)立和持久事務(wù),不支持外鍵限制;通過數(shù)據(jù)庫級獨(dú)占性和共享鎖定來實(shí)現(xiàn)

獨(dú)立事務(wù),當(dāng)各種線程同步訪問同一種數(shù)據(jù)庫并試圖寫入數(shù)據(jù)時(shí),每一時(shí)刻只有一種線程可

以寫入數(shù)據(jù)。SQLite支持2TB大小單個(gè)數(shù)據(jù)庫,每個(gè)數(shù)據(jù)庫完全存儲(chǔ)在單個(gè)磁盤文獻(xiàn)也以

B+樹數(shù)據(jù)構(gòu)造形式存儲(chǔ),一種數(shù)據(jù)庫就是一種文獻(xiàn),通過簡樸復(fù)制即可實(shí)現(xiàn)數(shù)據(jù)庫備份。

14.2使用Python內(nèi)置函數(shù)dir()查看Cursor對象中辦法,并使用內(nèi)置函數(shù)help。查看其

用法。

答:略。

14.3論述使用Python操作Access數(shù)據(jù)庫環(huán)節(jié)。

答:

(1)建立數(shù)據(jù)庫連接

importwin32com.clienl

conn=win32com.client.Dispatch(r'ADODB.Connection')

1

DSN='PROVIDER=Microsoft.Jet.OLEDB.4.()oDATASOURCE=C:/MyDB.mdbo

conn.Open(DSN)

(2)打開記錄集

rs=win32com.client.Dispatch(r'ADODB.Recordset')

rs_naine='MyRecordset'#表名

rs.Open('['+rs_name-conn,1,3)

(3)操作記錄集

rs.AddNew()

rs.Fields.Itern(I).Value='data'

rs.Update()

(4)操作數(shù)據(jù)

conn=win32com.client.Dispatch(r'ADODB.Connection')

1

DSN='PROVIDER=Microsoft.Jet.OLEDB.4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論