Python大學(xué)教程(第2版) 第8章題目及答案_第1頁
Python大學(xué)教程(第2版) 第8章題目及答案_第2頁
Python大學(xué)教程(第2版) 第8章題目及答案_第3頁
Python大學(xué)教程(第2版) 第8章題目及答案_第4頁
Python大學(xué)教程(第2版) 第8章題目及答案_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第八章面向?qū)ο缶幊桃贿x擇題Python中的數(shù)據(jù)成員和函數(shù)成員默認(rèn)都是()的A.publicB.privateC.protectD.無法被訪問2.Python將以()開始的成員(但不能由雙下劃線結(jié)束)定義為私有成員A.數(shù)字B.單下劃線C.字母D.雙下劃線3.加法操作對應(yīng)()A.__add__(self,other)B.__sub__(self,other)C.__mul__(self,other)D.__and__(self,other)4.通過(),可以吸收現(xiàn)有類的數(shù)據(jù)和行為來創(chuàng)建新類,并添加新的性能來增強(qiáng)此類。A.繼承B.重載C.類D.對象5.派生類定義一個與基類同名的函數(shù);當(dāng)對象訪問該函數(shù)時,派生類的函數(shù)會()A.覆蓋基類的函數(shù)B.調(diào)用基類的函數(shù)C.調(diào)用基類和派生類的函數(shù)D.基類和派生類的函數(shù)均不調(diào)用6.在派生類定義的函數(shù)中,如果想調(diào)用基類的同名函數(shù),則需要在函數(shù)名前添加()作為限定A.雙下劃線B.基類名和點(diǎn)操作符C.括號D.下劃線7關(guān)于Python多態(tài)以下選項(xiàng)正確的是()A.大多數(shù)面向編程語言都不支持多態(tài)特性B.Python本事不是多態(tài)語言C.Python支持多態(tài)D.Python不支持多態(tài)8關(guān)于面向?qū)ο缶幊滔铝姓f法正確的是()A.面向?qū)ο缶幊痰囊粭l基本原則是計算機(jī)程序是由單個能夠起到子程序作用的單元或?qū)ο蠼M合而成的B.面向?qū)ο蠓椒ń鉀Q問題的思路就是主張從客觀世界固有的事物出發(fā)來構(gòu)造系統(tǒng),提倡用人類在現(xiàn)實(shí)生活中常用的思維方法來認(rèn)識、理解和描述客觀事物C.面向?qū)ο蠓椒ㄊ且环N運(yùn)用一系列面向?qū)ο蟮闹笇?dǎo)軟件構(gòu)造的概念和原則(如類、對象、抽象、封裝、繼承、多態(tài)、消息等)來構(gòu)造軟件系統(tǒng)的開發(fā)方法D.ABC9關(guān)于類和對象下列說法正確的是()對象是存在于某個時空的具體實(shí)體,而類則是擁有共同的結(jié)構(gòu)、行為和語義的一組對象的抽象類可以作為對象的一種描述機(jī)制,用來形成程序中更大的模塊類和對象的關(guān)系就好像數(shù)據(jù)類型和變量的關(guān)系。各個對象可以同屬于一個類,但擁有彼此獨(dú)立的屬性。對象是類的實(shí)例,可以創(chuàng)建類的多個對象ABC10關(guān)于類成員下列說法正確的是()Python中的數(shù)據(jù)成員和函數(shù)成員默認(rèn)都是公開(public)的,即成員在類外可以被訪問利用地圖做長尾關(guān)鍵詞避免數(shù)據(jù)成員被直接修改的方法是將其設(shè)置為私有(private)成員Python中將以雙下劃線開始的成員定義為私有成員ABC二判斷題1.Python允許函數(shù)重載。 ()self指向的是當(dāng)前創(chuàng)建的對象,Python解釋器會自動進(jìn)行傳入。 ()self參數(shù)表示函數(shù)的調(diào)用者被隱式地傳遞到函數(shù)中,在函數(shù)體內(nèi)可以使用self參數(shù)來代表調(diào)用對象訪問其成員。 ()在將數(shù)據(jù)成員設(shè)置為私有后,為了在類外可以操作成員的值需要提供get函數(shù)來獲取值和set函數(shù)來設(shè)置值。 ()迭代是Python中一個很強(qiáng)大的功能,是訪問集合元素的一種方式,利用迭代器可以進(jìn)行優(yōu)雅的遍歷。 ()__iter__()方法返回一個迭代器對象。 ()一個類(Circle類)的成員也可以是另一個類(Point類)的對象。()派生類不能夠根據(jù)自己的特殊性質(zhì)定義新的成員。()派生類雖然繼承了基類的數(shù)據(jù)成員,但由于它們都是私有成員,因此在派生類中不可訪問,只能通過基類定義的公開函數(shù)成員進(jìn)行訪問。 ()在定義了派生類后,派生類所構(gòu)造的對象既可以訪問繼承自基類的成員,又可以訪問派生類自己定義的成員。 ()三填空題1.避免數(shù)據(jù)成員被直接修改的方法是將其設(shè)置為成員。2.Python將以開始的成員(但不能由雙下劃線結(jié)束)定義為私有成員。3.解釋器會拋出-來表示該成員不能在類外部訪問。4.如果想要獲取一個自定義的類的迭代器,需要在類中實(shí)現(xiàn)和方法。5.當(dāng)創(chuàng)建一個新類時,并不需要創(chuàng)建全新的數(shù)據(jù)成員和函數(shù),可以指明這個類繼承某個現(xiàn)有的類。這時,現(xiàn)有的類被稱為-,繼承實(shí)現(xiàn)的新類被稱為。6.在Python中,私有函數(shù)(可以/不可以)被覆蓋。7.在派生類定義的函數(shù)中,如果想調(diào)用基類的同名函數(shù),則需要在函數(shù)名前添加作為限定。8.除了數(shù)據(jù)成員可以設(shè)置為私有成員之外,一些不希望在類外調(diào)用的函數(shù)也可以設(shè)置為。9.通過,可以吸收現(xiàn)有類的數(shù)據(jù)和行為來創(chuàng)建新類,并添加新的性能來增強(qiáng)此類。10.在定義了派生類后,派生類所構(gòu)造的對象既可以訪問的成員,又可以訪問的成員。四簡答題編寫一個Fraction類來管理分?jǐn)?shù)類型并提供一些運(yùn)算和操作。簡述Python中的繼承。簡述Python的isinstance函數(shù)。先設(shè)計一個Point類來表示平面中的點(diǎn)。Point類包含兩個數(shù)據(jù)成員,用來表示平面坐標(biāo)。再設(shè)計Circle類來表示圓。Circle類使用一個Point類的數(shù)據(jù)成員來表示圓心位置,使用另一個數(shù)據(jù)成員表示半徑大小。定義一個學(xué)生信息類。答案 一選擇題A2.D3.A4.A5.A6.B7.D8.D9.D10.D二判斷題×2.√3.√4.√5.√6.√7.√8.×9.√10.√三填空題1.private2.雙下劃線3.AttributeError4.__iter__()__next__()5.基類派生類6.不可以7.基類名和點(diǎn)操作符8.私有9.繼承10.基類派生類四簡答題1.代碼如下1 classFraction:2

