Python面向對象程序設計期末復習題及答案(含編程題)


一、選擇題
1、關於面向過程和面向對象,下列說法錯誤的是(B)。

A.面向過程和面向對象都是解決問題的一種思路
B.面向過程是基於面向對象的
C.面向過程強調的是解決問題的步驟
D.面向對象強調的是解決問題的對象

2、關於類和對象的關系,下列描述正確的是(D)。

A.類是面向對象的核心
B.類是現實中事物的個體
C.對象是根據類創建的,並且一個類只能對應一個對象
D.對象描述的是現實的個體,它是類的實例

3、構造方法的作用是(C)。

A.一般成員方法 B.類的初始化
C.對象的初始化 D.對象的建立

4、構造方法是類的一個特殊方法,Python 中它的名稱為(C)。

A.與類同名 B. _construct C. init D. init

5、Python 類中包含一個特殊的變量(A),它表示當前對象自身,可以訪問類的成員

A. self B. me C.this D.與類同名

二、填空題
1、Python安裝擴展庫常用的是___工具。(pip)

2、Python程序文件擴展名主要有__和__兩種,其中后者常用於GUI程序。(py、pyw)

3、查看變量類型的Python內置函數是______。(type())

4、列表對象的sort()方法用來對列表元素進行原地排序,該函數返回值為 _____。(None)

5、查看變量內存地址的Python內置函數是_______。(id())

6、Python源代碼程序編譯后的文件擴展名為___。(pyc)

7、為了提高Python代碼運行速度和進行適當的保密,可以將Python程序文件編譯為擴展名____的文件。(pyc)

8、____命令既可以刪除列表中的一個元素,也可以刪除整個列表。(del)

三、判斷題
1、在 Python 中定義類時,如果某個成員名稱前有 2 個下划線則表示是私有成員。(對)

2、在類定義的外部沒有任何辦法可以訪問對象的私有成員。(錯)

3、Python 中一切內容都可以稱為對象。(對)

4、在一個軟件的設計與開發中,所有類名、函數名、變量名都應該遵循統一的風格和規范。 (對)

5、定義類時所有實例方法的第一個參數用來表示對象本身,在類的外部通過對象名來調用
實例方法時不需要為該參數傳值。(對)

6、對於 Python 類中的私有成員,可以通過“對象名._類名__私有成員名”的方式來訪問。 (對)

7、使用內置函數 open()且以”w”模式打開的文件,文件指針默認指向文件尾。(錯)

8、使用內置函數 open()打開文件時,只要文件路徑正確就總是可以正確打開的。(錯)

9、假設已導入 random 標准庫,那么表達式 max([random.randint(1,10) for i in range(10)]) 的值一定是 10。(錯)

10、Python是一種跨平台、開源、免費的高級動態編程語言。(對)

11、 Python 3.x完全兼容Python 2.x。(錯)

12、 使用內置函數open()且以”w”模式打開的文件,文件指針默認指向文件尾。(錯)

13、 使用內置函數open()打開文件時,只要文件路徑正確就總是可以正確打開的。(錯)

14、 Python變量使用前必須先聲明,並且一旦聲明就不能再當前作用域內改變其類型(錯)

15、 Python采用的是基於值得自動內存管理方式。(對)

16、 在定義函數時,某個參數名字前面帶有一個*符號表示可變長度參數,可以接收任意多個普通實參並存放於一個元組之中。(對)

17、 在定義函數時,某個參數名字前面帶有兩個*符號表示可變長度參數,可以接收任意多個關鍵參數並將其存放於一個字典之中。(對)

18、 定義函數時,帶有默認值的參數必須出現在參數列表的最右端,任何一個帶有默認值的參數右邊不允許出現沒有默認值的參數。(對)

19、 在調用函數時,可以通過關鍵參數的形式進行傳值,從而避免必須記住函數形參順序的麻煩。(對)

20、 在調用函數時,必須牢記函數形參順序才能正確傳值。(錯)

21、 調用函數時傳遞的實參個數必須與函數形參個數相等才行。(錯)

四、解答題
1、閱讀下面的代碼,並分析假設文件“D:\test.txt”不存在的情況下兩段代碼可能發生的問
題。

代碼 1:

>>> try: 
fp = open(r'd:\test.txt') 
print('Hello world!', file=fp) 
finally: 
fp.close() 
代碼 2>>> try: 
fp = open(r'd:\test.txt''a+') 
print('Hello world!', file=fp) 
finally: 
fp.close() 

答:

代碼 2:

 

>>> try:

fp = open(r'd:\test.txt''a+')

print('Hello world!', file=fp)

finally:

fp.close()

 

答:

2、寫出下面代碼的優化版本,提高運行效率。

x = list(range(500)) 
for item in x: 
t = 5**5 
print(item+t) 

答:
3、寫出下面代碼的運行結果。

