




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Python程序設計習題與參考答案第1章基礎知識1.1簡單說明如何選擇正確的Python版本。答:在選擇Python的時候,一定要先考慮清楚自己學習Python的目的是什么,打算做哪方面的開發(fā),有哪些擴展庫可用,這些擴展庫最高反復安裝和卸載上。同時還應該注意,當更新的Python版本推出之后,不要急于更新,而是應該等確定自己所必須使用的擴展庫也推出了較新版本之后再進行更新。盡管如此,Python3畢竟是大勢所趨,如果您暫時還沒想到要做什么行業(yè)領域的應用開發(fā),或者僅僅是為了嘗試一種新的、好玩的語言,那么請毫不猶豫地選擇Python3.x系列的最高版本(目前是Python3.4.3)。1.2為什么
2、說Python采用的是基于值的內存管理模式?答:Python采用的是基于值的內存管理方式,如果為不同變量賦值相同值,則在內存中只有一份該值,多個變量指向同一塊內存地址,例如下面的代碼。x=3id(x)y=3id(y)y=5id(y)id(x)1.3在Python中導入模塊中的對象有哪幾種方式?答:常用的有三種方式,分別為import模塊名as別名from模塊名import對象名as別名frommathimport*1.4使用pip命令安裝numpy、scipy模塊。答:在命令提示符環(huán)境下執(zhí)行下面的命令:pipinstallnumpypipinstallscipy1.5編寫程序,用戶輸入一個三位
3、以上的整數(shù),輸出其百位以上的數(shù)字。例如用戶輸入1234,則程序輸出12。(提示:使用整除運算。)答:x=input(Pleaseinputanintegerofmorethan3digits:)try:x=int(x)x=x/100ifx=0:print(Youmustinputanintegerofmorethan3digits.)else:print(x)exceptBaseException:print(Youmustinputaninteger.)importtypesx=input(Pleaseinputanintegerofmorethan3digits:)iftype(x)!=t
4、ypes.IntType:printYoumustinputaninteger.eliflen(str(x)!=4:printYoumustinputanintegerofmorethan3digits.else:printx/100第2章Python數(shù)據(jù)結構2.1為什么應盡量從列表的尾部進行元素的增加與刪除操作?答:當列表增加或刪除元素時,列表對象自動進行內存擴展或收縮,從而保證元素之間沒有縫隙,但這涉及到列表元素的移動,效率較低,應盡量從列表尾部進行元素的增加與刪除操作以提高處理速度。2.2編寫程序,生成包含1000個0到100之間的隨機整數(shù),并統(tǒng)計每個元素的出現(xiàn)次數(shù)。(提示:使用集合。)
5、答:importrandomx=random.randint(0,100)foriinrange(1000)d=set(x)forvind:print(v,:,x.count(v)importrandomx=random.randint(0,100)foriinrange(1000)d=set(x)forvind:printv,:,x.count(v)2.3編寫程序,用戶輸入一個列表和2個整數(shù)作為下標,然后輸出列表中介于2個下標之間的元素組成的子列表。例如用戶輸入1,2,3,4,5,6和2,5,程序輸出3,4,5,6。答:x=input(Pleaseinputalist:)x=eval(x)s
6、tart,end=eval(input(Pleaseinputthestartpositionandtheendposition:)print(xstart:end)x=input(Pleaseinputalist:)start,end=input(Pleaseinputthestartpositionandtheendposition:)printxstart:end2.4設計一個字典,并編寫程序,用戶輸入內容作為鍵,然后輸出字典中對應的值,如果用戶輸入的鍵不存在,則輸出“您輸入的鍵不存在!”答:d=1:a,2:b,3:c,4:dv=input(Pleaseinputakey:)v=eval
7、(v)print(d.get(v,您輸入的的鍵不存在)d=1:a,2:b,3:c,4:dv=input(Pleaseinputakey:)print(d.get(v,您輸入的的鍵不存在)2.5編寫程序,生成包含20個隨機數(shù)的列表,然后將前10個元素升序排列,后10個元素降序排列,并輸出結果。答:importrandomx=random.randint(0,100)foriinrange(20)print(x)y=x0:10y.sort()x0:10=yy=x10:20y.sort(reverse二True)x10:20=yprint(x)importrandomx=random.randint
8、(0,100)foriinrange(20)printxy=x0:10y.sort()x0:10=yy=x10:20y.sort(reverse=True)x10:20=yprintx2.6在Python中,字典和集合都是用一對大括號作為定界符,字典的每個元素有兩部分組成,即鍵和值,其中鍵不允許重復。2.7假設有列表a=name,age,sex和b=Dong,38,Male,請使用一個語句將這兩個列表的內容轉換為字典,并且以列表a中的元素為鍵,以列表b中的元素為值,這個語句可以寫為c二dict(zip(a,b)_。2.8假設有一個列表a,現(xiàn)要求從列表a中每3個元素取1個,并且將取到的元素組成新
9、的列表b,可以使用語句2.9使用列表推導式生成包含b二a:3o10個數(shù)字5的列表,語句可以寫為5foriinrange(10)。2.10不可以(可以、不可以)使用del命令來刪除元組中的部分元素。第3章選擇結構與循環(huán)結構3.1分析邏輯運算符“or”的短路求值特性。答:假設有表達式“表達式1or表達式2”,如果表達式1的值等價于True,那么無論表達式2的值是什么,整個表達式的值總是等價于計算表達式2的值。True。因此,不需要再3.2編寫程序,運行后用戶輸入4位整數(shù)作為年份,判斷其是否為閏年。如果年份能被400整除,貝y為閏年;如果年份能被4整除但不能被100整除也為閏年。答:x=input(
10、Pleaseinputanintegerof4digitsmeaningtheyear:)x=eval(x)ifx%400=0or(x%4=0andnotx%100=0):print(Yes)else:print(No)x=input(Pleaseinputanintegerof4digitsmeaningtheyear:)ifx%400=0or(x%4=0andnotx%100=0):printYeselse:printNo3.3編寫程序,生成一個包含50個隨機整數(shù)的列表,然后刪除其中所有奇數(shù)。(提示:從后向前刪。)答:importrandomx=random.randint(0,100)f
11、oriinrange(50)print(x)i=len(x)-1whilei=0:ifxi%2=1:delxii-=1print(x)把上面的代碼中第三行和最后一行改為printx即可。34編寫程序,生成一個包含20個隨機整數(shù)的列表,然后對其中偶數(shù)下標的元素進行降序排列,奇數(shù)下標的元素不變。(提示:使用切片。)答:importrandomx=random.randint(0,100)foriinrange(20)print(x)y=x:2y.sort(reverse=True)x:2=yprint(x)把上面的代碼中第三行和最后一行改為printx即可。35編寫程序,用戶從鍵盤輸入小于1000
12、的整數(shù),對其進行因式分解。例如,10=2X5,60=2X2X3X5。答:x=input(Pleaseinputanintegerlessthan1000:)x=eval(x)t=xi=2result=whileTrue:ift=1:breakift%i=0:result.append(i)t=t/ielse:i+=1Printx,=,*.join(map(str,result)x=input(Pleaseinputanintegerlessthan1000:)t=xi=2result=whileTrue:ift=1:breakift%i=0:result.append(i)t=t/ielse:
13、i+=1printx,=,*.join(map(str,result)3.6編寫程序,至少使用2種不同的方法計算100以內所有奇數(shù)的和x=iforiinrange(1,100)ifi%2=1print(sum(x)print(sum(range(1,100):2)3.7編寫程序,實現(xiàn)分段函數(shù)計算,如下表所示xyx000=x5x5=x103x-510=x200.5x-220=x0 x=input(Pleaseinputx:)x=eval(x)ifx=20:print(0)elif0=x5:print(x)elif5=x10:print(3*x-5)elif10=x20:print(0.5*x-2
14、)第4章字符串與正則表達式4.1假設有一段英文,其中有單獨的字母“I”誤寫為“i”,糾請編寫程序進行正。1)不使用正則表達式x=iamateacher,iamman,andiam38yearsold.Iamnotx=x.replace(i,I)x=x.replace(i,I)print(x)2)使用正則表達式abusinessman.x=iamateacher,iamman,andiam38yearsold.Iamnotimportrepattern=pile(r(?:Fw|b)i(?:Fw)whileTrue:result=pattern.search(x)ifresult:ifresult
15、.start(0)!=0:x=x:result.start(0)+1+I+xresult.end(0)-1:else:x=x:result.start(0)+I+xresult.end(0)-1:else:breakprint(x)abusinessman.4.2假設有一段英文,其中有單詞中間的字母“i”誤寫為“I”,請編寫程序進行糾正。importrex=Iamateacher,Iamman,andIam38yearsold.IamnotabusInessman.print(x)pattern=pile(r(?:w)I(?:w)whileTrue:result=pattern.search(
16、x)ifresult:ifresult.start(0)!=0:x=x:result.start(0)+1+i+xresult.end(0)-1:else:x=x:result.start(0)+i+xresult.end(0)-1:else:breakprint(x)4.3有一段英文文本,其中有單詞連續(xù)重復了2次,編寫程序檢查重復的單詞并只保留一個。例如文本內容為“Thisisisadesk.”,程序輸出為“Thisisadesk.”1)方法importrex=Thisisaadesk.pattern=pile(rb(w+)(s+1)1,b)matchResult=pattern.searc
17、h(x)x=pattern.sub(matchResult.group(1),x)print(x)2)方法二x=Thisisaadesk.pattern=pile(r(?Pbw+b)s(?P=f)matchResult=pattern.search(x)x=x.replace(matchResult.group(0),matchResult.group(1)4.4簡單解釋Python的字符串駐留機制。答:Python支持字符串駐留機制,即:對于短字符串,將其賦值給多個不同的對象時,內存中只有一個副本,多個對象共享該副本。這一點不適用于長字符串,即長字符串不遵守駐留機制,下面的代碼演示了短字符串
18、和長字符串在這方面的區(qū)別。a=1234b=1234id(a)=id(b)Truea=1234*50b=1234*50id(a)=id(b)False4.5編寫程序,用戶輸入一段英文,然后輸出這段英文中所有長度為母的3個字單詞。importrex=input(Pleaseinputastring:)pattern=pile(rba-zA-Z3b)print(pattern.findall(x)第5章函數(shù)設計與使用答:原因是對于函數(shù)的默認值參數(shù)只會被處理一次,下次再調用函數(shù)并且不為默認值參數(shù)賦值時會繼續(xù)使用上一次的結果,對于列表這樣的結構,如果調用函數(shù)時為默認值參數(shù)的列表插入或刪除了元素,將會得到
19、保留,從而影響下一次調用。5.2編寫函數(shù),判斷一個整數(shù)是否為素數(shù),并編寫主程序調用該函數(shù)。importmathdefIsPrime(v):n=int(math.sqrt(v)+1)foriinrange(2,n):ifv%i=0:returnNoelse:returnYesprint(IsPrime(37)print(IsPrime(60)print(IsPrime(113)5.3編寫函數(shù),接收一個字符串,分別統(tǒng)計大寫字母、小寫字母、數(shù)字、其他字符的個數(shù),并以元組的形式返回結果。defdemo(v):capital=little=digit=other=0foriinv:ifA=i=Z:cap
20、ital+=1elifa=i=z:little+=1elif0=idefdemo():a=3printaa=5demo()3a5.5編寫函數(shù),可以接收任意多個整數(shù)并輸出其中的最大值和所有整數(shù)之和defdemo(*v):print(v)print(max(v)print(sum(v)demo(1,2,3)demo(1,2,3,4)demo(1,2,3,4,5)5.6編寫函數(shù),模擬內置函數(shù)sum()。defSum(v):s=0foriinv:s+=ireturnsx=1,2,3,4,5print(Sum(x)x=(1,2,3,4,5)print(Sum(x)5.7編寫函數(shù),模擬內置函數(shù)sorted
21、()。defSorted(v):t=v:r=whilet:tt=min(t)r.append(tt)t.remove(tt)returnrx=1,3,5,2,1,0,9,7print(x)print(Sorted(x)第6章面向對象程序設計6.1繼承6.5節(jié)例2中的Person類生成Student類,填寫新的函數(shù)用來設置學生專業(yè),然后生成該類對象并顯示信息。importtypesclassPerson(object):#基類必須繼承于object,否則在派生類中將無法使用super()函數(shù)def_init_(self,name=,age=20,sex=man):self.setName(nam
22、e)self.setAge(age)self.setSex(sex)defsetName(self,name):ifnotisinstance(name,str):print(namemustbestring.)returnself._name=namedefsetAge(self,age):ifnotisinstance(age,int):print(agemustbeinteger.)returnself._age=agedefsetSex(self,sex):ifsex!=manandsex!=woman:print(sexmustbemanorwoman)returnself._sex
23、=sexdefshow(self):print(self._name)print(self._age)print(self._sex)classStudent(Person):def_init_(self,name=,age=30,sex=man,major=Computer):#調用基類構造方法初始化基類的私有數(shù)據(jù)成員super(Student,self)._init_(name,age,sex)self.setMajor(major)#初始化派生類的數(shù)據(jù)成員defsetMajor(self,major):ifnotisinstance(major,str):print(majormustb
24、eastring.)returnself._major=majordefshow(self):super(Student,self).show()print(self._major)if_name_=_main_:zhangsan=Person(ZhangSan,19,man)zhangsan.show()lisi=Student(LiSi,32,man,Math)lisi.show()6.2設計一個三維向量類,并實現(xiàn)向量的加法、減法以及向量與標量的乘法和除法運算。classVecter3:def_init_(self,x=0,y=0,z=0):self.X=xself.Y=yself.Z=z
25、def_add_(self,n):r=Vecter3()r.X=self.X+n.Xr.Y=self.Y+n.Yr.Z=self.Z+n.Zreturnrdef_sub_(self,n):r=Vecter3()r.X=self.X-n.Xr.Y=self.Y-n.Yr.Z=self.Z-n.Zreturnrdef_mul_(self,n):r=Vecter3()r.X=self.X*nr.Y=self.Y*nr.Z=self.Z*nreturnrdef_truediv_(self,n):r=Vecter3()r.X=self.X/nr.Y=self.Y/nr.Z=self.Z/nreturnr
26、def_floordiv_(self,n):r=Vecter3()r.X=self.X/nr.Y=self.Y/nr.Z=self.Z/nreturnrdefshow(self):print(self.X,self.Y,self.Z)v1=Vecter3(1,2,3)v2=Vecter3(4,5,6)v3=v1+v2v3.show()v4=v1-v2v4.show()v5=v1*3v5.show()v6=v1/2v6.show()6.3面向對象程序設計的三要素分別為封裝、繼承和多態(tài)_06.4簡單解釋Python中以下劃線幵頭的變量名特點。答:在Python中,以下劃線幵頭的變量名有特殊的含義,
27、尤其是在類的定義中。用下劃線作為變量前綴和后綴來表示類的特殊成員:_xxx:這樣的對象叫做保護變量,不能用frommoduleimport*導入,只有類對象和子類對象能訪問這些變量;_xxx_:系統(tǒng)定義的特殊成員名字;_xxx:類中的私有成員,只有類對象自己能訪問,子類對象也不能訪問到這個成員,但在對象外部可以通過“對象名類名xxx”這樣的特殊方式來訪問。Python中沒有純粹的C+意義上的私有成員。6.5與運算符“*”對應的特殊方法名為_pow_(),與運算符“對應的特殊方法名為_floordiv_()第7章文件操作7.1假設有一個英文文本文件,編寫程序讀取其內容,并將其中的大寫字母變?yōu)樾?/p>
28、字母,小寫字母變?yōu)榇髮懽帜?。答:f=open(rd:1.txt,r)s=f.readlines()f.close()r=i.swapcase()foriinsf=open(rd:2.txt,w)f.writelines(r)f.close()7.2編寫程序,將包含學生成績的字典保存為二進制文件,然后再讀取內容并顯示。importpickled=張三:98,李四:90,王五:100print(d)f=open(score.dat,wb)pickle.dump(1,f)pickle.dump(d,f)f.closef=open(score.dat,rb)pickle.load(f)d=pickle
29、.load(f)f.close()print(d)7.3使用shutil模塊中的move()方法進行文件移動。答:importshutilshutil.move(rd:1.txt,re:1.txt)e:1.txt7.4簡單解釋文本文件與二進制文件的區(qū)別。答:(1)文本文件文本文件存儲的是常規(guī)字符串,由若干文本行組成,通常每行以換行符n結尾。常規(guī)字符串是指記事本或其他文本編輯器能正常顯示、編輯并且人類能夠直接閱讀和理解的字符串,如英文字母、漢字、數(shù)字字符串。文本文件可以使用字處理軟件如gedit、記事本進行編輯。(2)二進制文件二進制文件把對象內容以字節(jié)串(bytes)進行存儲,無法用記事本或其
30、他普通字處理軟件直接進行編輯,通常也無法被人類直接閱讀和理解,需要使用專門的軟件進行解碼后讀取、顯示、修改或執(zhí)行。常見的如圖形圖像文件、音視頻文件、可執(zhí)行文件、資源文件、各種數(shù)據(jù)庫文件、各類office文檔等都屬于二進制文件。7.5編寫代碼,將當前工作目錄修改為“”,并驗證,最后將當前工作目錄恢復為原來的目錄。答:importosos.getcwd()C:Python34os.chdir(rc:)os.getcwd()c:os.chdir(rc:Python34)os.getcwd()c:Python347.6編寫程序,用戶輸入一個目錄和一個文件名,搜索該目錄及其子目錄中是否存在該文件。答:i
31、mportsysimportosdirectory=sys.argv1filename=sys.argv2paths=os.walk(directory)forroot,dirs,filesinpaths:iffilenameinfiles:print(Yes)breakelse:print(No)importsysimportosdirectory=sys.argv1filename=sys.argv2paths=os.walk(directory)forroot,dirs,filesinpaths:iffilenameinfiles:printYesbreakelse:printNo第8章
32、異常處理結構與程序調試8.1Python異常處理結構有哪幾種形式?答:比較常用的形式有:1)標準異常處理結構try:try塊#被監(jiān)控的語句,可能會引發(fā)異常exceptException,reason:except塊#處理異常的代碼如果需要捕獲所有異常時,可以使用BaseException,代碼格式如下:try:exceptBaseException,e:except塊#處理所有錯誤上面的結構可以捕獲所有異常,盡管這樣做很安全,但是一般并不建議這樣做。對于異常處理結構,一般的建議是盡量顯式捕捉可能會出現(xiàn)的異常并且有針對性地編寫代碼進行處理,因為在實際應用開發(fā)中,很難使用同一段代碼去處理所有類型的
33、異常。當然,為了避免遺漏沒有得到處理的異常干擾程序的正常執(zhí)行,在捕捉了所有可能想到的異常之后,您也可以使用異常處理結構的最后一個except來捕捉BaseException。2)另外一種常用的異常處理結構是try.except.else.語句3)在實際開發(fā)中,同一段代碼可能會拋出多個異常,需要針對不同的異常類型進行相應的處理。為了支持多個異常的捕捉和處理,Python提供了帶有多個except的異常處理結構,這類似于多分支選擇結構,一旦某個except捕獲了異常,則后面剩余的except子句將不會再執(zhí)行。語法為:try:try塊#被監(jiān)控的語句exceptException1:except塊1#
34、處理異常1的語句exceptException2:except塊2#處理異常2的語句4)將要捕獲的異常寫在一個元組中,可以使用一個except語句捕獲多個異常,并且共用同一段異常處理代碼,當然,除非確定要捕獲的多個異??梢允褂猛欢未a來處理,并不建議這樣做。5)最后一種常用的異常處理結構是try.except.finally.結構。在該結構中,finally子句中的內存無論是否發(fā)生異常都會執(zhí)行,常用來做一些清理工作以釋放try子句中申請的資源。語法如下:try:finally:.#無論如何都會執(zhí)行的代碼8.2異常和錯誤有什么區(qū)別?答:異常是指因為程序執(zhí)行過程中出錯而在正??刂屏饕酝獠扇〉男袨?/p>
35、。嚴格來說,語法錯誤和邏輯錯誤不屬于異常,但有些語法錯誤往往會導致異常,例如由于大小寫拼寫錯誤而訪冋不存在的對象,或者試圖訪冋不存在的文件,等等。8.3使用pdb模塊進行Python程序調試主要有哪幾種用法?答:主要有三種方式,1)在交互模式下使用pdb模塊提供的功能可以直接調試語句塊、表達式、函數(shù)等多種腳本。2)在程序中嵌入斷點來實現(xiàn)調試功能在程序中首先導入pdb模塊,然后使用pdb.set_trace()在需要的位置設置斷點。如果程序中存在通過該方法調用顯式插入的斷點,那么在命令提示符環(huán)境下執(zhí)行該程序或雙擊執(zhí)行程序時將自動打幵pdb調試環(huán)境,即使該程序當前不處于調試狀態(tài)。3)使用命令行調試
36、程序在命令行提示符下執(zhí)行“python-mpdb腳本文件名”,則直接進入調試環(huán)境;當調試結束或程序正常結束以后,pdb將重啟該程序。8.4Python內建異常類的基類是BaseException_。8.5斷言語句的語法為assert_。8.6Python上下文管理語句是with第9章GUI編程9.1設計一個窗體,并放置一個按鈕,單擊按鈕后彈出顏色對話框,關閉顏色對話框后提示選中的顏色。importwxclasswxGUI(wx.App):defOnInit(self):frame=wx.Frame(parent=None,title=wxGUI,size=(160,140)panel=wx.P
37、anel(frame,-1)buttonOK=wx.Button(panel,-1,OK,pos=(0,0)self.Bind(wx.EVT_BUTTON,self.OnButtonOK,buttonOK)frame.Show()returnTruedefOnButtonOK(self,event):colorDlg=wx.ColourDialog(None)colorDlg.ShowModal()color=colorDlg.GetColourData().Colourwx.MessageBox(str(color)app=wxGUI()app.MainLoop()9.2設計一個窗體,并放置
38、一個按鈕,按鈕默認文本為“開始”,單擊按鈕后文本變?yōu)椤敖Y束”,再次單擊后變?yōu)椤伴_始”,循環(huán)切換importwxclasswxGUI(wx.App):defOnInit(self):frame=wx.Frame(parent=None,title=wxGUI,size=(160,140)panel=wx.Panel(frame,-1)self.buttonOK=wx.Button(panel,-1,Start,pos=(0,0)self.Bind(wx.EVT_BUTTON,self.OnButtonOK,self.buttonOK)frame.Show()returnTruedefOnButt
39、onOK(self,event):iftext=Start:eliftext=End:app=wxGUI()app.MainLoop()9.3設計一個窗體,模擬QQ登錄界面,當用戶輸入號碼123456和密碼654321時提示正確,否則提示錯誤。importwxclasswxGUI(wx.App):defOnInit(self):frame=wx.Frame(parent=None,title=Login,size=(250,150),pos=(350,350)panel=wx.Panel(frame,-1)label1=wx.StaticText(panel,-1,UserName:,pos=
40、(0,10),style=wx.ALIGN_RIGHT)label2=wx.StaticText(panel,-1,Password:,pos=(0,30),style=wx.ALIGN_RIGHT)self.textName=wx.TextCtrl(panel,-1,size=(160,20)self.textPwd=wx.TextCtrl(panel,-1,size=(160,20),style=wx.TE_PASSWORD)pos=(70,10),pos=(70,30),buttonOK=wx.Button(panel,-1,OK,pos=(30,60)self.Bind(wx.EVT_
41、BUTTON,self.OnButtonOK,buttonOK)buttonCancel=wx.Button(panel,-1,Cancel,pos=(120,60)self.Bind(wx.EVT_BUTTON,self.OnButtonCancel,buttonCancel)buttonOK.SetDefault()frame.Show()returnTruedefOnButtonOK(self,event):ifusrName=123456andusrPwd=654321:wx.MessageBox(Right)else:wx.MessageBox(Wrong)defOnButtonCa
42、ncel(self,event):passapp=wxGUI()app.MainLoop()第10章網(wǎng)絡程序設計10.1簡單解釋TCP和UDP協(xié)議的區(qū)別。答:TCP協(xié)議是面向連接的、具有質量保證的可靠傳輸協(xié)議,但幵銷較大;UDPW議是盡最大能力傳輸?shù)臒o連接協(xié)議,開銷小,常用于視頻在線點播(VideoOnDemand,VOD之類的應用。TCP協(xié)議和UDP協(xié)議并沒有優(yōu)劣之分,僅僅是適用場合有所不同。10.2同學之間合作編寫UDP通信程序,分別編寫發(fā)送端和接收端代碼,發(fā)送端發(fā)送一個字符串“Helloworld!”。假設接收端在計算機的5000端口進行接收,并顯示接收內容。答:首先使用ipconfig
43、/all命令查看本機IP地址,然后分別編寫下面的代碼,并將其中的IP地址替換為相應的IP地址。接收端代碼:importsockets=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.bind(,5000)#空字符串表示本機任何可用IP地址data,addr=s.recvfrom(1024)#緩沖區(qū)大小為1024字節(jié)printreceivedmessage:%s%data#顯示接收到的內容s.close()發(fā)送端代碼:importsockets=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)0主機的
44、IP地址s.close()10.3簡單介紹socket模塊中用于TCP編程的常用方法。TCP一般用于要求可靠數(shù)據(jù)傳輸?shù)膱龊?。編寫TCP程序時經(jīng)常需要用到的socket模塊方法主要有:connect(address):連接遠程計算機send(bytes,flags):發(fā)送數(shù)據(jù)recv(bufsize,flags):接收數(shù)據(jù)bind(address):綁定地址listen(backlog):開始監(jiān)聽,等待客戶端連接accept():響應客戶端的請求10.4編寫代碼讀取搜狐網(wǎng)頁首頁內容。答:importurllib.requestdir(urllib.request)dir(fp)print(fp.
45、read(100)fp.close()10.5在自己的機器上配置IIS以支持Python腳本的運行,然后使用Python編寫腳本,運行后在網(wǎng)頁上顯示“Helloworld!”。答:核心代碼為printprintStatus:200OKprintContent-type:text/htmlprintprintPythonSampleCGIprintprintThisisaheaderprintHelloworld!printprint第11章大數(shù)據(jù)處理11.1簡單介紹常見的大數(shù)據(jù)處理框架。答:主要有三種,MapReduce分布式計算框架,可以將單個大型計算作業(yè)分配給多臺計算機執(zhí)行,可以在短時間內
46、完成大量工作,尤其適合數(shù)值型和標稱型數(shù)據(jù),但需要對行業(yè)領域具有一定理解后重寫算法來完成特定的業(yè)務處理要求。MapReduce的名字由函數(shù)式編程中常用的map和reduce兩個單詞組成。MapReduce在大量節(jié)點組成的集群上運行,工作流程是:單個作業(yè)被分成很多小份,輸入數(shù)據(jù)也被切片并分發(fā)到每個節(jié)點,每個節(jié)點只在本地數(shù)據(jù)上做運算,對應的運算代碼稱為mapper,這個過程即map階段;每個mapper的輸出通過某種方式組合,根據(jù)需要可能再進行重新排序,排序后的結果再被切分成小份并分發(fā)到各個節(jié)點進行下一步處理,這個過程被稱為reduce階段,對應的代碼稱為reducer。不同類型的作業(yè)可能需要不同數(shù)
47、量的reducer,并且,在任何時候,每個mapper或reducer之間都不進行通信,每個節(jié)點只負責處理自己的事務,并且只在分配到本地的數(shù)據(jù)集上進行運算。HadoopHadoop是MapReduce框架的一個免費幵源實現(xiàn),采用Java語言編寫,支持在大量機器上分布式處理數(shù)據(jù)。除了分布式計算之外,Hadoop還自帶分布式文件系統(tǒng),可以在上面運行多種不同語言編寫的分布式程序。Hadoop在可伸縮性、健壯性、計算性能和成本上具有無可替代的優(yōu)勢,事實上已成為當前互聯(lián)網(wǎng)企業(yè)主流的大數(shù)據(jù)分析平臺。Spark:Spark是一個針對超大數(shù)據(jù)集合的低延遲集群分布式計算系統(tǒng),比MapReduce快40倍左右。S
48、park是Hadoop的升級版本,兼容Hadoop的API,能夠讀寫Hadoop的HDFSHBASE順序文件等,與之不同的是將結果保存在內存中。Hadoop作為第一代產品使用了HDFS第二代加入了Cache來保存中間計算結果,第三代則是Spark倡導的流技術Streaming。11.2運行本章中代碼并理解MapReduce編程思路。答:略第12章Windows系統(tǒng)編程12.1查閱相關資料,解釋注冊表幾大根鍵的用途。答:略12.2選擇一個編寫好的Python程序,將其轉換為exe可執(zhí)行文件。答:略,請參考書中相關介紹。12.3編寫代碼,使用至少3中不同的方法啟動Windows自帶的計算器程序。答
49、:第一種方法:importosos.system(calc.exe)第二種方法:importosos.popen(calc.exe)第三種方法:importosos.startfile(calc.exe)第四種方法:importwin32apiwin32api.ShellExecute(0,open,calc.exe,1)第五種方法:importwin32processhandle=win32process.CreateProcess(rc:windowssystem32calc.exe,None,None,0,win32process.CREATE_NO_WINDOW,None,win32p
50、rocess.STARTUPINFO()12.4編寫代碼,檢測您所使用的操作系統(tǒng)版本。None,答:略,請參考12.5節(jié)第13章多線程編程13.1簡單敘述創(chuàng)建線程的方法。答:Thread類支持使用兩種方法來創(chuàng)建線程,一種是為構造函數(shù)傳遞一個可調用對象,另一種是繼承Thread類并在派生類中重寫_init_()和run()方法。創(chuàng)建了線程對象以后,可以調用其start()方法來啟動,該方法自動調用該類對象的run()方法,此時該線程處于alive狀態(tài),直至線程的run()方法運行結束。13.2簡單敘述Thread對象的方法。答:(1)join(timeout:阻塞當前線程,等待被調線程結束或超時
51、后再繼續(xù)執(zhí)行當前線程的后續(xù)代碼,參數(shù)timeout用來指定最長等待時間,單位為秒。(2)isAlive():測試線程是否處于運行狀態(tài)(3)start():自動調用run()方法,啟動線程,執(zhí)行線程代碼。(4)run():線程代碼,用來實現(xiàn)線程的功能與業(yè)務邏輯,可以在子類中重寫該方法來自定義線程的行為。13.3簡單敘述線程對象的daemon屬性的作用和影響。答:在腳本運行過程中有一個主線程,若在主線程中創(chuàng)建了子線程,當主線程結束時根據(jù)子線程daemon屬性值的不同可能會發(fā)生下面的兩種情況之一:1)當某子線程的daemon屬性為False時,主線程結束時會檢測該子線程是否結束,如果該子線程尚未完成
52、,則主線程會等待它完成后再退出;2)當某子線程的daemon屬性為True時,主線程運行結束時不對該子線程進行檢查而直接退出,同時所有daemon值為True的子線程將隨主線程一起結束,而不論是否運行完成。daemon屬性的值默認為False,如果需要修改,則必須在調用start()方法啟動線程之前進行修改。13.4解釋至少3種線程同步方法。答:(1)使用Condition對象可以在某些事件觸發(fā)后才處理數(shù)據(jù),可以用于不同線程之間的通信或通知,以實現(xiàn)更高級別的同步。Condition對象除了具有acquire()和release()方法之外,還有wait()、notify()、notify_al
53、l()下面通過經(jīng)典生產者/消費者問題來演示Condition對象的用法。等方法。(2)Queue模塊(在Python3中為queue模塊)實現(xiàn)了多生產者/多消費者隊列,尤其適合需要在多個線程之間進行信息交換的場合,該模塊的Queue對象實現(xiàn)了多線程編程所需要的所有鎖語義。(3)Event對象是一種簡單的線程通信技術,一個線程設置Event對象,另一個線程等待Event對象。Event對象的set()方法可以設置Event對象內部的信號標志為真;clear()方法可以清除Event對象內部的信號標志,將其設置為假;isSet()方法用來判斷其內部信號標志的狀態(tài);wait()方法只有在其內部信號狀
54、態(tài)為真時將很快地執(zhí)行并返回,若Event對象的內部信號標志為假,wait()方法將一直等待至超時或內部信號狀態(tài)為真。第14章數(shù)據(jù)庫編程14.1簡單介紹SQLite數(shù)據(jù)庫。答:SQLite是內嵌在Python中的輕量級、基于磁盤文件的數(shù)據(jù)庫管理系統(tǒng),不需要服務器進程,支持使用SQL語句來訪問數(shù)據(jù)庫。該數(shù)據(jù)庫使用C語言幵發(fā),支持大多數(shù)SQL91標準,支持原子的、一致的、獨立的和持久的事務,不支持外鍵限制;通過數(shù)據(jù)庫級的獨占性和共享鎖定來實現(xiàn)獨立事務,當多個線程同時訪問同一個數(shù)據(jù)庫并試圖寫入數(shù)據(jù)時,每一時刻只有一個線程可以寫入數(shù)據(jù)。支持2TB大小的單個數(shù)據(jù)庫,每個數(shù)據(jù)庫完全存儲在單個磁盤文件中,以S
55、QLiteB+樹數(shù)據(jù)結構的形式存儲,一個數(shù)據(jù)庫就是一個文件,通過簡單復制即可實現(xiàn)數(shù)據(jù)庫的備份。14.2使用Python內置函數(shù)dir()查看Cursor對象中的方法,并使用內置函數(shù)help()查看其用法。答:略。14.3敘述使用Python操作Access數(shù)據(jù)庫的步驟。答:(1)建立數(shù)據(jù)庫連接importwin32com.clientconn.Open(DSN)(2)打開記錄集rs_name=MyRecordset#表名rs.Open(+rs_name+,conn,1,3)(3)操作記錄集rs.AddNew()rs.Update()(4)操作數(shù)據(jù)sql_statement=InsertINTO
56、Table_Name(Field_1,Field_2)VALUES(data1,data2)conn.Open(DSN)conn.Execute(sql_statement)conn.Close()(5)遍歷記錄rs.MoveFirst()count=0while1:ifrs.EOF:breakelse:count=count+1rs.MoveNext()14.4敘述使用Python操作MSSQLServer數(shù)據(jù)庫的步驟。答:可以使用pywin32和pymssql兩種不同的方式來訪問MSSQLServer數(shù)據(jù)庫。先來了解一下pywin32模塊訪問MSSQLServer數(shù)據(jù)庫的步驟。(1)添加引
57、用:importadodbapiimportadodbapi.ado_constsasadc(2)創(chuàng)建連接:Cfg=constr=rProvider=SQLOLEDB.1;InitialCatalog=%s;DataSource=%s;userID=%s;Password=%s;%(Cfgdb,Cfgserver,sa,Cfgpassword)conn=adodbapi.connect(constr)(3)執(zhí)行sql語句:cur=conn.cursor()sql=select*fromsoftextBookwheretitle=0andremark3!=1.format(bookName,fl
58、ag)cur.execute(sql)data=cur.fetchall()cur.close()(4)執(zhí)行存儲過程:#假設proName有三個參數(shù),最后一個參數(shù)傳了nullret=cur.callproc(procName,(parm1,parm2,None)mit()(5)關閉連接conn.close()接下來再通過一個示例來簡單了解一下使用pymssql模塊訪問MSSQLServer數(shù)據(jù)庫的方法。importpymssqlconn=pymssql.connect(host=SQL01,user=user,password=password,database=mydatabase)cur=
59、conn.cursor()cur.execute(CREATETABLEpersons(idINT,nameVARCHAR(100)cur.executemany(INSERTINTOpersonsVALUES(%d,xinos.king),(1,JohnDoe),(2,JaneDoe)mit()cur.execute(SELECT*FROMpersonsWHERsEalesrep=xinos.king,JohnDoe)row=cur.fetchone()whilerow:printID=%d,Name=xinos.king%(row0,row1)row=cur.fetchone()cur.e
60、xecute(SELECT*FROMpersonsWHEREsalesrepLIKEJ%)conn.close()14.5敘述MySQLD模塊提供的數(shù)據(jù)庫訪問方法。答:Python訪問MySQL數(shù)據(jù)庫可以使用MySQLDb模塊,該模塊主要方法有:commit():提交事務。rollback():回滾事務。callproc(self,procname,args):用來執(zhí)行存儲過程,接收的參數(shù)為存儲過程名和參數(shù)列表,返回值為受影響的行數(shù)。execute(self,query,args):執(zhí)行單條sql語句,接收的參數(shù)為sql語句本身和使用的參數(shù)列表,返回值為受影響的行數(shù)。executemany(s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 獲取高分2025年軟考試題及答案
- 法學概論的課程改革與試題及答案的適應
- 2025年軟件設計師考試回顧與總結試題及答案
- 企業(yè)變革中的風險應對考題及答案
- VB考試技能訓練試題及答案
- 2025【項目工程管理合作協(xié)議】合同范本
- 2025年軟件設計師考試前瞻試題及答案
- 生產工作匯報
- 了解金融市場動態(tài)助力個人投資計劃
- 品牌傳播的情感營銷方式分析計劃
- Unit6 Living History of Culture同步梳理-【中職專用】高三英語寒假自學課(高教版2021·基礎模塊3)
- 反應堆熱工分析課程設計報告書
- TL-PMM180超低煙塵使用及維護培訓
- 基于UG的汽車安全氣囊蓋注塑模具設計
- 華中師大一附中2024屆高二數(shù)學第二學期期末綜合測試模擬試題含解析
- 30題中國民航機場消防員崗位常見面試問題含HR問題考察點及參考回答
- 動車乘務員和動車餐吧乘務員培訓內容
- 寄生蟲的預防 小學生
- 公司危化品管理的關鍵要素與成功因素
- 電線電纜投標文件
- 原始憑證粘貼單(模板)
評論
0/150
提交評論