#構(gòu)造函數(shù)3

def__init__(self,a=0,b=1):4

ifb==0:5

raiseZeroDivisionError("Denominatorcan'tbezero.")6

divisor=gcd(abs(a),abs(b))7

self.__numerator=(-1ifb<0else1)*a//divisor8

self.__denominator=abs(b)//divisor910

#重載加法運(yùn)算符11

def__add__(self,other):12

m=self.__denominator*other.__denominator13

n1=self.__numerator*other.__denominator14

n2=other.__numerator*self.__denominator15

returnFraction(n1+n2,m)1617

#重載減法運(yùn)算符18

def__sub__(self,other):19

m=self.__denominator*other.__denominator20

n1=self.__numerator*other.__denominator21

n2=other.__numerator*self.__denominator22

returnFraction(n1-n2,m)2324

#重載乘法運(yùn)算符25

def__mul__(self,other):26

m=self.__numerator*other.__numerator27

n=self.__denominator*other.__denominator28

returnFraction(m,n)2930

#重載除法運(yùn)算符31

def__truediv__(self,other):32

m=self.__numerator*other.__denominator33

n=self.__denominator*other.__numerator34

returnFraction(m,n)3536

#重載乘方運(yùn)算符37

def__pow__(self,power,modulo=None):38

n=pow(self.__numerator,power,modulo)39

m=pow(self.__denominator,power,modulo)40

returnFraction(n,m)4142

#重載比較運(yùn)算符43

def__lt__(self,other): result=self.__sub__(other) returnresult.__numerator<0 def__le__(self,other): result=self.__sub__(other) returnresult.__numerator<=0 def__gt__(self,other): result=self.__sub__(other) returnresult.__numerator>0 def__ge__(self,other): result=self.__sub__(other) returnresult.__numerator>=0 def__eq__(self,other): result=self.__sub__(other) returnresult.__numerator==0 def__ne__(self,other): result=self.__sub__(other) returnresult.__numerator!=04647

#重載int函數(shù),將分?jǐn)?shù)值取整48

def__int__(self):49

returnself.__numerator//self.__denominator5051

#重載float函數(shù),將分?jǐn)?shù)化為浮點(diǎn)值52

def__float__(self):53

returnself.__numerator/self.__denominator5455

#重載str函數(shù),使Fraction類對象可打印56

def__str__(self):57

ifself.__denominator==1:58

return"%d"%self.__numerator59

else:60

return"%d/%d"%(self.__numerator,self.__denominator)6162

#全局函數(shù),計算最大公約數(shù)63

defgcd(m,n):64

whilen>0:

m,n=n,m%n

returnm2.繼承是面向?qū)ο蟪绦蛟O(shè)計中的一個重要且功能強(qiáng)大的特性。通過繼承,可以吸收現(xiàn)有類的數(shù)據(jù)和行為來創(chuàng)建新類,并添加新的性能來增強(qiáng)此類。繼承指的是類之間的一般與特殊的關(guān)系。當(dāng)創(chuàng)建一個新類時,并不需要創(chuàng)建全新的數(shù)據(jù)成員和函數(shù),可以指明這個類繼承某個現(xiàn)有的類。這時,現(xiàn)有的類被稱為基類、父類或超類,繼承實(shí)現(xiàn)的新類被稱為子類或派生類。派生類代表了一組更加特殊的對象。通常,派生類包含了從基類繼承而來的數(shù)據(jù)和方法,并進(jìn)行了自己的擴(kuò)充。在定義了派生類后,派生類所構(gòu)造的對象既可以訪問繼承自基類的成員,又可以訪問派生類自己定義的成員。需要注意的是,派生類雖然繼承了基類的數(shù)據(jù)成員,但由于它們都是私有成員,因此在派生類中不可訪問,只能通過基類定義的公開函數(shù)成員進(jìn)行訪問。3.isinstance函數(shù)接收object和classinfo兩個參數(shù)。object參數(shù)是一個類的實(shí)例,classinfo參數(shù)是一個類名。如果object對象是classinfo類的一個直接實(shí)例或間接實(shí)例(即object所屬的類是classinfo類的直接派生類或間接派生類),則該函數(shù)返回True,否則返回False。例如,對于代碼清單8-11中定義的stu對象,調(diào)用isinstance(stu,CollegeStudentInfo)和isinstance(stu,StudentInfo)函數(shù)均返回True。4.1

importmath23

classPoint:4

#構(gòu)造函數(shù)5

def__init__(self,x=0,y=0):6

self.__x=x7

self.__y=y89

#設(shè)置坐標(biāo)10

defsetPosition(self,x=0,y=0):11

self.__x=x12

self.__y=y1314

#獲取坐標(biāo)15

defgetPosition(self):16

return(self.__x,self.__y)1718

#平移坐標(biāo)19

defmove(self,dx,dy):20

self.__x+=dx21

self.__y+=dy2223

#計算到另一個點(diǎn)的直線距離24

defdistanceTo(self,other):25

2627

#重載減法運(yùn)算符28

def__sub__(self,other):29

returnself.distanceTo(other)3031

classCircle:32

#構(gòu)造函數(shù)33

def__init__(self,radius,x=0,y=0):34

self.__center=Point(x,y)35

self.__radius=radius3637

#設(shè)置圓心坐標(biāo)38

defsetCenterPosition(self,x,y):39

self.__center.setPosition(x,y)4041

#設(shè)置半徑大小42

defsetRadius(self,radius):43

self.__radius=radius4445

#獲取圓心坐標(biāo)46

defgetCenterPosition(self):47

returnself.__center.getPosition()4849

#設(shè)置半徑大小50

defgetRadius(self):51

returnself.__radius5253

#計算圓的周長54

defgetPerimeter(self):55

returnmath.pi*2*self.__radius5657

#計算圓的面積58

defgetArea(self):59

returnmath.pi*self.__radius*self.__radius6061

#平移62

defmove(self,dx,dy):63

self.__center.move(dx,dy)6465

#計算與另一個圓的圓心距66

defcenterDistanceTo(self,other):67

returnself.__center.distanceTo(other.__center)6869

#重載in運(yùn)算符70

def__contains__(self,item):71

returnself.__center.distanceTo(item)<=self.__radius7273

#判斷與另一個圓是否內(nèi)含74

defisInternal(self,other):75

returnself.centerDistanceTo(other)<self.__radius-other.__radius7677

#判斷與另一個圓是否重合78

defisCoincided(self,other):79

returnself.__radius==other.__radius\80

andself.centerDistanceTo(other)==08182

#判斷與另一個圓是否內(nèi)切83

defisInternallyTangent(self,other):84

returnself.centerDistanceTo(other)==self.__radius-other.__radius\85

andself.__radius!=other.__radius8687

#判斷與另一個圓是否相交88

defisSecant(self,other):89

returnself.__radius-other.__radius<self.centerDistanceTo(other)\90

<self.__radius+other.__radius9192

#判斷與另一個圓是否外切93

defisExternallyTagent(

溫馨提示

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

評論

0/150

提交評論