版權(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'Status:200OK'
print*Contcnt-typc:tcxt/htmi'
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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 國家教師資格證考試幼兒園面試真題
- 7 超聲引導(dǎo)下甲狀腺結(jié)節(jié)穿刺活檢術(shù)在甲狀腺結(jié)節(jié)診斷中的臨床應(yīng)用效果分析教學(xué)研究課題報(bào)告
- 營銷顧問面試自我介紹技巧
- 2025年智慧農(nóng)業(yè)十年技術(shù)集成報(bào)告
- 2026中國國際青年交流中心有限公司高校畢業(yè)生招聘5備考題庫必考題
- 紅色文化融入初中語文教學(xué)的策略與實(shí)踐研究教學(xué)研究課題報(bào)告
- 高中化學(xué)反應(yīng)速率中的實(shí)驗(yàn)變量控制策略課題報(bào)告教學(xué)研究課題報(bào)告
- 預(yù)防癲癇發(fā)作的醫(yī)學(xué)管理指南
- 2026年企業(yè)人力資源管理師考試備考題庫附完整答案【名校卷】
- 2026年憲法知識題庫【能力提升】
- 2026年英語學(xué)業(yè)水平合格考考前模擬卷02(江蘇專用)(考試版)
- 2025貴州省人才培訓(xùn)中心有限公司招聘2人筆試考試參考試題及答案解析
- 2025下半年廣東珠海市紀(jì)委監(jiān)委招聘所屬事業(yè)單位工作人員12人筆試考試參考試題及答案解析
- 2025年登高證練習(xí)題及答案
- 汽車輪胎維護(hù)課件
- 【新教材】2025-2026學(xué)年華東師大版(2024)體育與健康二年級全一冊教案(教學(xué)設(shè)計(jì))
- 四川省成都市蓉城名校聯(lián)盟2026接高三上學(xué)期第一次聯(lián)合診斷性考試政治試卷(含答案)
- 錄音聲學(xué)基礎(chǔ)課件
- 江蘇省淮安市2025年中考英語真題附真題答案
- 急性高甘油三酯血癥胰腺炎康復(fù)期管理2025
- 景區(qū)冬季安全培訓(xùn)課件
評論
0/150
提交評論