def Sum(a, b=3, c=5): 
return sum([a, b, c]) 
print(Sum(a=8, c=2)) 
print(Sum(8)) 
print(Sum(8,2)) 

答:
4、閱讀下面的程序,判斷其是否可以正常運行,如果可以運行則寫出執行結果,如果不能
運行則寫出理由。

class Test: 
def __init__(self, value): 
self.__value = value 
@property def value(self): 
return self.__value 
t = Test(3) 
t.value = 5 
print(t.value)

答:

五、代碼設計題

(部分題目略,考試后忘了題目后期補充)

1、

import re
value = []
print("請輸入:")
items=[x for x in input().split(',')]
for p in items:
   if len(p)<6 or len(p)>12:
       continue
   else:
       pass
   if not re.search("[a-z]",p):
       continue
   elif not re.search("[0-9]",p):
       continue
   elif not re.search("[A-Z]",p):
       continue
   elif not re.search("[$#@]",p):
       continue
   elif re.search("\s",p):
       continue
   else:
       pass
   value.append(p)
print (",".join(value))

2、

x=input("x=")
l=x.split()
d={}
for i in l:
  d[i]=d.get(i,0)+1
  l2=sorted(d)
for i in l2:
  print("{}:{}".format(i,d[i]))
  l=[]
for i in range(3):
  x=int(input("x="))
l.append(x)
l.sort()
for i in l:
  print(i,end=" ")

3、小明愛跑步和吃東西。

1)小明體重75.0公斤
2)每次跑步會減肥0.5公斤
3)每次吃東西體重會增加1公斤
4)小美的體重是45.0公斤

class Person:
   def __init__(self, name, weight):
       self.name = name
       self.weight = weight
   def __str__(self):
       return '我的名字叫 %s 體重是 %.2f' % (self.name, self.weight)
   def run(self):
       print ('%s 愛跑步' % self.name)
       self.weight -= 0.5
   def eat(self):
       print ('%s 吃東西' % self.name)
       self.weight += 1
xx = Person('小明', 75.0)
xx.run()
xx.eat()
print (xx)
xm = Person('小美', 45.0)
xm.run()
xm.eat()
print (xm)
print (xx)

4、擺放家具
需求:
1)房子有戶型,總面積和家具名稱列表
新房子沒有任何的家具
2)家具有名字和占地面積,其中
床:占4平米
衣櫃:占2平面
餐桌:占1.5平米
3)將以上三件家具添加到房子中
4)打印房子時,要求輸出:戶型,總面積,剩余面積,家具名稱列表

 

class Home:
   def __init__(self,home_type,area):
       self.home_type = home_type
       self.area = area
       self.freearea = area  #初始值等於總面積
       self.jiaju = []
   def __str__(self):
       #輸出:戶型,總面積,剩余面積,家具名稱列表
       return (' 戶型:%s \n 總面積:%.2f \n 剩余面積:%.2f \n 家具名 %s'
               %(self.home_type,self.area,self.freearea,self.jiaju))
   def add_jiaju(self,itm):
       print('要添加%s'%itm)
       #判斷家具的面積
       if itm.area > self.freearea:
           print('%s的面積太大,無法添加!'%(itm.name))
           return
       #將家具的名稱添加到列表
       self.jiaju.append(itm.name)
       #計算剩余面積
       self.freearea -=itm.area
class jiaju():
   def __init__(self,name,area):
       self.name = name
       self.area = area
   def __str__(self):
       return "[ %s ]:占地 [ %.2f ] 平米"%(self.name,self.area)
#創建家具
bed = jiaju("",4)
chest = jiaju('衣櫃',2)
table = jiaju('餐桌',1.5)
print('bed:',bed)
print('bed:',bed.name)
print('bed:',bed.area)
print(chest)
print(table)
#創建房子
myhome = Home('三室一廳',100)
myhome.add_jiaju(bed)
myhome.add_jiaju(chest)
myhome.add_jiaju(table)
print(myhome)

5、需求:
1)士兵瑞恩有一把AK47
2)士兵可以開火(士兵開火扣動的是扳機)
3)槍能夠發射子彈(把子彈發射出去)
4)槍能夠裝填子彈 --增加子彈的數量

class Gun(object):
   def __init__(self,model):
       self.model = model
       self.bullet_count = 0
   def add_bullet(self,count):
       self.bullet_count += count
   def shoot(self):
       if self.bullet_count <= 0 :
           print('%s沒有子彈' %(self.model))
       else:
           self.bullet_count -= 1
           print('%s的子彈數量為%s' %(self.model,self.bullet_count))
class Soldier(object):
   def __init__(self,name):
       self.name =name
       self.gun = None
   def fire(self):
       if self.gun == None:
           print('%s沒有槍' %(self.name))
       else:
           self.gun.add_bullet(5)
           self.gun.shoot()
ak47 = Gun('AK47')
ak47.add_bullet(10)
ak47.shoot()
ruien = Soldier('RE')
ruien.gun = ak47
ruien.fire()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM